说明:Logstash单独运行,收集日志会比较的重,因此,在生产环境中会安装filebeat,收集日志并上报给logstash,进行转换解析
1、安装JDK
运行在java环境之下,如果是额外的主机的话,需要重新配置,详细见上篇,本次部署是在同一台主机之上,因此不需要额外的部署
2、Logstash安装
测试
#安装测试
logstash -e 'input { stdin { } } output { stdout {} }'
在生产环境中主要是通过配置相关的文件来进行启动
#在配置文件中要指定Elasticsearch所在的主机
/logstash-5.3.0/bin/logstash -f /logstash-5.3.0/config/配置文件
Logstash处理日志的流程:
主要是通过input插件来完成,从而实时的接受filebeat发过来的日志,接收过来之后可以直接通过output插件进行输出,最基础的input,output插件的编写如下:
input { stdin { } }
output {
elasticsearch { hosts => ["192.168.32.128:9200"] }
stdout { codec => rubydebug }
}
3、Logstash的结构介绍
logstash支持把配置写入到文件xxx.conf,然后通过读取配置文件来采集数据信息,也就是上面的启动以conf结尾的配置文件
1)logstash字段的封装
logstash会将数据封装进message字段中,其中默认会添加@timestamp时间字段,host主机字段和type字段,当然,用户也可以根据相应的需求在message中添加不同的字段,从而能够展示不同的字段。
2)logstash的结构
logstash主要是由input、filter和output三个组件去完成采集数据的
input:
主要是对filebeat上报的数据进行读取
filter:
主要负责过滤解析input读取的数据,可以用grok插件来正则解析数据,date插件来解析日期,mutate插件来修改、替换、删除及重命名字段中的某些插件。
#grok插件主要是通过系统预定义的正则表达式或者通过自己定义的正则表达式来匹配日志中的各个值
grok {
#用来对字段的模式进行匹配,一个message表示对一条日志根据字段进行不同的切割分析
match => { "message" => "正则匹配的字段" }
}
#date插件
date {
#yyyy:年份 MM:月份 dd:日期 HH:时 mm:分 ss:秒 SSS:毫秒
match => [ "time", "yyyy-MM-dd$HH:mm:ss.SSS" ]
}
插件参考链接:https://www.2cto.com/kf/201610/560348.html
https://blog.csdn.net/dayi_123/article/details/79806922
output:
将filter处理过的数据进行输出。可以用elasticsearch插件输出到es,rediss插件输出到redis,stdout插件标准输出,kafka插件输出到kafka等等。
#以elasticsearch插件为例
output{
elasticsearch {
#es地址,有多个节点配置多个节点
hosts => ["192.168.32.128:9200"]
#要导入的es索引
index => "索引名-%{+YYYY.MM.dd}"
}
}
问题:
1、打印出字段全部为null
思考方向:查看filebeat打出来的日志如何,看日志格式,一一比对。如果没错,就去看logstash和filebeat的日志,因为在配置的时候配置的日志模式为debug
2、打印出来有些字段显示不出来
只出现了一部分
应开发要求,需要在grok中添加字段,即匹配正则的字段,因此最好是根据打印出来的日志信息进行匹配,谨记,一定要与日志匹配的格式相同。
在测试的过程中最好将message和source在remove中去掉,方便了解到相关信息
mutate {
remove_field => ["input_type","count","message","tags","@version","beat","fields","offset","source","timestamp"]
# remove_field => ["input_type","count","tags","@version","beat","fields","offset","timestamp"]
}
出现问题思考方向:
一般是根据kibana展示的日志来看每日反馈的日志是否正常,出现问题时,查看今天的最新日志是否正常,尤其是要看打印出来的字段是否完善,其次,看logstash和filebeat的日志是否正常,然后看是否更改了什么配置,根据配置来进行判断,尤其是logstash的配置文件,grok字段里面是否与打印的格式相符。
output:
将filter处理过的数据进行输出。可以用elasticsearch插件输出到es,rediss插件输出到redis,stdout插件标准输出,kafka插件输出到kafka等等。
#以elasticsearch插件为例
output{
elasticsearch {
#es地址,有多个节点配置多个节点
hosts => ["192.168.32.128:9200"]
#要导入的es索引
index => "索引名-%{+YYYY.MM.dd}"
}
}
关于logstash的监控脚本
#!/bin/bash
source /etc/profile
dir="/usr/local/logstash-5.3.0"
if ! pgrep -f "Djruby.home=${dir}/vendor/jruby"; then
echo "start logstash"
nohup ${dir}/bin/logstash -f ${dir}/config/java_error.conf &
fi