搭建logstash
1)安装java环境
1 2 |
[root@web01 ~]# yum localinstall -y jdk-8u181-linux-x64.rpm |
2)时间同步
1 |
[root@web01 ~]# ntpdate time1.aliyun.com |
3)安装logstash
1 2 |
[root@web01 ~]# rz [root@web01 ~]# yum localinstall -y logstash-6.6.0.rpm |
4)授权
1 2 3 4 5 6 |
[root@web01 ~]# ll /usr/share/logstash/ [root@web01 ~]# chown -R logstash.logstash /usr/share/logstash/ #启动文件 [root@web01 ~]# ll /usr/share/logstash/bin/logstash -rwxr-xr-x 1 logstash logstash 2354 Jan 24 2019 /usr/share/logstash/bin/logstash |
logstash插件
1 2 |
INPUT:使Logstash能够读取特定的事件源。 OUTPUT:将事件数据发送到特定的目的地,OUTPUT是事件流水线中的最后阶段。 |
INPUT支持事件源 | OUTPUT支持输出源 | CODEC编解码器支持编码 |
---|---|---|
azure_event_hubs(微软云事件中心) | elasticsearch(搜索引擎数据库) | avro(数据序列化) |
beats(filebeat日志收集工具) | email(邮件) | CEF(嵌入式框架) |
elasticsearch(搜索引擎数据库) | file(文件) | es_bulk(ES中的bulk api) |
file(文件) | http(超文本传输协议) | Json(数据序列化、格式化) |
generator(生成器) | kafka(基于java的消息队列) | Json_lines(便于存储结构化) |
heartbeat(高可用软件) | rabbitmq(消息队列 OpenStack) | line(行) |
http_poller(http api) | redis(缓存、消息队列、NoSQL) | multiline(多行匹配) |
jdbc(java连接数据库的驱动) | s3*(存储) | plain(纯文本,事件间无间隔) |
kafka(基于java的消息队列) | stdout(标准输出) | rubydebug(ruby语法格式) |
rabbitmq(消息队列 OpenStack) | tcp(传输控制协议) | |
redis(缓存、消息队列、NoSQL) | udp(用户数据报协议) | |
s3*(存储) | ||
stdin(标准输入) | ||
syslog(系统日志) | ||
tcp(传输控制协议) | ||
udp(用户数据报协议) |
配置环境变量
1 2 |
[root@web01 ~]# vim /etc/profile.d/logstash.sh export PATH=/usr/share/logstash/bin/:$PATH |
logstash配置文件
1 2 |
[root@web01 ~]# vim /etc/logstash/logstash.yml path.config: /etc/logstash/conf.d |
一. logstash收集单个日志到文件
配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
[root@web01 ~]# cd /etc/logstash/conf.d/ [root@web01 /etc/logstash/conf.d]# vim message_file.conf input { file { path => "/var/log/messages" start_position => "beginning" } } output { file { path => "/tmp/messages_%{+YYYY-MM-dd}" } } [root@web01 /etc/logstash/conf.d]# vim message_file.conf #输入插件 input { #文件模块 file { #日志类型 type => "message-log" #日志路径 path => "/var/log/messages" #第一次收集日志从头开始 start_position => "beginning" } } #输出插件 output { #文件模块 file { #输出路径 path => "/tmp/message_%{+yyyy.MM.dd}.log" } } |
启动
1 2 3 4 5 |
#检测语法 [root@web01 ~]# logstash -f /etc/logstash/conf.d/message_file.conf -t #启动 [root@web01 ~]# logstash -f /etc/logstash/conf.d/message_file.conf & |
测试日志收集
1 2 3 4 5 |
#实时监控收集到的日志 [root@web01 ~]# tail -f /tmp/messages_2020-12-04 #手动添加一台日志 [root@web01 ~]# echo 111 >> /var/log/messages |
二. logstash收集单个日志到ES
配置
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[root@web01 ~]# vim /etc/logstash/conf.d/message_es.conf input { file { path => "/var/log/messages" start_position => "beginning" } } output { elasticsearch { hosts => ["10.0.0.71:9200"] index => "message_%{+YYYY-MM-dd}" } } |
启动
1 2 |
[root@web01 ~]# logstash -f /etc/logstash/conf.d/message_es.conf & [2] 82713 |
三. logstash启动多实例
配置收集/var/log/secure日志
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[root@web01 ~]# vim /etc/logstash/conf.d/secure_es.conf input { file { path => "/var/log/secure" start_position => "beginning" } } output { elasticsearch { hosts => ["10.0.0.71:9200"] index => "secure_%{+YYYY-MM-dd}" } } |
启动多实例
1 2 3 4 5 6 7 8 9 10 |
logstash只启动一个不需要数据目录,如果想要启动多个进程,需要每个进程指定不同的数据目录,需要加 --path.data参数,然后可以启动多实例 1.创建数据目录 [root@web01 ~]# mkdir /data/logstash/messages_es -p [root@web01 ~]# mkdir /data/logstash/secure_es -p [root@web01 ~]# chown -R logstash.logstash /data/logstash/ 2.分别指定数据目录再启动两个进程 [root@web01 ~]# logstash -f /etc/logstash/conf.d/message_es.conf --path.data=/data/logstash/messages_es & [root@web01 ~]# logstash -f /etc/logstash/conf.d/secure_es.conf --path.data=/data/logstash/secure_es & |
四. logstash收集多个日志到文件
配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
[root@web01 ~]# vim /etc/logstash/conf.d/morefile_file.conf #输入的插件 input { #文件模块 file { #收集文件的路径 path => "/var/log/messages" #第一次收集从头收集 start_position => "beginning" #收集日志间隔时间3秒 stat_interval => "3" } #第二个文件模块 file { #第二个收集日志的路径 path => "/var/log/secure" } } #输出插件 output { #输出时的文件模块 file { #输出的文件路径 path => "/tmp/morefile.txt" } } |
启动
1 |
[root@web01 ~]# logstash -f /etc/logstash/conf.d/morefile_file.conf & |
验证
1 2 3 4 5 |
[root@web01 ~]# tail -f /tmp/morefile.txt #手动添加文件 [root@web01 ~]# echo 111 >> /var/log/messages [root@web01 ~]# echo 2222 >> /var/log/secure |
五. logstash收集多个日志到ES
配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[root@web01 ~]# vim /etc/logstash/conf.d/morefile_es.conf input { file { path => "/var/log/messages" } file { path => "/var/log/secure" } } output { elasticsearch { hosts => ["10.0.0.71:9200"] index => "morefile_%{+YYYY-MM-dd}" } } |
启动
1 |
[root@web01 ~]# logstash -f /etc/logstash/conf.d/morefile_es.conf & |
六. 收集多个日志到多个索引
1)方法一:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#配置 [root@web01 ~]# cat /etc/logstash/conf.d/morefile_es.conf input { file { type => "messages_log" path => "/var/log/messages" } file { type => "secure_log" path => "/var/log/secure" } } output { if [type] == "messages_log" { elasticsearch { hosts => ["10.0.0.71:9200"] index => "messages_log_%{+YYYY-MM-dd}" } } if [type] == "secure_log" { elasticsearch { hosts => ["10.0.0.71:9200"] index => "secure_log_%{+YYYY-MM-dd}" } } } #启动 [root@web01 ~]# logstash -f /etc/logstash/conf.d/morefile_es.conf |
2)方法二:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#配置 [root@web01 ~]# cat /etc/logstash/conf.d/second_morefile_es.conf input { file { type => "messages_log" path => "/var/log/messages" } file { type => "secure_log" path => "/var/log/secure" } } output { elasticsearch { hosts => ["10.0.0.71:9200"] index => "%{type}_%{+YYYY-MM-dd}" } } #启动 [root@web01 ~]# logstash -f /etc/logstash/conf.d/second_morefile_es.conf |