Logstash整合zabbix 过滤Nginx 错误日志并进行报警

通过logstash过滤nginx-error日志,筛选日志中比较严重报错,并进行报警。

由于网络上很多帖子都是要么写了怎么筛选报错,要么就只翻译了logstash-zabbix-output插件的使用说明,并没有一个完整的配置,整个项目做完,整理出来供大家阅读。

【软件版本】

zabbix 版本:2.4.8 
logstash 版本:2.4.0 
JDK 版本: 1.8.0_101

【zabbix配置】 
首先配置zabbix的item,使其能够成功接收logstash发送过来的信息. 
创建Template:“Configuration” -> “Templates” -> “Create template”

这里我对Template的名字叫“Log file check” 
然后创建Application:“Create applicaton”

Application名字还叫“Log file check” 
最后创建item:“Create item”: 
注意四个地方:
Type 一定要选择“Zabbix trapper”,否则无法接收logstash发送的信息; 
Key 一定要写正确,最好不要有空格,需要在logstash中配置; 
Type of information 选择 “Text”,因为我传过来的值是一段报错日志,所以选择文本; 
Allowed hosts:允许传送的主机,一定要设定为logstash所在的主机。

【Logstash配置】

注:logstash的下载及安装不介绍。

安装目录:/opt/logstash/

由于日志量并没有达到上W级,因此针对logstash进行了一些优化,降低了部分性能:

# vim /opt/logstash/bin/logstash 

LS_HEAP_SIZE=500m 
LS_JAVA_OPTS="-server -Xmx200m"

【安装logstash-output-zabbix插件】

/opt/logstash/bin/logstash-plugin install logstash-output-zabbix

logstash 配置文件:

input { 
    file { 
        type => "error-log" # 指定类型,用于以后判断操作 
        path => "/tmp/test.log" # 文件路径 
        start_position => "beginning" # 文件开始位置 
        codec => multiline { # 使用多行匹配方式进行过滤 
            pattern => "^\d{4}" # 以4个数字开头的为第一行, 
            negate => true # 所有不以4个数字开头的,均归于上一行(下面what配置) 
            what => "previous" 
        }
    } 
}

