监控需求

监控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. Array(数组)对象-->数组的访问

    1.访问数组: 通过指定数组名以及索引号码,你可以访问某个特定的元素. 格式: 数组对象名[下标] 例如:arr[0]  就是访问数组第一个值 var arr = new Array(3); arr[ ...

  2. Python爬虫系列(二):requests基础

    1.发送请求: import requests # 获取数据#r是一个 response 对象.包含请求返回的内容r = requests.get('https://github.com/timeli ...

  3. Django模拟ASP.NET MVC 自动匹配路由(转载)

    项目结构 操作步骤 1.创建项目结构如上图 2.在myapp目录下创建urls文件,代码: from django.conf.urls import patterns, url from untitl ...

  4. Docker 清理命令 删除所有的镜像和容器

    杀死所有正在运行的容器 docker kill $(docker ps -a -q) 删除所有已经停止的容器 docker rm $(docker ps -a -q) 删除所有未打 dangling ...

  5. developerWorks 中文社区

    https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=3302cc3 ...

  6. Multism的简单使用(半加器和全加器)

  7. D. Points in rectangle

    D. Points in rectangle 单点时限: 2.0 sec 内存限制: 512 MB 在二维平面中有一个矩形,它的四个坐标点分别为(0,a),(a,0),(n,n−a),(n−a,n). ...

  8. E - Aladdin and the Flying Carpet

    It's said that Aladdin had to solve seven mysteries before getting the Magical Lamp which summons a ...

  9. 今天我们来讨论一下CSS3属性中的transition属性;

    transition属性是CSS3属性:顾名思义英文为过渡的意思:主要有四个值与其一一对应:分别是property(CSS属性名称),duration过渡的时长,timimg-function转速曲线 ...

  10. 4. css事件

    可通过使用css伪类实现点击元素变色的效果,两个伪类是:active, :focus :active :active选择器用于选择活动链接.当在一个链接上点击时,它就会成为活动的(激活的),:acti ...