简介
Logstash是一个接收,处理,转发日志的工具。支持系统日志,webserver日志,错误日志,应用日志,总之包括所有可以抛出来的日志类型。怎么样听起来挺厉害的吧?
在一个典型的使用场景下(ELK):用Elasticsearch作为后台数据的存储,kibana用来前端的报表展示。Logstash在其过程中担任搬运工的角色,它为数据存储,报表查询和日志解析创建了一个功能强大的管道链。Logstash提供了多种多样的 input,filters,codecs和output组件,让使用者轻松实现强大的功能。
依赖条件:JAVA
下载、安装、使用
这款工具是开箱即用的软件,下载地址戳这里,下载自己对应的系统版本即可。
下载后直接解压,就可以了。
通过命令行,进入到logstash/bin目录,执行下面的命令:
./logstash -e ""
出现如下错误:
[sfapp@cmos1 bin]$ ./logstash -e "" LoadError: JRuby ext built for wrong Java version in `com.purbon.jrmonitor.JRMonitorService': java.lang.UnsupportedClassVersionError: com/purbon/jrmonitor/JRMonitorService : Unsupported major.minor version 52.0 require at org/jruby/RubyKernel.java:1040 (root) at /home/sfapp/dev/ES/logstash-5.2.2/vendor/bundle/jruby/1.9/gems/jrmonitor-0.4.2/lib/jrmonitor.rb:4
原因:jdk版本不对,配置成1.8的,vi logstash文件,在最上面增加export JAVA_HOME="/usr/local/services/jdk"
可以看到提示下面信息(这个命令稍后介绍),输入hello world!
可以看到logstash尾我们自动添加了几个字段,时间戳@timestamp,版本@version,输入的类型type,以及主机名host。
再来一下:
logstash -e 'input { stdin { } } output { stdout {} }'
Ok,还挺有意思的吧... 以上例子我们在运行logstash中,定义了一个叫"stdin"的input还有一个"stdout"的output,无论我们输入什么字符,Logstash都会按照某种格式来返回我们输入的字符。这里注意我们在命令行中使用了-e参数,该参数允许Logstash直接通过命令行接受设置。这点尤其快速的帮助我们反复的测试配置是否正确而不用写配置文件。
让我们再试个更有意思的例子。首先我们在命令行下使用CTRL-C命令退出之前运行的Logstash。现在我们重新运行Logstash使用下面的命令:
./logstash -e 'input { stdin { } } output { stdout { codec => rubydebug } }'
以上示例通过重新设置了叫"stdout"的output(添加了"codec"参数),我们就可以改变Logstash的输出表现。类似的我们可以通过在你的配置文件中添加或者修改inputs、outputs、filters,就可以使随意的格式化日志数据成为可能,从而订制更合理的存储格式为查询提供便利。
通过简单的设置Logstash就可以使用Elasticsearch作为它的后端。默认的配置对于Logstash和Elasticsearch已经足够,我们忽略一些额外的选项来设置elasticsearch作为output:
./logstash -e 'input { stdin { } } output { elasticsearch { hosts => localhost } }'
看结果:
再看看ES的logs,如下:
curl 'http://localhost:9200/_search?pretty'
vim /usr/local/elk/logstash/config/logstash-simple.conf input { stdin { } } output { elasticsearch { hosts => ["192.168.1.130:9200"] user => elastic password => changeme } stdout { codec => rubydebug } }