实例:监控NGINX的性能
1.安装(确认是否有状态统计模块)
yum -y install nginx
2.更改NGINX配置文件添加状态统计站点
vim /etc/nginx/nginx.conf #主配置文件 vim /etc/nginx/conf.d/default.conf #子配置文件 location /nginx_status { stub_status on; #开启状态统计 access_log off; #关闭访问日志 allow 127.0.0.1; #只允许本机访问 deny all; }
systemctl restart nginx
测试 访问设置的网站 获取NGINX状态统计
curl -sL http://127.0.0.1/nginx_status
过滤结果获取需要的值
curl -sL http://127.0.0.1/nginx_status | awk '/Active connections/{print $3}' #连接数 curl -sL http://127.0.0.1/nginx_status | awk 'NR==3 /{print $3}' #请求总数
3.编写 nginx 监控脚本
mkdir -p /etc/zabbix/zabbix_shell/ cd /etc/zabbix/zabbix_shell/
vim zabbix_nginx.sh #/bin/bash #Description:Automated monitoring nginx performance and process nginx_status scripts HOST="127.0.0.1" PORT=80 stub_status="nginx_status" COMMAND=$1 nginx_check() { if [ -f /sbin/pidof ]; then #如果有pidof命令用pidof统计NGINX进程,如果没有用ps aux统计NGINX进程 /sbin/pidof nginx | wc -w #pidof查看NGINX进程pid,并且wc统计 else ps aux | grep -v "grep" | grep -c "nginx:" fi } #获取stub_status页面各项参数 nginx_active(){ /usr/bin/curl -s "http://$HOST:$PORT/${stub_status}/" 2> /dev/null | awk '/Active/ {print $NF}' } nginx_reading(){ /usr/bin/curl -s "http://$HOST:$PORT/${stub_status}/" 2> /dev/null | awk '/Reading/ {print $2}' } nginx_writing(){ /usr/bin/curl -s "http://$HOST:$PORT/${stub_status}/" 2> /dev/null | awk '/Writing/ {print $4}' } nginx_waiting(){ /usr/bin/curl -s "http://$HOST:$PORT/${stub_status}/" 2> /dev/null | awk '/Waiting/ {print $6}' } nginx_accepts(){ /usr/bin/curl -s "http://$HOST:$PORT/${stub_status}/" 2> /dev/null | awk 'NR==3 {print $1}' } nginx_handled(){ /usr/bin/curl -s "http://$HOST:$PORT/${stub_status}/" 2> /dev/null | awk 'NR==3 {print $2}' } nginx_requests(){ /usr/bin/curl -s "http://$HOST:$PORT/${stub_status}/" 2> /dev/null | awk 'NR==3 {print $3}' } #运行脚本跟上不同参数获取不同的统计值 case $COMMAND in check) nginx_check ;; active) nginx_active ;; reading) nginx_reading ;; writing) nginx_writing ;; waiting) nginx_waiting ;; accepts) nginx_accepts ;; handled) nginx_handled ;; requests) nginx_requests ;; *) echo $"USAGE:$0 {check|active|reading|writing|waiting|accepts|handled|requests}" esac
chmod +x zabbix_nginx.sh
4.客户端 在子配置文件夹中编写自定义模版
cd /etc/zabbix/zabbix_agent2.d/ vim nginx_status.conf # UserParameter=键值,脚本 UserParameter=nginx_status[*],/etc/zabbix/zabbix_nginx.sh $1 # [*] 用于传参 $1 对应[*]中的数值
systemctl restart zabbix-agent2
服务器端验证
zabbix_get -s 192.168.80.102 -p 10050 -k nginx.status[check] #被监控主机的IP zabbix_get -s 192.168.80.102 -p 10050 -k nginx.status[active]
5.添加自定义监控项模板
创建模板
- 点击左边菜单栏【配置】中的【模板】,点击【创建模板】
- 【模板名称】设置成 Template NGINX Status
- 【可见的名称】设置成 Template NGINX Status
- 【群组】选择 Template
- 【描述】可自定义
- 点击 【添加】
此时就可在【名称】中输入 NGINX,点击应用,即可搜索到相应模板了
创建 2 个监控项
- 点击上方菜单栏【监控项】,点击【创建监控项】
- 【名称】设置成 number of nginx process ;number of active connections(NGINX进程存活情况与NGINX连接数)
- 【键值】设置成 nginx.status[check] ;nginx.status[active]
- 【更新间隔】设置成 10s
- 点击 【添加】(添加完成后可以再次进入,进行测试 端口10050)
创建触发器(nginx服务down了执行报警;超过10000个并发连接就执行报警)
- 点击上方菜单栏【触发器】,点击【创建触发器】,创建两个触发器
- 【名称】设置成 Nginx down on {HOST.NAME} 与 Too much active connections(NGINX服务器掉线,并发量过多)
- 【严重性】设置成 严重
- 【表达式】分别添加
- 【Nginx down on {HOST.NAME} 监控项】点击选择 number of nginx process ,【功能】选择 last(),【结果】选择 = 0,点击 【插入】
- 【Too much active connections 监控项】点击选择 number of active connections ,【功能】选择 last(),【结果】选择 > 10000,点击 【插入】
- 点击 【添加】
创建图形
- 点击上方菜单栏【图形】,点击【创建图形】
- 【名称】设置成 number of active connections
- 【宽】、【高】可直接采用默认值
- 【监控项】点击添加勾选相关监控项 number of active connections ,【功能】选择 平均,其它可保持默认值
- 点击 【添加】
将主机与模板关联起来(一个主机可以关联多个模板)
- 点击左边菜单栏【配置】中的【主机】,点击你要关联的主机
- 点击上方菜单栏【模板】,【Link new tamplates】搜索 NGINX,选择 Template NGINX Status,点击【更新】
- 此时就点击【监测】中的【主机】,点击你关联主机的【图形】,即可查看到相关的监控项指标
添加邮箱报警(别忘了修改用户设置里的报警方式)