1 需求
通过读取日志文件监控,过滤日志信息的异常关键词,如ERR,error,Failed,warning等信息,将这些带有异常关键词的异常日志信息过滤出来,然后输出到zabbix,通过zabbix告警机制实现触发告警,下面环境是filebeat作为采集端,最后由logsatsh拉取日志并过滤,输出到zabbix
2 客户端——tomcat日志格式统一
修改tomcat7 默认catalina .out运行日志格式【logging.properties】
vim /usr/local/tomcat1/conf/logging.properties
1catalina.org.apache.juli.FileHandler.level = FINE
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.
#后面添加两行配置
1catalina.org.apache.juli.FileHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format = %1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS,%1$tL %4$s %3$s %2$s %5$s %6$s%n
——————————
——————————
%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS,%1$tL %1$te %4$s %3$s %2$s %5$s %6$s%n
年 月 日 时 分 秒 毫秒
注意:每个数字代表不同的日志内容,1代表时间,%1$tL是毫秒
修改tomcat8 默认catalina .out运行日志格式【logging.properties】
# vim /usr/local/tomcat/conf/logging.properties
#java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter #将其删除或者注释掉
添加下面两行配置,
1catalina.org.apache.juli.AsyncFileHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format = %1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS,%1$tL %1$te %4$s %3$s %2$s %5$s %6$s%n
修改log4j日志格式
vim log4j.properties 修改为ISO8601
log4j.appender.file.layout.ConversionPattern=%d{ISO8601} %5p %c{1}:%L - %m%n
log4j日志格式参考:https://www.codejava.net/coding/common-conversion-patterns-for-log4js-patternlayout
3 客户端配置-filebeat
filebeat.inputs:
- type: log
enabled: true
paths:
- /data/tomcat/apache-tomcat-8.0.24/logs/catalina.out
fields:
env: 5pao-203 ##注意名称
- drop_fields:
fields: ["beat", "input", "source", "offset", "prospector"]
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
name: 192.168.1.203 ##注意名字
setup.template.settings:
index.number_of_shards: 1
setup.kibana:
output.logstash:
hosts: ["1.1.1.1:5044"]
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~
4 ELK——logstash安装插件
如果我们将logstash收集的日志输出到zabbix告警,就必须要用到logstash-output-zabbix插件,通过这个插件将logstash与zabbix整合,logstash收集到的数据过滤出错误信息的日志输出到zabbix中,最后通过zabbix告警机制触发
cd /elk/logstash-7.4.0/bin
./logstash-plugin install logstah-output-zabbix
5 ELK——logstash配置文件
logstash启动多个配置文件方法
nohup ./bin/logstash -f config/conf.d/ >/dev/null 2>&1 &
filter {
if [fields][env] == "5pao-203" {
##增加zabbix需要的两个字段
mutate {
add_field => [ "[zabbix_key]", "oslogs" ]
add_field => [ "[zabbix_host]", "192.168.1.203" ]
}
##过滤日志,将没有日期的一条日志归到前一条
multiline {
pattern => "^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}"
negate => true
what => "previous"
}
##将message日志中的字符串时间格式转化成@timestamp - logstash
grok {
match => {
"message" => "(?<datetime>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2},\d{3})" }
}
date {
match => ["datetime","yyyy-MM-dd HH:mm:ss,SSS"]
target => "@timestamp"
}
}
}
##输出到zabbix
output{
if [message] =~ /(ERR|error|ERROR|Failed)/ {
zabbix {
zabbix_host => "[zabbix_host]"
zabbix_key => "[zabbix_key]"
zabbix_server_host => "2.2.2.2"
zabbix_server_port => "9900"
zabbix_value => "message"
}
}
}
6 客户端配置-zabbix
注意:客户端机器连接不能使用PSK加密方式
1> 修改agent端
注释配置文件中psk加密部分并重启zabbix
vim /etc/zabbix/zabbix_agentd.conf
#psk encryption
#TLSConnect=psk
#TLSAccept=psk
#TLSPSKFile=/etc/zabbix/zabbix_agentd.d/zabbix_agentd.psk
##unique psk value
#TLSPSKIdentity=PSK VM_23_8_centos1576636711
service zabbix-agent restart
2>修改zabbix界面加密方式
7 zabbix创建监控模板
创建模板
创建应用集
创建监控项
创建触发器
{logstah-output-zabbix:oslogs.strlen()}>0
注意
zabbix注意触发器,监控的类型为日志|文本,不能是数字,否则会报错
我遇到的报错:zabbix 提供错误的项目值类型"数字 (无正负)"给触发器函数"strlen()"
zabbix触发器方法strlen - 支持类型
它支持类型包括:str, text, log
验证zabbix客户端
在tomcat日志中输入error日志,如
echo "Feb 4 11:44:20 izshvqfkb75a89z sshd[8549]: error: Received disconnect from 221.197.133.59: 0: [preauth]">>/data/tomcat/apache-tomcat-8.5.50-crm/logs/catalina.out
8 报错
问题1:无法触发报警(是指zabbix端无法接收到logstash传输的log,界面不会显示)
logstash日志中报错:
cannot process item "oslogs" trap: connection from "10.50.20.3" rejected
zabbix server日志报错
1287:20200204:202522.748 connection of type "unencrypted" is not allowed for host "111.111.112.112"
原因:zabbix添加使用PSK加密方式,注意日志中的"unencrypted",去掉PSK加密
问题2:已经触发了报警但是无法发送邮件
没有发送出报警检查已经触发了,问题出现在没执行发送邮件的动作上,这个时候小伙伴就要重点关注下用户的权限以及动作的配置以及触发器的配置上了。
我这边重新修改了配置
以及
邮件就可以发送成功了
问题3
报警是触发了,可是你要是不手动确认它并不会再次发送邮件,所以收到报警需要小伙伴们手动确认下
在触发器中点击 Allow manual close,否则手动点击关闭是关闭不了的啊
参考: https://www.zabbix.com/documentation/4.0/zh/manual/config/events/manual_close
问题4
这个问题还没有解决,logstash配置文件中[host][name]不被识别,目前只能是填写IP,如果是多个客户端就写多个文件
add_field => [ "[zabbix_host]", "%{[host][name]}" ]
参考:> https://www.cnblogs.com/bixiaoyu/p/9665677.html
https://blog.csdn.net/miss1181248983/article/details/97130206