filter {
    grok {    
        match => {         
            message:\s+\n.*Code:(?<Code>\d+).*Message:(?<Message>.+)\n.*File:(?<File>.+)\n.*Line:(?<Line>\s+\d+).*"     # 对于匹配规则,还是要针对自己场景自己写    }       add_tag => [ "zabbix-sender" ]  # 添加一个标签    add_field => [                  # 设定agent主机的主机名和key的映射        "zabbix_host", "web01",     # 主机名        "zabbix_key", "logstash"    # 添加item时,设定的key名称    ]}    if "_grokparsefailure" in [tags] {          # 如果过滤报错,那么移除报错标签,不进行其他处理        mutate {            remove_tag => "_grokparsefailure"        }    }
}
output { # 输出配置 
    stdout { # 测试时可以开启终端输出 
        codec => rubydebug 
        #codec => json # 可以选择json格式的输出还是rubydebug格式的输出 
    } 
    zabbix { # 发送给zabbix的配置 
        zabbix_host => "zabbix_host" # zabbix_host指上面映射的主机,不能用ip 
        zabbix_key => "zabbix_key" # zabbix_key指上面映射的key,意思就
                                     是发送给某主机的某key,值为zabbix_value 
        zabbix_server_host => "192.168.1.229" # zabbix server 
        zabbix_server_port => "10051" # zabbix server port 默认为10051 
        zabbix_value => "Message" # 要发送的key值 
    } 
}

如果需要进行测试,可以在zabbix agent使用zabbix_sender进行测试:

/opt/zabbix/sender -z zabbix-server -p port -s agentservername -k keyname -o keyvalue

所有配置完成后,可以在监测日志文件中输入一些测试数据,并在zabbix web上查看是否正常出现数据:

【配置报警】 
“configuration” -> “Templates” -> “Triggers” -> “Create Trigger”: 
Name:log error check 
Expression:判断获取值的长度是否为0,如果不为0,trigger为problem状态,发送报警

其他关于报警相关配置请自行某度······

参考资料:

http://blog.sina.com.cn/s/blog_7ba28b620102xw2w.html

https://www.elastic.co/guide/en/logstash/current/plugins-outputs-zabbix.html

https://www.zabbix.org/wiki/Docs/protocols/zabbix_sender/2.0

时间: 2024-11-03 03:38:52

Logstash整合zabbix 过滤Nginx 错误日志并进行报警的相关文章

Nginx错误日志整理

Nginx错误日志说明 错误日志类型 类型1: upstream timed out 类型2: connect() failed 类型3: no live upstreams 类型4: upstream prematurely closed connection 类型5: 104: Connection reset by peer 类型6: client intended to send too large body 类型7: upstream sent no valid HTTP/1.0 he

logstash通过rsyslog对nginx的日志收集和分析

logstash通过rsyslog对nginx的日志收集和分析 http://bbotte.blog.51cto.com/6205307/1613571 logstash&elasticsearch&kibana的安装和配置 http://bbotte.blog.51cto.com/6205307/1614453  这一篇文章里面是以nginx打补丁的方式实现rsyslog把nginx的日志同步到logstash做分析,不过线上环境种种不一样,下面是把nginx的日志直接通过rsyslog

logstash 2.2以上版本,nginx 错误日志切割

网上nginx错误日期切分的版本各式各样,能用的没几个,踩过很多坑,特意记录下: if [type] == "xx_app_nginx_error_log" { grok { patterns_dir => "/etc/logstash/conf.d/patterns" match => { "message" => "%{NGINXERROR_1}" } } mutate { #避免日期报错 gsub =&

Nginx错误日志说明

错误日志类型 类型1: upstream timed out 类型2: connect() failed 类型3: no live upstreams 类型4: upstream prematurely closed connection 类型5: 104: Connection reset by peer 类型6: client intended to send too large body 类型7: upstream sent no valid HTTP/1.0 header 详细说明 类型

Nginx 错误日志配置

错误日志可以在 nginx.conf 的全局配置(也就是main区块)中添加,也可以在不同虚拟主机配置文件中的全局配置中单独添加 语法:error_log  file  level: // error_log 是固定的关键字,file 是错误日志的存放路径,level 是日志等级 配置实例: worker_processes 1; user nobody nobody; pid /usr/local/nginx/nginx.pid;error_log logs/error.log error;

nginx错误日志error_log日志级别

在配置nginx.conf 的时候,有一项是指定错误日志的,默认情况下你不指定也没有关系,因为nginx很少有错误日志记录的.但有时出现问题时,是有必要记录一下错误日志的,方便我们排查问题.error_log 级别分为 debug, info, notice, warn, error, crit  默认为crit, 该级别在日志名后边定义格式如下:error_log  /your/path/error.log crit;  crit 记录的日志最少,而debug记录的日志最多.如果你的nginx

nginx错误日志级别

在配置nginx.conf 的时候,有一项是指定错误日志的,默认情况下你不指定也没有关系,因为nginx很少有错误日志记录的.但有时出现问题时,是有必要记录一下错误日志的,方便我们排查问题.error_log 级别分为 debug, info, notice, warn, error, crit  默认为crit, 该级别在日志名后边定义格式如下:error_log  /your/path/error.log crit;  crit 记录的日志最少,而debug记录的日志最多.如果你的nginx

Nginx错误日志(error_log)配置及信息详解

Nginx状态信息(status)配置及信息详解 nginx与php-fpm一样内建了一个状态页,对于想了解nginx的状态以及监控nginx非常有帮助.为了后续的zabbix监控,我们需要先了解一下nginx的状态页. Nginx状态信息(status)介绍 Nginx软件在编译时又一个with-http_stub_status_module模块,这个模块功能是记录Nginx的基本访问状态信息,让使用者了解Nginx的工作状态.要想使用状态模块,在编译时必须增加--with-http_stub

logstash结合zabbix报警安装部署

cd /usr/share/logstash/ vim Gemfile source "https://ruby.taobao.org/" ##修改成国内镜像站 source "https://gems.ruby-china.org/" ##修改成国内镜像站 bin/logstash-plugin install logstash-output-zabbix ##安装logstash-output-zabbix /usr/bin/zabbix_sender -z 1