zabbix监控nginx日志状态码
监控需求
监控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性能的主机——》模板——》添加模板——》选中我们创建的模板
查看数据
监测——》最新数据——》选中节点——》选中应用集
通过图形查看数据
- **本文作者: **好好青年
- 本文链接: https://zabbix.abcops.cn/2020/01/13/Zabbix监控篇-Nginx日志监控/
- **版权声明: **本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
zabbix监控nginx日志状态码的更多相关文章
- zabbix监控nginx连接状态(转)
zabbix监控nginx zabbix可以监控nginx的状态,关于一个服务的状态可以查看服务本身的状态(版本号.是否开启),还应该关注服务能力(例如以nginx的负载效果:连接数.请求数和句柄数) ...
- Zabbix监控Nginx性能状态
Nginx在生产环境中的应用越来越广泛,所以需要对nginx的性能状态做一些监控,从而发现故障隐患,Ngnx的监控指标可分为:基本活动指标,错误指标,性能指标 监控Nginx思路: 1)首先,要想监控 ...
- 获取nginx日志状态码百分比脚本
#!/bin/bash pwd=/app/nginx/logs/access.log for num1 in `cat $pwd | awk '{print $9}' | grep -Ei " ...
- zabbix监控nginx服务状态
nginx需要安装--with-http_stub_status_module模块 $ nginx -V nginx version: nginx/1.12.2 built by gcc 4.8.5 ...
- Zabbix 监控 Nginx 状态
简介: 如何使用 Zabbix 监控 Nginx 状态 ? 1.获取 Nginx 状态( HTTP Stub Status ) shell > /usr/local/nginx/sbin/ngi ...
- zabbix监控nginx+php-fpm,mysql+主从复制+高可用,tomcat,redis web状态
zabbix监控对象区分 使用SNMP监控交换 使用IPMI监控服务器硬件 使用Agent监控服务器 使用JMX监控JAVA SNMP监控流程 交换机上开启snmp 在zabbix上添加监控(设置SN ...
- Zabbix 监控 Nginx(四)
简介: 如何使用 Zabbix 监控 Nginx 状态 ? 1.获取 Nginx 状态( HTTP Stub Status ) [root@localhost ~]# /apps/product/ng ...
- zabbix监控nginx进程
确认nginx有没有安装模块 然后在主站点下添加(二级站点) location /NginxStatus { stub_status on; access_log off; allow 127.0.0 ...
- 使用Zabbix监控Nginx服务实战案例
使用Zabbix监控Nginx服务实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.编译安装nginx步骤详解并开启状态页 博主推荐阅读: https://www.cn ...
随机推荐
- app扫描二维码登陆
先说明一下实现原理: 如同微信扫描登陆一样,就是一种pc的自动登陆授权.在网站首页得有切换登陆的选项:密码登陆 扫码登陆 当用户切换到扫码登陆时,向服务器请求一次获得一个唯一的uukey 利用这个uu ...
- virtual box设置网络,使用nat网络和仅主机(Host Only)网络进行连接
virtual box设置网络,使用nat网络和仅主机(Host Only)网络进行连接 前言 作为程序员难免要在本机电脑安装虚拟机,最近在用virtual box安装虚拟机的时候遇到了点问题. 对于 ...
- char类型及ASCII码之间比较
在JAVA中,char类型可以直接运算,char在ASCII等字符编码表中有对应的数值对char类型字符运行时,直接当做ASCII表对应的整数来对待 参考 https://blog.csdn.net/ ...
- ES6构造函数class 和 ES5构造函数语法
构造函数就是JavaScript程序定义好的函数,我们直接使用就可以,实际也是一种函数,构造函数专门用于生成定义对象,通过构造函数生成的对象,称为实例化对象 构造函数分为两种,一种是JavaScrip ...
- Vue + d3.js实现在地图上选点
需求:用户在地图上单击选点,页面获取到具体坐标并返回. 首先比较重要的是Vue中的$nextTick,因为vue是异步更新的,如果是想打开Dialog或者是其他操作dom后才加载地图,使用nextTi ...
- Hadoop权威指南(中文版-带目录索引)pdf电子书
Hadoop权威指南(中文版-带目录索引)pdf电子书下载地址:百度网盘点击下载:链接:https://pan.baidu.com/s/1E-8eLaaqTCkKESNPDqq0jw 提取码:g6 ...
- N - Aroma's Search CodeForces - 1293D math+greedy
作为DIV2的D题来讲,这个题目不算难. 题目大意:再规定的时间内寻找宝藏,第i个宝藏的位置为a*x(i-1)+b,a*y(i-1)+b.然后给出初始位置xs,ys和时间t让求再时间t内能够寻找到多少 ...
- 【原创干货】大数据Hadoop/Spark开发环境搭建
已经自学了好几个月的大数据了,第一个月里自己通过看书.看视频.网上查资料也把hadoop(1.x.2.x).spark单机.伪分布式.集群都部署了一遍,但经历短暂的兴奋后,还是觉得不得门而入. 只有深 ...
- xshell下使用vim的编辑一个文件Ctrl+S和Ctrl+Q
xshell下使用vim的编辑一个文件,保存的时候习惯性的按了Ctrl+S 结构悲剧了.屏幕锁死了.按其他键都没有反应,exc也不行. 经过问度娘才知道. 原来Ctrl+S在Linux里,是锁定屏幕的 ...
- tensorflow1.0 placeholder占位符
import tensorflow as tf #(tf.float32,[2,2]) input1 = tf.placeholder(tf.float32) input2 = tf.placehol ...