前言
复习zabbix,实现对nginx的监控
|NODE|IP|ROLE|
|-|-|-|
|T1|192.168.179.191|zabbix-agent,nginx|
|T3|192.168.179.193|zabbix-server|
实践
zabbix实现监控nginx
1.编译安装nginx(T1)
nginx需要实现stub_status,需要编译安装
cd /usr/local/
wget https://nginx.org/download/nginx-1.26.3.tar.gz
tar -zxvf nginx-1.26.3.tar.gz
cd /usr/local/nginx-1.26.3
#安装依赖
yum install pcre-devel libxml2-devel libxslt-devel gd-devel perl-ExtUtils-Embed#这里仅安装了必要的配置和stub_status模块
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_realip_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-pcre
make && make install
mkdir /etc/nginx
cp -r /usr/local/nginx/conf/* /etc/nginxvim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target groupadd nginx
useradd -g nginx -s /sbin/nologin -M nginx
systemctl daemon-reload
systemctl start nginx && systemctl enable nginx
systemctl status nginx2.编写server配置(T1)
server {
listen 80;
server_name localhost;
location /status {
#开启stub_status
stub_status on;
access_log off;
#防止其他用户访问
allow 192.168.179.0/24;
deny all;
}
}3.配置脚本(T1)
参考zabbix监控nginx指标-CSDN博客
我在其基础上进行修改,减少一次请求并且简化了过滤方式,修改判断nginx存活的方法并将其作为一个键
#!/bin/bash
#需要nginx启动stub_status
nginx_server="http://192.168.179.191"
nginx_page="status"
status=$(curl -s -w "\n%{http_code}" ${nginx_server}/${nginx_page})
#判断nginx是否存活
ngx_status_code() {
http_code=$(echo ${status}|awk '{print $NF}')
#以下方法有缺陷,无法判断200
#判断404:http_code=$(echo ${status}|grep -oP '(?<=<h1>)\d+') #正向后行断言
#判断404:echo ${status}|grep -oP '<h1>\K\d+' #\K:跳过之前匹配
if [ "${http_code}" -eq 200 ];then
return 0
else
echo "Nginx status is not running."
return 1
fi
}
#判断nginx存活
alive() {
#nginx挂掉输出0,存活输出1
ngx_status_code && echo "1" || echo "0"
}
#获取当前活动的客户端连接数
active() {
ngx_status_code && echo ${status} | awk '{print $3}'
}
#获取接收客户端连接的总数量
accepts() {
ngx_status_code && echo ${status} | awk '{print $8}'
}
#获取已处理的连接总数量
handled() {
ngx_status_code && echo ${status} | awk '{print $9}'
}
#获取客户端请求总数量
requests() {
ngx_status_code && echo ${status} | awk '{print $10}'
}
#获取正在读取请求标头的当前连接数量
reading() {
ngx_status_code && echo ${status} | awk '{print $12}'
}
#获取正在将响应写回到客户端的当前连接数量
writing() {
ngx_status_code && echo ${status} | awk '{print $14}'
}
#获取当前正在等待响应的客户端连接数量
waiting() {
ngx_status_code && echo ${status} | awk '{print $16}'
}
#使用位置变量控制脚本输出
case $1 in
active)
active;;
accepts)
accepts;;
handled)
handled;;
requests)
requests;;
reading)
reading;;
writing)
writing;;
waiting)
waiting;;
alive)
alive;;
*)
echo "Unknown options"
esac
4.配置zabbix-agent2配置文件(T1)
vim /etc/zabbix/zabbix_agent2.d/T1_nginx_status.conf
#UserParameter=<KEY>,<VALUE>
UserParameter=nginx.active,bash /etc/zabbix/script/nginx_status.sh active
UserParameter=nginx.accepts,bash /etc/zabbix/script/nginx_status.sh accepts
UserParameter=nginx.handled,bash /etc/zabbix/script/nginx_status.sh handled
UserParameter=nginx.requests,bash /etc/zabbix/script/nginx_status.sh requests
UserParameter=nginx.reading,bash /etc/zabbix/script/nginx_status.sh reading
UserParameter=nginx.writing,bash /etc/zabbix/script/nginx_status.sh writing
UserParameter=nginx.waiting,bash /etc/zabbix/script/nginx_status.sh waiting
UserParameter=nginx.alive,bash /etc/zabbix/script/nginx_status.sh alive
systemctl restart zabbix-agent25.测试键值(T1)
#客户端测试
zabbix_get -s 127.0.0.1 -k nginx.active
zabbix_get -s 127.0.0.1 -k nginx.requests
#服务端测试
zabbix_get -s 192.168.179.191 -k nginx.active
zabbix_get -s 192.168.179.191 -k nginx.requests6.web界面创建模板
7.模板界面创建监控项
测试完别忘了添加,接下来就是重复工作,将刚刚的自定义键值全部添加
8.模板界面创建触发器
9.模板界面创建图表
至此,完成了zabbix自定义监控的nginx(简化版),仍有许多nginx的指标可以监控,但指标太多,流程却是一样的
添加邮箱警告
添加邮箱警告流程
- 在zabbix-server上配置mailx,实现SMTP
- 在zabbix-server指定目录(参考配置文件的AlertScriptsPath)内写发邮件脚本
- web界面配置触发器并检查
- web界面配置警告媒介与用户
- web界面配置触发器动作
1.配置mailx
共有云邮箱mailx - 依刻学习
2.配置邮件脚本
#修改配置文件
vim /app/tools/zabbix/zabbix-server.conf
#添加
AlertScriptsPath=/app/tools/zabbix/alertscripts
mkdir /app/tools/zabbix/alertscripts3.web界面配置触发器并检查
已经完成了触发器配置与检测
4.web界面创建警告媒介
5.web界面关联用户和警告媒介
6.web界面创建触发器动作
#参考变量
#这里的EVENT.NAME就是触发器动作名,不需要再表明nginx挂了
{EVENT.NAME}
告警主机:{HOST.NAME}
告警 IP:{HOST.IP}
告警时间:{EVENT.DATE}-{EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}:{ITEM.VALUE}
事件 ID:{EVENT.ID}触发器恢复动作略,与触发器警告基本相同,只需要添加字符`'nginx已恢复'就行了
至此完成警告配置
#关闭T1的nginx
systemctl stop nginx查看T1主机的监控
检查邮箱
恢复nginx
systemctl restart nginx马上就会收到新的邮件
测试完成
总结
配置花了一个上午+中午,以前一直不太明白的配置这次终于搞明白了,其实想想与ES有点像,虽然从架构与功能来看完全不同,但是仔细想想底层都是一样的,从客户端收集数据,发送到服务端,服务端收集数据,创建图表

























