Logstash7.0日志收集器简介及部署

释放双眼,带上耳机,听听看~!

以下内容来自logstash官方文档:https://www.elastic.co/guide/en/logstash/7.0/index.html

Logstash介绍

Logstash是一个具有实时管道功能的开源数据收集引擎。Logstash可以动态地将来自不同的数据源的数据统一起来,并将数据标准化到你所选择的目的地(存储库)中。为各种高级下游分析和可视化用例清理和民主化所有数据。

Logstash工作原理

Logstash事件处理管道有三个阶段:输入——>过滤器——>输出。
输入:在logstash配置文件中指定日志路径让logstash去读取日志内容然后输入到logstash当中。输入中支持编码以及解码器。
过滤器:在logstash配置文件中指定过滤日志的格式以及配置来获取到我们想要的日志内容,被过滤掉的日志不会被输出到相应的存储中
输出:过滤后的日志,再次经过输出给我们指定的应用。输出中同样也支持编码解码器
编解码器:编解码器可以在数据进入或退出管道时对数据进行编码或解码,而无需使用单独的过滤器。

输入

数据往往会有很多方式以及分散存储在很多系统中,Logstash可以支持多种输入内容,如我们的系统日志、Web应用日志、企业内部开发的程序生成的日志,以及日志指标等等,对于logstash来说都不在话下。
Logstash输入插件一些常用插件包括以下几点:

  • File:从文件系统上的文件读取,如应用程序日志Nginx、Apache、Tomcat以及代码输出的日志等。
  • syslog:可以捕捉系统日志、message、syslog以及网络日志和防火墙日志等。
  • Redis:使用redis通道和redis列表从redis服务器依次读取,在数据量级大的情况下,不会造成logstash阻塞。
  • Beats:logstast也可以处理从beat发送过来的数据文件。

关于logstash的更多输入插件请看官网:https://www.elastic.co/guide/en/logstash/7.0/input-plugins.html

过滤器

数据源从输入进logstash到输出过程中,可以使用logstash提供的过滤器功能,来过滤我们想要的日志内容,排除大量的无用日志,以及将过滤后的日志内容转换为通用的格式,已方便我们轻松的、更加快速的展示及分析。
Logstash过滤器一些常用插件包括以下几点:

  • grok:基于正则表达式提供了丰富的可复用的模式;通过grok正则表达式来匹配我们想要的日志内容,通过grok可以将logstash中的非结构化日志数据转换为结构化日志数据以及可查询的最佳方式。
  • geoip:在日志中添加有管IP地址地理位置的信息。
  • mutate:对过滤后的日志数据进行增加、修改、删除、替换等操作。
  • drop:完全删除事件,例如调试debug事件。
  • clone:克隆,复制文件的副本,可能添加或删除字段。
  • Data:将字符串类型的时间字段转换为时间戳类型,方便后续数据处理。

关于logstash的更多过滤插件请看官网:https://www.elastic.co/guide/en/logstash/7.0/filter-plugins.html

输出

Logstash可以输出到很多文件系统中去,在这里不在一一讲解,但是logstash也是Elastic Stack核心的一份子,同属于elasticsearch一家公司,首先elasticsearch肯定是我们首选的输出方向,将日志输出到elasticsearch中,能够为我们的搜索以及日志分析带来更多的功能。
logstash一些常用的输出插件包括以下几点:

  • elasticsearch:将事件数据发送到elasticsearch,使用elasticserch的优点是高效、便于查询、分析以及绘图。
  • file:将事件数据写入到磁盘上的文件。
  • graphite:将数据发送到graphite,这是一种用于存储和绘制指标的流行开源工具。http://graphite.readthedocs.io/en/latest/
  • statsd:将事件数据发送到statsd,这是一种“侦听统计信息,如计数器和定时器,通过UDP发送并将聚合发送到一个或多个可插入后端服务”的服务。
  • redis:我们也可以将过滤后的内容再次通过redis来产生队列,再由redis发送给elasticsearch,这样在数据量级较大的情况下不会对es集群造成很大的压力。

关于logstash的更多输入插件请看官网:https://www.elastic.co/guide/en/logstash/7.0/output-plugins.html

编解码器

编解码器基本上是流过滤器,可以作为输入或输出的一部分。使用编解码器可以轻松地将消息传输与序列化过程分开。流行的编解码器包括json,, msgpack和plain (文本)。
json:以json格式编码或解码数据。
multiline:将多行文本事件(如java异常和堆栈跟踪消息)合并到一个事件中
logstash关于编解码器的更多信息请看官网:https://www.elastic.co/guide/en/logstash/7.0/codec-plugins.html

