监控需求

监控Nginx常见的状态码并对其进行监控,对常见的错误状态码创建相对应的触发器
以下按照分钟对数据进行抓取

Zabbix_Agentd创建监控脚本

1)创建脚本之前核对Nginx日志格式
我这里nginx日志格式如下,使用 “” 分割日志参数。

log_format  main  ' $http_x_forwarded_for" "$remote_user" "[$time_local]" "$request"'
' "$status" "$body_bytes_sent" "$http_referer"'
' "$http_user_agent" "$remote_addr" "$gzip_ratio"'
' "$upstream_addr" "$request_time" "$upstream_response_time" "$http_host"';
access_log logs/access.log main;

2)创建日志监控脚本
vim /usr/local/zabbix/scripts/ngx_logs.sh

#!/usr/bin/env bash
# -----------------------------------
# Script name : nginx logs status code monitor
# Author : WeiLiang Xu
# Contact me : xuwl@micvs.com
# Last Modified : Jan, 06th, 2020
# ----------------------------------- [ ! -d /tmp/nginx ] && mkdir /tmp/nginx
LOG_PATH=/usr/local/nginx/logs/access.log #Nginx日志路径
LOG_TEMP=/tmp/nginx/nginx_last_min.log #Nginx上一分钟文件
LOG_STAT=/tmp/nginx/nginx_stat.txt #Nginx状态码文件
LAST_MIN=`date -d "1 minute ago" +%Y:%H:%M` #获取上一分钟值 tail -30000 ${LOG_PATH} | grep "${LAST_MIN}" > ${LOG_TEMP} #tail 3万行数据然后进行过滤上一分钟,如果请求量较大则加大行数,过滤后将数据重定向到上一分钟文件中
cat ${LOG_TEMP} | awk -F '" "' '{print $5}' | sort | uniq -c | sort -rn > ${LOG_STAT} #过滤上一分钟文件的状态码并对状态码进行排序去重然后显示状态码次数 #200 Code
#过滤临时文件中状态码等于200的值然后打印其次数后赋值给c_200,然后重定向到/tmp/nginx/nginx_200.txt,如果其值为空,则赋值为0后重定向到/tmp/nginx/nginx_200.txt
c_200=`cat ${LOG_STAT} | awk '$2==200{print $1}'`;[ -z ${c_200} ] && c_200=0;echo ${c_200} > /tmp/nginx/nginx_200.txt
c_202=`cat ${LOG_STAT} | awk '$2==202{print $1}'`;[ -z ${c_202} ] && c_202=0;echo ${c_202} > /tmp/nginx/nginx_202.txt #300 Code
c_301=`cat ${LOG_STAT} | awk '$2==301{print $1}'`;[ -z ${c_301} ] && c_301=0;echo ${c_301} > /tmp/nginx/nginx_301.txt
c_302=`cat ${LOG_STAT} | awk '$2==302{print $1}'`;[ -z ${c_302} ] && c_302=0;echo ${c_302} > /tmp/nginx/nginx_302.txt
c_304=`cat ${LOG_STAT} | awk '$2==304{print $1}'`;[ -z ${c_304} ] && c_304=0;echo ${c_304} > /tmp/nginx/nginx_304.txt #400 Code
c_400=`cat ${LOG_STAT} | awk '$2==400{print $1}'`;[ -z ${c_400} ] && c_400=0;echo ${c_400} > /tmp/nginx/nginx_400.txt
c_403=`cat ${LOG_STAT} | awk '$2==403{print $1}'`;[ -z ${c_403} ] && c_403=0;echo ${c_403} > /tmp/nginx/nginx_403.txt
c_404=`cat ${LOG_STAT} | awk '$2==404{print $1}'`;[ -z ${c_404} ] && c_404=0;echo ${c_404} > /tmp/nginx/nginx_404.txt
c_405=`cat ${LOG_STAT} | awk '$2==405{print $1}'`;[ -z ${c_405} ] && c_405=0;echo ${c_405} > /tmp/nginx/nginx_405.txt #500 Code
c_502=`cat ${LOG_STAT} | awk '$2==502{print $1}'`;[ -z ${c_502} ] && c_502=0;echo ${c_502} > /tmp/nginx/nginx_502.txt
c_503=`cat ${LOG_STAT} | awk '$2==503{print $1}'`;[ -z ${c_503} ] && c_503=0;echo ${c_503} > /tmp/nginx/nginx_503.txt
c_504=`cat ${LOG_STAT} | awk '$2==504{print $1}'`;[ -z ${c_504} ] && c_504=0;echo ${c_504} > /tmp/nginx/nginx_504.txt #以下来定义函数方便 UserParameter 调用
function c_200 {
cat /tmp/nginx/nginx_200.txt
} function c_202 {
cat /tmp/nginx/nginx_202.txt
} function c_301 {
cat /tmp/nginx/nginx_301.txt
} function c_302 {
cat /tmp/nginx/nginx_302.txt
} function c_304 {
cat /tmp/nginx/nginx_304.txt
} function c_400 {
cat /tmp/nginx/nginx_400.txt
} function c_403 {
cat /tmp/nginx/nginx_403.txt
} function c_404 {
cat /tmp/nginx/nginx_404.txt
} function c_405 {
cat /tmp/nginx/nginx_405.txt
} function c_502 {
cat /tmp/nginx/nginx_502.txt
} function c_503 {
cat /tmp/nginx/nginx_503.txt
} function c_504 {
cat /tmp/nginx/nginx_504.txt
} $1

