Logstash是一个开源的,服务端的数据处理管道,用来同时地从大量的数据源收集数据,转换数据,然后将数据发送到你最喜欢的存储地方,我们通常选择Elasticsearch。
一、Logstash安装步骤
1、在ELK官网www.elastic.co下载Logstash 6.3,其他版本安装方式基本一致。Logstash比较重量级的原因是它也需要依赖JAVA环境,所以依然要提前配置JDK。如果是使用的ES7版本,那么已经内置了OpenJDK可以用,只需要配置好JAVA环境变量即可
1 |
tar zxf logstash-6.3.tar.gz |
2 |
mv logstash-6.3 /usr/local/ |
3 |
ln -s logstash-6.3.logstash |
二、如何启动Logstash
Logstash有2个配置文件,一个是config/logstash.yml,该配置文件可以修改启动进程数、日志信息、持久化、持久化队列设置等;另一个是jvm.options,这个和Elasticsearch是一样的,主要是优化内存。2个配置文件不做任何修改也是可以启动Logstash的,启动脚本放在bin目录中,下面先使用命令行模式启动(需要注意的是不能用root用户来运行):
1 |
bin/logstash -e 'input{ stdin{} } output{ stdout{} }' #-e代表使用命令行模式,采用标准输入,标准输出 |
2 |
Settings: Default pipeline workers: 1 |
4 |
hello world #这里手动输入的hello world,作为标准输入 |
5 |
2016-05-19T01:59:03.797Z 0.0.0.0 hello world #标准输出的结果显示在屏幕 |
7 |
2016-05-19T02:00:20.013Z 0.0.0.0 nihao |
还可以使用codec风格指定输出格式(codec是一种解码编码的工具)
1 |
./logstash -e 'input{ stdin{} } output{ stdout{codec => rubydebug} }' # -e选项是直接用命令行模式,输入采用标准输入,输出采用的codec风格 |
2 |
Settings: Default pipeline workers: 1 |
6 |
"message" => "hello world", #输入的内容 |
7 |
"@version" => "1", #版本号 |
8 |
"@timestamp" => "2016-05-19T02:09:43.921Z", #自动生成时间戳 |
9 |
"host" => "0.0.0.0" #数据是由哪个节点发过来的 |
三、自定义Logstash配置
在生产环境中需要用到的规则非常复杂,需要自定义规则文件然后让Logstash根据规则进行工作。自定义配置文件时,主要配置的内容包括input(用于指定输入源,包含本地日志、redis、stdin标准输入等多种方式)、filter(进行规则过滤和处理,重头戏)、output(指定输出目标)。下面是一个配置示例:
启动服务时加上-t选项可以检查配置文件是否正确,-f选项就是配置文件的路径
1 |
nohup logstash -t -f /etc/logstash.conf & |
启动成功后会看到Pipeline main started这样的信息出来,这个时候我们就可以输入信息给Logstash了,我们输入的信息会通过标准输出显示到屏幕上,如图:
四、自定义Logstash输入与输出数据源
在Logstash中输入的数据可以通过很多种方式获取,比如本地日志文件、filebeat、数据库等。而输出也可以指定到需要的容器中,如Elasticsearch。
1、使用file插件将本地文件作为Logstash输入。下面是一个使用file插件的简单案例,由于output依然是标准输出,所以会有疯狂刷屏的情况出现:
04 |
path => [ "/var/log/message","/var/log/*.log" ] #文件路径 |
05 |
exclude => "/var/log/*.gz" #排除不需要监听的文件 |
06 |
type => "system" #自定义事件的类型,可用于后续的条件判断 |
07 |
add_field => {"key" => "test"} #自定义新增字段 |
08 |
start_position => "beginning" #从日志文件头部读取,相反还有end |
file插件使用了一个sincedb文件来记录当前文件读区位置,即使重新启动服务也不会丢失文件的读取位置。默认情况下sincedb文件放在运行Logstash的用户的主目录中,可以用sincedb_path选项自定义存放路径。
2、将Logstash收集到的数据提交给Elasticsearch
这里需要使用一个output插件——elasticsearch。使用方法也很简单,只需要在配置文件里指定插件就可以了,如下:
01 |
[root@server ~]# cat /etc/logstash.conf |
04 |
path=> "/var/log/audit/audit.log" |
06 |
start_position=> "beginning" |
11 |
hosts=> ["192.168.44.129:9200","192.168.44.130:9200"] |
文件设置好了后运行logstash的程序,再到Elasticsearch或者Kibana就可以查看到数据了,如果Logstash的配置文件发生了变化只需要重启Logstash即可,Elasticsearch和Kibana里的数据都会自动更新。因为Logstash不会占用端口,加-w选项可以启动多个线程,提高效率,默认是2,例
1 |
nohup /logstash/bin/logstash -f /etc/logstash.conf -w 4 & |
五、Logstash多实例的配置
1、复制logstash/config目录
2、修改新目录中的logstash.yml以下配置
1 |
node.name: instance2 #实例2的节点名称 |
2 |
path.data: /data/instance2 #实例2的数据路径 |
3 |
path.config: /etc/logstash2.conf #实例2的配置文件 |
3、启动服务即可