执行模型

Logstash管道中的每个输入阶段都在自己的线程中运行,默认会将输入事件写入内存上的中央队列。每个管道工作线程从内存的中央队列中获取出一批事件,然后我们配置好的过滤器开始过滤输入内容,内容过滤之后,通过输出插件将过滤后的数据进行输出到我们指定的地方。
用批处理的大小和管道的工作线程数量是可以配置或者修改的,详情请看:https://www.elastic.co/guide/en/logstash/7.0/tuning-logstash.html
默认情况下,logstash在管道阶段之间使用内存中有界队列来缓存事件,如果logstash没有安全的被停止,则存储在内容中国呢的所有事件都将丢失,为了不让事件丢失,我们可以将logstash在内存中进行的时间持久化到磁盘,有关持久化到磁盘,详情请看:https://www.elastic.co/guide/en/logstash/7.0/persistent-queues.html

Logstash部署

Logstash需要Java 8或Java 11.使用 官方Oracle发行版或OpenJDK等开源发行版。
logstash下载:
百度云:https://pan.baidu.com/s/1dfK2-ozXBZxajlSMX4XUHA
官网:https://artifacts.elastic.co/downloads/logstash/logstash-7.0.0.tar.gz

Logstash安装
java环境请自行配置

java -version
java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)
tar xf logstash-7.0.0.tar.gz  -C /usr/local/
useradd -d /home/logstash logstash
echo '3edc#EDC' | passwd --stdin logstash
Changing password for user logstash.
passwd: all authentication tokens updated successfully.

chown -Rf logstash /usr/local/logstash-7.0.0

Logstash目录介绍

ll /usr/local/logstash-7.0.0/
total 848
drwxr-xr-x 2 logstash root   4096 May 22 15:38 bin             #二进制启动脚本目录
drwxr-xr-x 2 logstash root    142 May 23 16:21 config          #logstash配置文件目录,包括logstash.yml,jvm.options等
-rw-r--r-- 1 logstash root   2276 Apr  6 07:54 CONTRIBUTORS
drwxr-xr-x 4 logstash root     69 May 22 16:12 data            #logstash及其插件用于任何持久性需求的数据文件
-rw-r--r-- 1 logstash root   4090 Apr  6 07:55 Gemfile
-rw-r--r-- 1 logstash root  21642 Apr  6 07:56 Gemfile.lock
drwxr-xr-x 6 logstash root     84 May 22 15:38 lib
-rw-r--r-- 1 logstash root  13675 Apr  6 07:54 LICENSE.txt
drwxr-xr-x 2 root     root    108 May 23 14:20 logs            #logstash日志文件目录
drwxr-xr-x 4 logstash root     90 May 22 15:39 logstash-core
drwxr-xr-x 3 logstash root     86 May 22 15:39 logstash-core-plugin-api
drwxr-xr-x 4 logstash root     55 May 22 15:38 modules
-rw-r--r-- 1 logstash root 808305 Apr  6 07:54 NOTICE.TXT
drwxr-xr-x 3 logstash root     30 May 22 15:39 tools
drwxr-xr-x 4 logstash root     33 May 22 15:39 vendor
drwxr-xr-x 9 logstash root    193 May 22 15:39 x-pack

Logstash配置文件介绍
Logstash有两种类型的配置文件:
1)管道配置文件:用来定义logstash处理管道的方式,管道配置文件即是来定义input filter output的配置的文件,管道配置文件需要我们去创建,配置里来定义要使用什么输入插件、输出插件及过滤插件等。
2)设置文件:用于控制logstash启动和执行的选项,设置文件即为下面展开的文件。

管道配置文件:

ls /usr/local/logstash-7.0.0/config/ -l
total 36
-rw-r--r-- 1 logstash root 1829 Apr  6 07:54 jvm.options             #包含JVM配置标志,使用此文件来设置堆内存大小等
-rw-r--r-- 1 logstash root 4987 Apr  6 07:54 log4j2.properties       #包含log4j2库的默认设置,有关详细信息:https://www.elastic.co/guide/en/logstash/7.0/logging.html#log4j2
-rw-r--r-- 1 logstash root  342 Apr  6 07:54 logstash-sample.conf    #logstash默认提供的一个管道配置文件
-rw-r--r-- 1 logstash root 8204 Apr  6 07:54 logstash.yml            #Logstash的主配置文件
-rw-r--r-- 1 logstash root 3146 Apr  6 07:54 pipelines.yml           #包含在单个logstash实例中运行多个管道的框架和说明,有关详细信息,请看官网:https://www.elastic.co/guide/en/logstash/7.0/multiple-pipelines.html
-rw-r--r-- 1 logstash root 1696 Apr  6 07:54 startup.options