3) 修改权限属性

chown -Rf zabbix.zabbix /usr/local/zabbix/scripts/ngx_logs.sh
chmod u+x /usr/local/zabbix/scripts/ngx_logs.sh

创建Nginx日志键值

vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/userparameter_ngx_logs.conf
UserParameter=ngx.logs[*],/usr/local/zabbix/scripts/ngx_logs.sh $1

重启Zabbix_Agentd

/etc/init.d/zabbix_agentd restart

测试数据获取

1)本地测试数据获取

/usr/local/zabbix/scripts/ngx_logs.sh c_200
0
/usr/local/zabbix/scripts/ngx_logs.sh c_200
0
/usr/local/zabbix/scripts/ngx_logs.sh c_200
24
/usr/local/zabbix/scripts/ngx_logs.sh c_202
0
/usr/local/zabbix/scripts/ngx_logs.sh c_301
0
/usr/local/zabbix/scripts/ngx_logs.sh c_302
2
/usr/local/zabbix/scripts/ngx_logs.sh c_304
14
/usr/local/zabbix/scripts/ngx_logs.sh c_400
0
/usr/local/zabbix/scripts/ngx_logs.sh c_403
1
/usr/local/zabbix/scripts/ngx_logs.sh c_404
0
/usr/local/zabbix/scripts/ngx_logs.sh c_405
0
/usr/local/zabbix/scripts/ngx_logs.sh c_502
0
/usr/local/zabbix/scripts/ngx_logs.sh c_503
0
/usr/local/zabbix/scripts/ngx_logs.sh c_504
0

2)Zabbix Server进行数据获取

zabbix_get -s 172.26.3.101 -p 10050 -k "ngx.logs[c_200]"
27
zabbix_get -s 172.26.3.101 -p 10050 -k "ngx.logs[c_202]"
0
zabbix_get -s 172.26.3.101 -p 10050 -k "ngx.logs[c_301]"
2
zabbix_get -s 172.26.3.101 -p 10050 -k "ngx.logs[c_302]"
1
zabbix_get -s 172.26.3.101 -p 10050 -k "ngx.logs[c_304]"
0
zabbix_get -s 172.26.3.101 -p 10050 -k "ngx.logs[c_400]"
0
zabbix_get -s 172.26.3.101 -p 10050 -k "ngx.logs[c_403]"
0
zabbix_get -s 172.26.3.101 -p 10050 -k "ngx.logs[c_404]"
0
zabbix_get -s 172.26.3.101 -p 10050 -k "ngx.logs[c_405]"
0
zabbix_get -s 172.26.3.101 -p 10050 -k "ngx.logs[c_502]"
0
zabbix_get -s 172.26.3.101 -p 10050 -k "ngx.logs[c_503]"
0
zabbix_get -s 172.26.3.101 -p 10050 -k "ngx.logs[c_504]"
0

Zabbix_Web创建模板及监控项

1)创建模板
主页面点击 配置——》模板——》创建模板

2)创建应用集
应用集名称为Nginx_logs
过程略
3)创建监控项
进入模板后——》监控项——》创建监控项

最后创建好如下:

4)创建触发器
对进程监控添加触发器,触发器——》创建触发器
填入触发器名称,此名称是告警出的信息——》选择严重性——》添加表达式——》我这里是使用了last函数最新的值如果大于15则触发告警,恢复表达式为last函数最新的至小于15则恢复告警。

最后创建好如下:

5) 创建图形
我这里把Nginx日志监控的监控项都放到了图形中

主机嵌套模板

配置——》主机——》进入需要监控Nginx性能的主机——》模板——》添加模板——》选中我们创建的模板

查看数据

监测——》最新数据——》选中节点——》选中应用集

通过图形查看数据

