ELK+logstash配置日志报警

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" => "(?\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创建监控模板

创建模板


图片.png

创建应用集


图片.png

创建监控项
图片.png

创建触发器


图片.png
{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
图片.png

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:已经触发了报警但是无法发送邮件
没有发送出报警检查已经触发了,问题出现在没执行发送邮件的动作上,这个时候小伙伴就要重点关注下用户的权限以及动作的配置以及触发器的配置上了。
我这边重新修改了配置

图片.png

以及
图片.png

邮件就可以发送成功了
问题3
报警是触发了,可是你要是不手动确认它并不会再次发送邮件,所以收到报警需要小伙伴们手动确认下
图片.png

在触发器中点击 Allow manual close,否则手动点击关闭是关闭不了的啊
图片.png

参考: 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

你可能感兴趣的:(ELK+logstash配置日志报警)