centos7-Logstash的使用

1.下载

Logstash官方下载

2.安装

2.1 yum安装

logstash.repo

centos7-Logstash的使用
[logstash-7.x]
name=Elastic repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

安装

sudo yum install logstash

查看logstash安装位置

2.2 tar解压安装

下载安装包之后,解压即可

3.配置

3.1 实例和管道

实例是指通过bin/logstash启用的一个服务

管道是指实例中处理数据的通道,包括三个部分收集器(input)、过滤器(filter)、转发器(output)。

  • 每一个运行的logstash实例至少有一个管道,数据的收集、过滤、转发都是在管道中进行的。
  • 在一个实例中,每一个管道的收集器input有独立的一个线程进行处理,但是每个管道的过滤器filter、转发器output没有独立的线程,是所有管道共用的线程处理。

3.2 配置文件

配置是指logstash的配置文件,有两个配置文件logstash.yml和pipelines.yml,对应实例和管道的配置。

  • logstash.yml主要配置包括管道设置、主管道配置、api设置、模块设置、队列设置、死信队列设置、调试设置、插件设置、xpack设置等,是logstash运行实例的主要配置。
  • pipelines.yml主要是每个logstash运行实例的多管道配置,默认管道是main,配置:
- pipeline.id: main
  path.config: "/etc/logstash/conf.d/*.conf"

一个管道的配置文件,参考文章Logstash 高级用法Pipelines模式

  • 如果指向的是一个具体的配置文件,则按该配置文件进行处理。
  • 如果指向的是一个配置文件的目录,则会合并该目录下的所有文件,即形成一个大文件,如confd.d目录下有配置文件a.conf和b.conf

a.conf

input {
    file {
        path => "/data/log/a.log"
    }
}
filter {
    date {
        match => [ "message", "yyyy-MM-dd HH:mm:ss" ] locale => "Asia/Shanghai" timezone => "Europe/Paris" target => "messageDate"
    }
}
output {
    elasticsearch {
        hosts => ["192.168.118.14"]
        index => "a-log-%{+YYYY.MM.dd}"
    }
}

b.conf

input {
    file {
        path => "/data/log/b.log"
    }
}
filter {
    extractnumbers {
        source => "message" target => "message2"
    }
}
output {
    elasticsearch {
        hosts => ["192.168.118.24"]
        index => "a-log-%{+YYYY.MM.dd}"
    }
}

那么合并后就是

input {
    # a.conf input
    file {
        path => "/data/log/a.log"
    }
    # b.conf input
    file {
        path => "/data/log/b.log"
    }
}
filter {
    # a.conf filter
    date {
        match => [ "message", "yyyy-MM-dd HH:mm:ss" ]
        locale => "Asia/Shanghai" timezone => "Europe/Paris" target => "messageDate"
    }
    # b.conf filter
    extractnumbers {
        source => "message"
        target => "message2"
    }
}
output {
    # a.conf output
    elasticsearch {
        hosts => ["192.168.118.14"]
        index => "a-log-%{+YYYY.MM.dd}"
    }
    # b.conf output
    elasticsearch {
        hosts => ["192.168.118.24"] index => "a-log-%{+YYYY.MM.dd}"
    }
}

3.3 单实例单管道

单实例单管道,即启用一个实例,且实例只有一个管道。logstash安装后默认是单管道。

因为同一个实例中一个管道的配置文件目录如conf.d下的多个conf文件会被合并为一个配置文件,且实例的管道收集器线程分开,过滤器、转发器是线程共用,会导致过滤器、转发器多次执行,进而产生数据混乱。

这种情况下可以通过在收集器添加索引或者标签,在过滤器和转发器上通过条件判断进行区分,如下

a.conf

input {
    file {
        path => "/data/log/a.log"
        type => "a-log"
        # tag => "a-log"
    }
}
output {
    # if "a-log" in [tags]
    if [type] == "a-log" {
        elasticsearch {
            hosts => ["192.168.118.14"]
            index => "a-log-%{+YYYY.MM.dd}"
        }
    }
}
input {
    file {
        path => "/data/log/b.log"
        type => "b-log"
        # tag => "b-log"
    }
}
output {
    # if "b-log" in [tags]
    if [type] == "b-log" {
            elasticsearch {
            hosts => ["192.168.118.24"]
            index => "b-log-%{+YYYY.MM.dd}"
        }
    }
}