zabbix监控nginx日志状态码的更多相关文章

  1. zabbix监控nginx连接状态(转)

    zabbix监控nginx zabbix可以监控nginx的状态,关于一个服务的状态可以查看服务本身的状态(版本号.是否开启),还应该关注服务能力(例如以nginx的负载效果:连接数.请求数和句柄数) ...

  2. Zabbix监控Nginx性能状态

    Nginx在生产环境中的应用越来越广泛,所以需要对nginx的性能状态做一些监控,从而发现故障隐患,Ngnx的监控指标可分为:基本活动指标,错误指标,性能指标 监控Nginx思路: 1)首先,要想监控 ...

  3. 获取nginx日志状态码百分比脚本

    #!/bin/bash pwd=/app/nginx/logs/access.log for num1 in `cat $pwd | awk '{print $9}' | grep -Ei " ...

  4. zabbix监控nginx服务状态

    nginx需要安装--with-http_stub_status_module模块 $ nginx -V nginx version: nginx/1.12.2 built by gcc 4.8.5 ...

  5. Zabbix 监控 Nginx 状态

    简介: 如何使用 Zabbix 监控 Nginx 状态 ? 1.获取 Nginx 状态( HTTP Stub Status ) shell > /usr/local/nginx/sbin/ngi ...

  6. zabbix监控nginx+php-fpm,mysql+主从复制+高可用,tomcat,redis web状态

    zabbix监控对象区分 使用SNMP监控交换 使用IPMI监控服务器硬件 使用Agent监控服务器 使用JMX监控JAVA SNMP监控流程 交换机上开启snmp 在zabbix上添加监控(设置SN ...

  7. Zabbix 监控 Nginx(四)

    简介: 如何使用 Zabbix 监控 Nginx 状态 ? 1.获取 Nginx 状态( HTTP Stub Status ) [root@localhost ~]# /apps/product/ng ...

  8. zabbix监控nginx进程

    确认nginx有没有安装模块 然后在主站点下添加(二级站点) location /NginxStatus { stub_status on; access_log off; allow 127.0.0 ...

  9. 使用Zabbix监控Nginx服务实战案例

    使用Zabbix监控Nginx服务实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.  一.编译安装nginx步骤详解并开启状态页 博主推荐阅读: https://www.cn ...

随机推荐

  1. 采用TuesPechkin生成Pdf

    1.需求 前段时间有个需求,要求把网页生成pdf,找了各种插件,才决定使用这个TuesPechkin,这个是后台采用C#代码进行生成 2.做法 我要做的是一个比较简单的页面,采用MVC绑定,数据动态加 ...

  2. go中内存泄露的发现与排查

    一,什么是内存泄漏 Go 中的并发性是以 goroutine(独立活动)和 channel(用于通信)的形式实现的.处理 goroutine 时,程序员需要小心翼翼地避免泄露.如果最终永远堵塞在 I/ ...

  3. Linux c++ vim环境搭建系列(6)——CMakeLists.txt多文档多目录组织方法和编写示例

    CMakeLists.txt学习 1. 概要 主要是关于cmakelists.txt的编写模板,和多文档多目录的组织方法详解, 涉及第三方库的添加使用方法. 这里主要介绍cmakelists.txt的 ...

  4. log4j入门(转) --- 很详细 也很简单容易懂

    log4j入门(转) Log4j实在是很熟悉,几乎所有的Java项目都用它啊.但是我确一直没有搞明白.终于有一天我受不了了,定下心去看了一把文档,才两个小时,我终于搞明白了.一般情况下Log4j总是和 ...

  5. Visual C++ 6.0踩坑记录---在Win10下安装Visual C++ 6.0安装成功后点击“打开”按钮闪退问题

    前言: 为了更好的学习C及C++,前段时间下载了Microsoft Visual C++ 6.0(以下简称VC6),原因是VC6具有查看反汇编代码.监视内存.寄存器等功能,并且因为本人正在学习滴水逆向 ...

  6. 2019-06-02 Python之微信好友数据分析以及运用Pyecharts可视化

    一.库的使用说明 pass 二.微信好友信息的获取 def get_friends_info(self): #获取好像信息,返回lis列表 bot = Bot() lis = [['name', 'r ...

  7. 06-移动web之flex布局

    一.基本概念 flex布局又叫伸缩布局 .弹性布局 .伸缩盒布局 .弹性盒布局 Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. ...

  8. delphi中DateTimePicker控件同时输入日期和时间

    将DateTimePicker的Format属性中加入日期格式设成 'yyyy-MM-dd HH:mm',注意大小写 , 将kind设置为dtkTime即可,可以在每次Form onShow时将Dat ...

  9. G - Greg and Array CodeForces - 296C 差分+线段树

    题目大意:输入n,m,k.n个数,m个区间更新标记为1~m.n次操作,每次操作有两个数x,y表示执行第x~y个区间更新. 题解:通过差分来表示某个区间更新操作执行的次数.然后用线段树来更新区间. #i ...

  10. gitbook命令

    安装gitbook命令 前提:已经安装nodejs npm install -g gitbook-cli 查看版本号 gitbook -V gitbook命令 gitbook -h Usage: gi ...