一、logstash介绍
Logstash是一个开源的数据收集引擎,可以水平伸缩,而且logstash是整个ELK当中拥有最多插件的一个组件,其可以接收来自不同源的数据并统一输入到指定的且可以是不同目的地。
logstash收集日志基本流程: input-->codec-->filter-->codec-->output
1.input:从哪里收集日志。
2.filter:发出去前进行过滤
3.output:输出至Elasticsearch或Redis消息队列
4.codec:输出至前台,方便边实践边测试
5.数据量不大日志按照月来进行收集
官方文档:https://www.elastic.co/guide/en/logstash/current/index.html
二、logstash的安装
2.1、安装logstash
root@linux-node1 ~]# wget https://artifacts.elastic.co/downloads/logstash/logstash-6.0.0.rpm [root@linux-node1 ~]# yum install -y logstash-6.0.0.rpm #依赖java安装 [root@linux-node1 ~]# rpm -ql logstash #查看yum安装路径 #node2节点安装logstash [root@linux-node2 ~]# yum install -y logstash-6.0.0.rpm [root@linux-node1 ~]# ll /etc/logstash/conf.d/ #logstash的主配置目录 总用量 0
三.LogStash使用
3.1 标准输入、标准输出插件
[root@saltstack02 ~]# /usr/share/logstash/bin/logstash -e 'input { stdin {} } output { stdout{} }'
3.2 标准输入、标准输出插件,输出显示json格式
[root@saltstack02 ~]# /usr/share/logstash/bin/logstash -e 'input { stdin{} } output { stdout{ codec =rubydebug } }'
3.3 标准输入、输出测试输出到文件
[root@saltstack02 ~]# /usr/share/logstash/bin/logstash -e 'input { stdin {} } output { file { path => "/tmp/test-%{YYY.MM.dd}.log"} }'
3.4 测试输出到elasticsearch
[root@saltstack02 ~]# /usr/share/logstash/bin/logstash -e 'input { stdin {} } output { elasticsearch { hosts => ["10.0.0.22:9200"] index => "logstash-test-%{+YYYY.MM.dd}" } }'
[root@saltstack02 ~]# ll /data/elkdata/nodes/0/indices/ total 0 drwxr-xr-x 8 elasticsearch elasticsearch 65 Jun 20 17:30 qdsZPfY9R5ay9BImUDeRvw
四.logstash配置文件使用
通过yum安装默认路径/etc/logstash/conf.d,配置文件存放路径
4.1 编写demo.conf文件,通过配置文件实现标准输入、两个输出:标准输出插件和elasticsearch插件
vim /etc/logstash/conf.d/demo.conf input{ stdin{} } filter{ } output{ elasticsearch { hosts => ["10.0.0.22:9200"] index => "logstash-%{+YYYY.MM.dd}" } stdout{ codec => rubydebug } }
备注:配置文件中#表示注释。
启动配置文件
[root@saltstack02 ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/demo.conf
4.2 使用logstash配置文件收集messages日志
[root@linux-node1 ~]# vim /etc/logstash/conf.d/system.conf input { file { path => "/var/log/messages" #日志路径 type => "systemlog" #类型 start_position => "beginning" #logstash 从什么位置开始读取文件数据,默认是结束位置,也就是说 logstash 进程会以类似 tail -F 的形式运行。如果你是要导入原有数据,把这个设定改成"beginning",logstash 进程就从头开始读取,类似 less +F 的形式运行。 stat_interval => "2" #logstash 每隔多久检查一次被监听文件状态(是否有更新) ,默认是 1 秒。 } } output { elasticsearch { hosts => ["10.0.0.22:9200"] #指定hosts index => "logstash-systemlog-%{+YYYY.MM.dd}" #索引名称 } } [root@saltstack02 ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/system.conf -t #检测配置文件是否有语法错误 WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. Continuing using the defaults Could not find log4j2 configuration at path /usr/share/logstash/config/log4j2.properties. Using default config which logs errors to the console Configuration OK
修改日志的权限,防止报错
[root@linux-node1 ~]# ll /var/log/messages -rw-------. 1 root root 791209 12月 27 11:43 /var/log/messages #这里可以看到该日志文件是600权限,而elasticsearch是运行在elasticsearch用户下,这样elasticsearch是无法收集日志的。所以这里需要更改日志的权限,否则会报权限拒绝的错误。在日志中查看/var/log/logstash/logstash-plain.log 是否有错误。 [root@linux-node1 ~]# chmod 644 /var/log/messages [root@linux-node1 ~]# systemctl restart logstash
执行
[root@saltstack02 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/system.conf