这种情况对于复杂业务来说,只会越来越臃肿,显然不适合。

而且一个实例的资源配置是相同的,但不同收集器对资源的要求(管道的要求)是不一样,因此资源设置太大会造成浪费,设置太少会造成不足。这时可以使用单实例多管道解决上述问题。

3.4 单实例多管道

对于单实例单管道问题,可以通过为单实例配置多管道进行解决问题。多管道的配置参考:

- pipeline.id: main #  管道名
  path.config: "/etc/logstash/conf.d/*.conf" #  管道配置文件位置,将合并*.conf文件
  pipeline.workers: 3 #  cpu核数
  pipeline.batch.size: 125 #  输入源批量事件的数量
  queue.type: persisted #  队列类型,persisted硬盘模式
  queue.page_capacity: 50mb #  硬盘模式每页数据大小
- pipeline.id: my-other-pipeline #  管道名
  path.config: "/etc/different/path/p2.cfg" # 管道配置文件
  pipeline.batch.size: 2 #  输入源批量事件的数量
  pipeline.batch.delay: 1 # 轮询下一次事件的等待时长
  queue.type: memory # 队列类型,memory内存模式

管道配置文件pipelines.yml可以针对不同管道的参数进行配置,满足不同管道的资源要求。

同样需要注意的是管道配置文件指定为目录是配置文件合并的问题,需要通过条件判断合理解决。

3.5 多实例单管道

多实例单管道,即通过bin/logstash运行多个logstash实例。

注意:

  1. 运行实例时logstash.yml配置文件中的path.data不同实例要配置不同的路径,不能共用一个数据存储的路径。
  2. 多实例相当于启用多个服务,占用更多的服务资源,所以非不得以情况下还是建议使用单实例多管道。

3.6 多实例多管道

多实例多管道,即启用多个实例,且每个实例都是多管道,参考前面。

3.7 yum安装下配置

yum安装的logstash是以服务的形式运行,所以可以理解为logstash启动时是启动了一个logstash实例,当然也可以通过手动启动实例。

因此该模式适用也推荐使用单例单管道和单例多管道的配置。

3.8 tar安装配置

tar安装的logstash是通过手动bin/logstash进行启动,可以启动多个实例,所以可以灵活使用单例单管道、单例多管道、多实例单管道、多实例多管道,综合考虑资源的情况去选择。

4. nginx日志收集

现在采用单例单管道模式,以收集nginx日志为例,实操logstash服务。

4.1 配置文件

