ELK+logstash配置日志报警

需求

通过读取日志文件监控,过滤日志信息的异常关键词,如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

转载链接 :

ELK+logstash配置日志报警 :https://www.jianshu.com/p/2c482a995f67

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值