开源日志分析系统建设(三) – 作者:gncao

一、logstash介绍

Logstash 是开源的服务器端数据处理管道,能够同时 从多个来源采集数据、转换数据,然后将数据发送到您最喜欢的 “存储库” 中。

二、安装

1、首先要安装jdk

2、多种安装方式

1)可以使用apt或者yum在线安装logstash;

 yum -y install logstash

 apt-get install logstash

2)也可以下载安装包离线安装,以在Ubuntu环境下安装为例

dpkg -i logstash.deb

三、运行测试

logstash工作流程图如下:

image.png

logstash主要有两大组件,input和output,还有一个可选组件filter。

input组件的作用是从数据源采集数据;

filter组件的作用是修订/格式化处理选择的数据;

output组件的作用是输出数据到其他软件。

3.1,测试安装是否正常运行

切换到logstash目录,执行如下命令测试:

root@ubuntu:/etc/logstash# /usr/share/logstash/bin/logstash -e ‘input{stdin{}}output{stdout{}}’

执行完上述命令后,系统会等待输入,当输入hello world的时候,系统会给出如下反应:

[INFO ] 2018-07-24 00:18:14.045 [Converge PipelineAction::Create<main>] pipeline – Pipeline started successfully {:pipeline_id=>”main”, :thread=>”#<Thread:0x880541 run>”}

The stdin plugin is now waiting for input:

[INFO ] 2018-07-24 00:18:14.228 [Ruby-0-Thread-1: /usr/share/logstash/lib/bootstrap/environment.rb:6] agent – Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}

{

    “@timestamp” => 2018-07-24T07:18:14.165Z,

       “message” => “hello world”,

          “host” => “ubuntu”,

      “@version” => “1”

}

如果出现上述情况,那表明logstash正常运行。使用ctrl+D命令可以终止上述任务。

-e表示通过命令行实现ogstash配置

3.2,解析log日志

解析从filebeat传输过来的log日志,这里我们采用的是官网提供的log样本。

1)首先下载log样本

下载地址:https://download.elastic.co/demos/logstash/gettingstarted/logstash-tutorial.log.gz

2)安装配置filebeat

安装完filebeat后,修改filebeat.yml文件,并指定数据源为我们下载的log样本。配置文件如下:

filebeat.prospectors:

– type: log

  paths:

    – /path/to/file/logstash-tutorial-dataset 

output.logstash:

  hosts: [“192.168.18.130:9200”]

配置完毕后加载运行filebeat。

Filebeat -e -c filebeat.yml -d “publish”

3)配置logstash文件

配置并运行filebeat后,filebeat就会等待logstash的上线运行,此时我们需要新建logstash配置文件用来匹配filebeat并输出。完整的配置文件如下:

root@ubuntu:/etc/logstash# more first-pipeline.conf 

input{

        beats{

                port => “9200”

        }

}

filter{

}

output{

        stdout{codec => rubydebug}

}

通过下面命令判断配置文件是否是正确的。

usr/share/logstash/bin/logstash -f first-pipeline.conf –config.test_and_exit

如果是正确的,则会获得如下输出:

Configuration OK

[INFO ] 2018-07-24 00:49:15.885 [LogStash::Runner] runner – Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash

然后就可以运行logstash了,命令如下:

usr/share/logstash/bin/logstash -f first-pipeline.conf –config.reload.automatic

后面表示会动态加载first-pipeline.conf文件而不用每次重启logstash

4)使用grok插件匹配log日志

在filter组件位置配置grok语句可以将未结构化的记录结构化,形成可读性更强的日志记录。

例如,下面是从log样本里面摘取的一条记录:

83.149.9.216 – – [04/Jan/2015:05:13:42 +0000] “GET /presentations/logstash-monitorama-2013/images/kibana-search.png HTTP/1.1” 200 203023 “http://semicomplete.com/presentations/logstash-monitorama-2013/” “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36”

这条记录是apache的access日志,下面我们使用grok语句格式化该记录。完整的first-pipeline.conf文件如下:

root@ubuntu:/etc/logstash# more first-pipeline.conf 

input{

        beats{

                port => “5044”

        }

}

filter{

        grok{

                match => {“message” => “%{COMBINEDAPACHELOG}”}

        }

        geoip{

                source => “clientip”

        }

}

output{

        elasticsearch {

                hosts => [“192.168.18.130:9200”]

        }

这里,我们不仅格式化了apache日志记录,还配置geoip插件获取远端IP地址,最终将结果输出到elasticsearch中。

5)查看结果

因为在第一次的配置过程中,filebeat已经将日志文件发送到终端中,所以我们需要在filebeat客户端使用如下命令,清除历史传送日志,然后再次开启filebeat传送命令,保证logstash能够接收到filebeat端的日志并传送给elasticsearch。

删除传送记录:rm -rf /var/lib/filebeat/registry (如果找不到该文件则使用find命令查找该文件)

启动filebeat:filebeat -e -c filebeat.yml -d “publish”

因为我们之前已经配置好了elasticsearch和kibana之间的联调,所以我们可以直接到kibana上查看格式化之后的结果:

image.png注:需要先在kibana的管理页面建立索引,然后再在发现页面查看我们传送过来的日志信息。

6)备注

当发现格式化之后的日志记录跟之前无差别,怀疑可能是grok语句错误的时候,可以使用grok debugger来判断语句格式是否正确。 grok debugger在kibana的dev tools中。

对于传送完毕的日志记录,我们可以在可视化页面配置我们需要的图形信息。

四、总结

logstash基础配置就如上所示,logstash在ELK体系中是比较重要的一个环节,用户可以自定义开发插件以便实现所需的功能。后续会有文章介绍如何自定义开发logstash插件,敬请期待。

来源:freebuf.com 2018-07-26 10:06:20 by: gncao

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论