logstash安装后main管道的默认配置文件是在/etc/logstash/conf.d/*.conf,因此我们拷贝/etc/logstash/logstash-sample.conf到/etc/logstash/conf.d/logstash-sample.conf,并改名为logstash-local-nginx-log.conf,并编辑,最终内容

input {
    # 从文件读取日志信息
    file {
        path => "/var/log/nginx/access.log"
        type => "nginx-access-log"
        # 从日志的第一行开始进行分析
        # start_position => "beginning"
    }
}
filter {
    grok {
        match => {
            "message" => "%{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:time}\] \"%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}\" %{NUMBER:http_status_code} %{NUMBER:bytes} \"(?<http_referer>\S+)\" %{QS:agent} \"(?<http_x_forwarded_for>\S+)\"\"(?<upstream_cache_status>\S+)\""
        }
    }
    geoip {
        source => "clientip"
    }
}
output {
    # &#x8F93;&#x51FA;es
    elasticsearch {
        hosts => ["192.168.181.100:9200"]
        index => "nginx-access-log-%{+YYYY.MM.dd}"
    }
}</upstream_cache_status></http_x_forwarded_for></http_referer>

4.2 启用服务

&#x67E5;&#x770B;&#x670D;&#x52A1;&#x72B6;&#x6001;
systemctl status kibana
&#x542F;&#x52A8;&#x670D;&#x52A1;
systemctl start kibana
&#x505C;&#x6B62;&#x670D;&#x52A1;
systemctl stop kibana
&#x91CD;&#x542F;&#x670D;&#x52A1;
systemctl restart kibana

4.3 验证结果

打开elasticsearch_head,可以看到对应的索引,如下图

同样在kibana中stack manager的索引下,新建索引中可以找到对应的logstash转发的索引

新建索引后

在Analytics->Discover可以找到logstash转让的记录

Original: https://www.cnblogs.com/guohaixin/p/16002028.html
Author: 飘梧
Title: centos7-Logstash的使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/580632/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 进程与线程的区别:最浅显易懂的解释

    作者丨阮一峰 http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html 进程(process)和线程(th…

    Java 2023年5月30日
    067
  • Kotlin学习快速入门(9)—— 密封类的使用

    原文地址: Kotlin学习快速入门(9)—— 密封类的使用 – Stars-One的杂货小窝 代码逻辑中,很多时候我们会需要分支语句,来根据数据的情况走不同的处理逻辑…

    Java 2023年6月13日
    0113
  • 【一知半解】零值拷贝

    传统IO 应用调用read方法向操作系统发起读数据的请求,此时由 用户态切换为 内核态 当系统收到读数据请求时,利用DMA控制器把数据从磁盘读取到系统缓存区中(图中2.1) 再然后…

    Java 2023年6月9日
    086
  • SpringCloud01

    SpringCloud01 淘宝架构演进之路 https://mp.weixin.qq.com/s?__biz=MzU0OTk3ODQ3Ng==&mid=224748542…

    Java 2023年6月13日
    077
  • Spring IOC源码研究笔记(2)——ApplicationContext系列

    1.1. 继承关系 非web环境下,一般来说常用的就两类ApplicationContext: 配置形式为XML的:ClassPathXmlApplicationContext、F…

    Java 2023年6月10日
    075
  • 5.Dubbo3新特性

    1.注册模型的改变 2.x版本时一个接口就是一个服务 3.x引入了全新的基于应用粒度的服务发现机制 zk的可视化工具,可以看出,dubbo3.x兼容了之前2.x以接口名称为key,…

    Java 2023年6月5日
    0119
  • JVM 学习笔记之动手编译JDK【一】

    动手编译 JDK 以下编译的版本是 JDK13,环境为 Deepin15.11 一、下载源码 第一种方式: Mercurial 版本控制获取源码,下载速度极慢(不推荐) 1.1 安…

    Java 2023年6月5日
    0108
  • 是时候为Spring Boot 3.0做准备了

    2018年2月28日Spring Boot进入2.0时代,距今已经超过4年了。 2022 年 11 月 Spring Boot 3.0 将正式发布,它将基于 Spring Fram…

    Java 2023年5月30日
    091
  • java实现简易的局域网对话系统

    先说一下 写的确实比较一般,别喷 为什么呢,疫情原因,学校提前两周期末考试,时间也不太充足,将就一下 服务器代码: package xcvcvcx; import java.io….

    Java 2023年6月5日
    072
  • spring boot集成solr-SpringBoot(26)

    了解Solr Solr是一个独立的企业级搜索应用服务器,对外提供API接口。用户可以通过HTTP请求向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过HTTP GET操…

    Java 2023年6月13日
    079
  • 并行流的线程安全问题(parallelStream)

    并行流的线程安全问题(parallelStream) 问题代码 Map madData = new HashMap(); List list = paramVo.getList()…

    Java 2023年6月7日
    086
  • Ubuntu中安装redis

    第一种方式在线安装首要前提安装c语言编译环境,命令如下:$sudo apt-get install gcc 安装完成后可以输入$gcc –version查看版本 1、获…

    Java 2023年6月9日
    095
  • java常用类String

    java常用类String 理解String的不可变性 package com.zx.java; import org.junit.Test; /** * String的使用 * …

    Java 2023年6月6日
    096
  • fastposter v2.7.1 紧急发布 电商海报编辑器

    fastposter v2.7.1 紧急发布 电商海报编辑器 fastposter海报生成器,电商海报编辑器,电商海报设计器,fast快速生成海报 海报制作 海报开发。二维码海报,…

    Java 2023年6月5日
    083
  • 1.2 w字+!Java IO 基础知识系统总结 | JavaGuide

    首发于:JavaGuide(「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。)原文地址:https://javaguide.cn/java/io/i…

    Java 2023年6月9日
    083
  • 在图片上指定区域写文字,超过长度自动换行

    public static void main(String[] args) throws IOException { BufferedImage bufferedImage = …

    Java 2023年6月5日
    069
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球