Logstash常用启动选项:

/usr/local/logstash-7.0.0/bin/logstash --help
    -n:使用-n来指定这个logstash实例的名称,如果没有给出值它将默认为当前主机名
    -f:指定配置文件来让logstash加载,如果指定的是目录,那么logstash将加载此目录内的所有配置文件,此指定的配置文件为输入输出及过滤策略的配置。
    -e:使用-e选项指定字符串来指定配置,通过在命令行中指定配置,此配置与管道配置语法相同。
    --modules:指定logstash模块,可以同时指定多个模块,语法:--modules=module1 module2
    --setup:将索引模板加载到Elasticsearch中,并保存搜索;将索引模式、可视化和指示板转换成Kibana的运行模块,此值默认为false。
    --pipeline:用来指定设置管道的ID,语法:--pipeline.id ID
    -w:设置要运行的管道进程数量,默认为主机cpu核心数
    --java-execution:使用Java执行引擎
    -b, --pipeline.batch.size SIZE:管道要使用的批处理大小。
    --path.data:指定logstash的数据目录,插件也需要访问此路径,此目录需要为一个可写目录,默认数据目录在logstash加目录下的data下
    -p:指定插件路径
    -l:指定logstash应用程序的日志路径,默认为logstash家目录下的logs目录下
    --log.level:设置logstash的日志级别,默认为info级别,可设置级别为:
                                    - fatal
                                    - error
                                    - warn
                                    - info
                                    - debug
                                    - trace
    
    -V:显示logstash的版本信息
    -t:-t选项像nginx一样来检查配置十分正确
    --http.host:指定Web API绑定的主机,默认为127.0.0.1
    --http.port:指定Web API绑定的端口,默认为9600、9700 
    --verbose:将logstash日志级别设置为info
    --debug:将logstash日志级别设置为debug
    --quiet:将logstash日志级别设置为info

Logstash测试安装
Logstash安装完成后,官网给出了一个测试安装的命令为最基本的logstash管道配置
logstash有两个必要配置项,INPUTS和OUTPUTS(输入和输出),还有一个可选配置项FILTERS(过滤器),输入插件来输入源数据,如果配置了过滤器插件,那么将进行过滤,否则反之,输出插件进行把数据输出给ES。

测试命令如下:

/usr/local/logstash-7.0.0/bin/logstash -e 'input { stdin {} } output { stdout {} }'
#使用-e选项指定字符串来指定配置,通过在命令行中指定配置,示例中的管道从标准输入获取输入stdin,并stdout以结构化格式将该输入移动到标准输出

官方提示:启动Logstash后,等待logstash打印日志,当看到“Pipeline main started”,然后在命令提示符中输入hello world,可我好像没看到输出官网指定的字段。

Sending Logstash logs to /usr/local/logstash-7.0.0/logs which is now configured via log4j2.properties
[2019-05-22T17:23:39,125][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
[2019-05-22T17:23:39,144][INFO ][logstash.runner          ] Starting Logstash {"logstash.version"=>"7.0.0"}
[2019-05-22T17:23:47,759][INFO ][logstash.javapipeline    ] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>8, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50, "pipeline.max_inflight"=>1000, :thread=>"#<Thread:0x4982a08 run>"}
[2019-05-22T17:23:47,879][INFO ][logstash.javapipeline    ] Pipeline started {"pipeline.id"=>"main"}
The stdin plugin is now waiting for input:
[2019-05-22T17:23:47,975][INFO ][logstash.agent           ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2019-05-22T17:23:48,412][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}
hello world                 #当启动暂停后,在此输入hello world,这是一个测试logstash的一条信息而已,输入的信息会被logstash打印为一条json格式的文本
/usr/local/logstash-7.0.0/vendor/bundle/jruby/2.5.0/gems/awesome_print-1.7.0/lib/awesome_print/formatters/base_formatter.rb:31: warning: constant ::Fixnum is deprecated
{
    "@timestamp" => 2019-05-22T09:27:03.046Z,
       "message" => "hello world",
      "@version" => "1",
          "host" => "sx-sj-movie-yqwd-5.novalocal"
}
test logstash.log           #接着,我再次输入了test logstast.log进行测试
{
    "@timestamp" => 2019-05-22T09:27:38.140Z,
       "message" => "test logstash.log",
      "@version" => "1",
          "host" => "sx-sj-movie-yqwd-5.novalocal"
}

人已赞赏
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索