文章目录
- zabbix集群监控
- 监控内容
- DNS监控
- CDN监控
- 防火墙
- waf防火墙
- 负载
- web监控
-
- 服务层
- 应用或业务监控web场景监控
-
- (1)监控php是否正常
- (2)测试php能否连接数据库
- [(3)zabbix web页面对应主机的web监测](#(3)zabbix web页面对应主机的web监测)
- (4)tomcat、jetty、jboss和jar包监控(推荐自定义监控)
- API监控
-
- [(1)监控zabbix api接口是否可用](#(1)监控zabbix api接口是否可用)
- 缓存(Redis监控)
- 数据库监控
- 存储
- Docker监控
zabbix集群监控
-
第1个维度:用户访问流程维度(数据流/业务流)
-
第2个维度:某个层次上/某个服务器上具体监控的内容:模板+自定义监控
监控内容
| 监控内容 | 详细内容 | 具体实现落地 |
|---|---|---|
| 5 API 接口监控 | 监控指定 API 接口(如 zbx api),含内部接口、外部第三方接口 | curl 命令、web 场景 / 监测 |
| 4 业务、应用、app 监控 | 检查应用可用性,通过测试代码页面(如 info.php、mysqli.php)验证应用状态 | curl 命令、web 场景 / 监测 |
| 3 服务监控 | 1. 基础项:进程、端口 2. 专有项:各服务的专属状态3. 日志项:错误日志近 2000 行中的异常关键词(error/failed/exception) | 模板或根据具体要求自定义监控 |
| 2 系统监控 | 资源类:CPU、负载、内存、磁盘、网络、带宽、IO安全类:关键文件变化(aide)、进程、僵尸进程、非堡垒机登录 | 模板 + 自定义(覆盖僵尸进程、异地登录、aide 校验、secure 日志等场景) |
| 1 硬件监控 | 物理服务器专属项:温度、风扇转速、RAID 状态 | ipmi/megacli 查询 RAID |
具体监控内容
| 监控内容 | 详细内容 | 具体实现落地 |
|---|---|---|
| DNS | 解析是否 OK | 自定义监控 - ping/dig/nslookup/......域名:whois baidu.com过滤过期证书:curl -Lsv www.baidu.com -o /dev/null 过滤 expire date 过期、openssl 命令检查 |
| CDN | 是否可用、命中率、带宽、流量 | 登录对应 cdn 页面检查:命令中率、流量、带宽分布式 ping商业:监控宝、听云免费网站:www.17ce.com、ping.chinaz.com开源软件:smokeping |
| 防火墙和网络设备 | 监控流量、带宽、端口 | snmp 协议 |
| 负载 | ngx 服务情况、证书过期、网站访问量、并发 | ngx/haproxy/keepalived 状态:模板证书:模板、自定义监控网站访问量(运营):ip/pv/uv (第三方插件 / 百度统计 / 自建 matomo)并发:统计 80/443 端口连接数负载均衡健康检查:upstream_check 自定义监控日志:访问日志 (状态码)、错误日志 (异常关键词数量)服务:ngx/keepalived (vip 数量、备节点 vip 状态) |
| web | 主要监控服务情况 | 具体服务使用对应模板即可:ngxphptomcat (war)/jar 包 - 自定义监控 |
| 数据库 | redis、mysql | 模板即可,写入内容、读取写入的内容 |
| 存储 | nfs | 自定义监控:存储空间、可用性(模拟挂载、创建文件校验) |
| 备份 | 备份的数据量 | 自定义监控:备份存在性、发送邮件通知、备份占用空间 |
- 按照用户访问流程,运维角度,开发角度按照顺序逐个进行监控
- 辅助每个节点,硬件监控(如果有),系统监控(必须),服务监控(如果有),业务监控(如果有),API监控(如果有)
DNS监控
| DNS 监控 | 命令或方法 |
|---|---|
| 全国 / 全世界访问(拨测) | 免费拨测网站 / 阿里云拨测工具 |
| 域名 DNS 是否可用 | nslookup/xxx 命令查询解析状态 |
| 域名过期 | 输出域名剩余有效时间 |
| https 证书过期 | 输出证书剩余有效时间 |
拨测
- 涉及到DNS解析,CDN测试,网站访问
- 不仅要节点访问(zabbix-server服务端上面的案例),1对1访问
- 分布式多对1访问,避免某个或某些地区无法访问
阿里云一次性拨测工具
搜索cms

第三方免费网站
自建搭建:全国各地服务器+smokeping

查询DNS是否可用
- 由于没有自建DNS服务器先将查询DNS是否可用这个操作放到zabbix服务端
shell
#1.编写脚本
#列出域名二级和三级域名
#脚本传参+nslookup命令+判断返回值即可
cat > /server/scripts/check_dns.sh <<'EOF'
#!/bin/bash
##############################################################
# File Name:/server/scripts/check_dns.sh
# Version:V1.0
# Author:csq
# Organization: www.chenshiquan.xyz
# Desc:
##############################################################
#1.vars
url=$1
#2.判断是否为域名
##检查nslookup命令是否存在
which nslookup >/dev/null 2>&1 || {
yum install -y bind-utils
}
#3.检查
if nslookup $url >/dev/null 2>&1 ;then
#输出1表示可以使用
echo "1"
else
echo "0"
fi
EOF
#2.修改配置文件
cat >> /usr/local/zabbix/etc/zabbix_agentd.conf.d/dns.conf <<'EOF'
UserParameter=check.dns[*],bash /server/scripts/check_dns.sh "$1"
EOF
#3.重启zabbix_agent
systemctl restart zabbix_agent
#4.zabbix服务端测试(返回1表示可以使用)
zabbix_get -s 127.0.0.1 -k check.dns[www.baidu.com]
##后续
创建监控项、触发器、创建模板DNS、关联 zabbix_server机器
检查域名/证书剩余时间
shell
#1.编写域名剩余时间脚本
cat > /server/scripts/check_https_expire.sh <<'EOF'
#!/bin/bash
##############################################################
# File Name:/server/scripts/check_https_expire.sh
# Version:V1.0
# Author:csq
# Organization: www.chenshiquan.xyz
# Desc:
##############################################################
export LANG=en_US.UTF-8
# 检查域名过期
check_domain() {
local expire_date=$(whois $url | egrep "Expiry|Expiration" | awk -F": " '{print $2}')
local expire_date_second=$(date -d "${expire_date}" +%s)
local date_second_now=$(date +%s)
local date_expire_days=$(echo "(${expire_date_second} - ${date_second_now})/60/60/24" | bc)
echo "${date_expire_days}"
}
# 检查证书过期
check_https() {
local expire_date=$(curl -v "https://${url}" 2>&1 | grep expire | awk -F ": |GMT" '{print $2}')
local expire_date_second=$(date -d "${expire_date}" +%s)
local date_second_now=$(date +%s)
local date_expire_days=$(echo "(${expire_date_second} - ${date_second_now})/60/60/24" | bc)
echo "${date_expire_days}"
}
main() {
choice=$1
url=$2
case "${choice}" in
domain)
check_domain ;;
https)
check_https ;;
esac
}
# 执行主函数(接收命令行参数)
main $*
EOF
#2.修改配置文件
cat >> /usr/local/zabbix/etc/zabbix_agentd.conf.d/dns.conf <<'EOF'
UserParameter=check.dns[*],bash /server/scripts/check_dns.sh "$1"
UserParameter=check.domain_https[*],bash /server/scripts/check_https_expire.sh "$1" "$2"
EOF
#3.重启agent生效配置文件
systemctl restart zabbix_agent
#4.测试
zabbix_get -s localhost -k check.domain_https[domain,chenshiquan.xyz]
zabbix_get -s localhost -k check.domain_https[https,chenshiquan.xyz]
##后续
创建监控项、触发器、创建模板、关联 zabbix_server机器

CDN监控
- 每日带宽,web页面或api监控
- 每日流量,web页面或api监控
- CDN命中率,不低于90%,web页面或api监控
防火墙
waf防火墙
- Post请求 uri异常200
- 蜜罐
- iptables直接看规则即可,开启或关闭
- 公有云防火墙查看规则即可
- 硬件防火墙通过snmp监控即可
负载
| 分层 | 监控对象 | 具体实现 / 说明 |
|---|---|---|
| api 接口层 | 应用代码 | - |
| 业务层 | - | - |
| 服务层 | ngx/haproxy/vs/keepalived | 模板;补充访问日志、错误日志;状态开发(as-sn)每种状态数量、端口、进程 |
| 系统层 | cpu、内存、磁盘、网络、io、进程 | zabbix 模板 + 自定义监控(含僵尸进程数量、连接状态信息) |
| 硬件层 | 硬件状态 | ipmi/megacli 查询 RAID |
系统层
- 模板Linux by zabbix agent(CPU、内存、负载、网络、磁盘读写、登陆用户、运行时间)
- 补充 僵尸进程数、挂起进程数、文件是否发生变化aide --check 、用户是否来自于堡垒机、网络连接状态
CPU/负载核心参数
| 监控参数 | 作用说明 |
|---|---|
| CPU idle time(CPU 空闲时间占比) | 反映 CPU 空闲资源比例:占比过低(如 < 20%)说明 CPU 负载过高,应用 / 系统进程占用过多 |
| CPU system time(CPU 系统态时间占比) | 反映内核进程的 CPU 占用:占比过高(如 > 30%)可能是内核线程、驱动或系统调用异常 |
| CPU user time(CPU 用户态时间占比) | 反映应用程序的 CPU 占用:占比过高说明业务进程(如 Java、PHP)消耗 CPU 资源过多 |
| System load average (1m/5m/15m)(系统平均负载) | 反映 CPU / 磁盘 / 网络的综合压力:1 分钟负载持续高于 CPU 核心数,说明系统资源不足 |
内存核心参数
这是 Zabbix 监控系统中Linux 内存监控的核心指标项,整理为对应参数、作用的表格如下:
| 监控项名称 | 作用说明 |
|---|---|
| Available memory | 表示系统实际可分配给新进程的可用内存(包含可回收的缓存、缓冲区),是判断内存是否充足的核心指标:若该值持续过低,需排查内存泄漏或高占用进程 |
| Available memory in % | 可用内存占总内存的比例,更直观地反映内存剩余资源的相对占比:占比<20% 时,说明内存资源已较为紧张 |
| Memory utilization | 内存的已使用比例(包含缓存、缓冲区),用于快速判断内存整体占用程度:占比>90% 且持续上升时,系统面临 OOM(进程被终止)的风险 |
| Total memory | 系统物理内存的总容量,是评估内存资源基准的基础指标:需结合可用内存、已用比例,判断是否需要扩容 |
磁盘核心参数
| 监控项名称 | 关键作用说明 |
|---|---|
| sda: Disk average queue size (avgqu-sz) | 磁盘 IO 请求的平均等待队列长度:队列越长,说明磁盘处理 IO 请求的压力越大(队列 > 2 持续上升时,磁盘是系统瓶颈) |
| sda: Disk utilization | 磁盘繁忙时间占比:直接反映磁盘的负载程度(利用率 > 80% 且持续上升,说明磁盘处于高负载状态) |
| sda: Disk read request avg waiting time (r_await) | 磁盘读请求的平均等待时间:时间越长,说明读 IO 的延迟越高(通常应 < 5ms,持续升高需排查磁盘性能) |
| sda: Disk write request avg waiting time (w_await) | 磁盘写请求的平均等待时间:时间越长,说明写 IO 的延迟越高(通常应 < 5ms,持续升高需排查磁盘或写入负载) |
| sda: Disk read rate | 磁盘读请求的速率(单位:i/s):反映磁盘读 IO 的吞吐量,用于判断读负载的强度 |
| sda: Disk write rate | 磁盘写请求的速率(单位:i/s):反映磁盘写 IO 的吞吐量,用于判断写负载的强度 |
网络核心参数
| 网卡 | 监控项名称 | 关键作用说明 |
|---|---|---|
| ens33 | Bits received | 网卡接收带宽速率:反映入站流量负载强度 |
| ens33 | Bits sent | 网卡发送带宽速率:反映出站流量负载强度 |
| ens33 | Inbound packets discarded | 入方向丢包数:非 0 且持续增加,说明网络拥塞或链路故障 |
| ens33 | Inbound packets with errors | 入方向错误包数:非 0 说明网卡、网线或交换机存在物理 / 配置故障 |
| ens33 | Operational status | 网卡运行状态:显示 "up" 为正常,"down" 则网卡未启用 / 故障 |
| ens33 | Speed | 网卡物理速率(基准):此处为 1Gbps,用于判断实际流量是否接近带宽上限 |
| ens34 | Bits received | 同 ens33,反映该网卡入站流量负载 |
| ens34 | Bits sent | 同 ens33,反映该网卡出站流量负载 |
| ens34 | Inbound packets discarded | 同 ens33,反映该网卡入方向丢包情况 |
| ens34 | Inbound packets with errors | 同 ens33,反映该网卡入方向错误包情况 |
| ens34 | Operational status | 同 ens33,反映该网卡运行状态 |
| ens34 | Speed | 同 ens33,该网卡物理速率基准(1Gbps) |
系统与进程核心参数
| 监控参数 | 作用说明 |
|---|---|
| proc.zombie (僵尸进程数需要自己添加) | 反映进程回收异常:僵尸进程数 > 5 个且持续增加,会耗尽系统进程表资源(无法创建新进程) |
| Number of running processes(运行中进程数) | 反映 CPU 调度压力:运行中进程数远大于 CPU 核心数,会导致进程调度延迟增加 |
| System uptime(系统运行时长) | 辅助判断系统稳定性:频繁重启(uptime<1 小时)说明系统或硬件存在故障 |
服务层
监控nginx状态
服务层的模板拿来不一定能用,所以要根据自己的配置修改模板
shell
#1.设置nginx状态页
server {
listen 80 default_server;
server_name localhost;
default_type text/plain;
location / {
#return 200 "website is ok";
index index.html;
}
location /status {
#allow 221.218.213.9 ;
allow 127.0.0.1;
allow 10.0.0.1;
allow 172.16.1.0/24;
deny all;
stub_status;
}
}
#2.图形化界面操作
- 给nginx添加Nginx by Zabbix agent模板

- 修改Nginx by Zabbix agent模板的宏参数

- 如果有类似过滤主要项结果错误,可以自己修改正则
负载均衡监控,监控指定站点的web情况,自定义监控
-
nginx需要安装upstream check可以监控负载
-
监控负载均衡多个分组,分组中主机是否运行
-
未来使用haproxy替代
-
nginx负载均衡自定义监控,开启负载均衡监控检查模块upstream check编译安装nginx
-
默认没有关联的模板
-
监控项:有多少个节点,有多少个分组,每个分组里面的节点状态
shell
#1.编写配置文件
upstream blog_pools {
server 10.0.0.7:80;
server 10.0.0.8:80;
# ------------------------------
# 负载均衡健康检查配置(依赖ngx_http_upstream_check_module模块)
# ------------------------------
# interval:健康检查间隔(单位:毫秒)
# rise:连续2次检查成功,标记后端节点为"可用"
# fall:连续5次检查失败,标记后端节点为"不可用"
# timeout:检查超时时间(单位:毫秒)
# type:检查类型(http协议)
check interval=3000 rise=2 fall=5 timeout=1000 type=http;
# 健康检查发送的HTTP请求内容(HEAD方法请求/index.php,携带Host头)
check_http_send "HEAD /index.php HTTP/1.0\r\nHost:blog.oldboylinux.cn\r\nUser-Agent: lb_check\r\n\r\n";
# 健康检查期望的"存活"响应状态码(2xx/3xx视为正常)
check_http_expect_alive http_2xx http_3xx;
}
server {
listen 80;
server_name blog.oldboylinux.cn lb81.oldboylinux.cn;
error_log /var/log/nginx/blog.oldboylinux.cn-error.log notice;
access_log /var/log/nginx/blog.oldboylinux.cn-access.log main;
location / {
proxy_pass http://blog_pools;
proxy_set_header Host $http_host; #XFF
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-Ip $remote_addr;
ngx_access_log log_format $http_x_forwarded_for;
}
location /_lb_status {
check_status;
access_log off;
#allow
#deny
}
}
#2.脚本
#!/bin/bash
# 1. 定义变量:接收外部传入的参数(负载均衡绑定的域名)
url=$1
# 2. 统计负载均衡后端总节点数
# 说明:通过curl访问Nginx健康检查状态页(csv格式),统计总行数(每行对应1个后端节点)
total=$(curl -s -H Host:$url localhost/_lb_status?format=csv | wc -l)
# 3. 统计负载均衡后端"可用(up)"的节点数
# 说明:过滤csv中状态为"up"的行,统计行数
up=$(curl -s -H Host:$url localhost/_lb_status?format=csv | grep -wi up | wc -l)
# 4. 计算可用节点占比(保留2位小数)
# 说明:用bc工具计算百分比,-l参数启用浮点运算;若total为0则返回-1(避免除0错误)
echo "scale=2; $up / $total * 100" | bc -l
#3.写入zabbix agent 子配置文件
cat >> /etc/zabbix/zabbix_agentd.d/lb.conf <<'EOF'
UserParameter=check_lb[*],sh /server/scripts/check_lb_pools.sh "$1"
EOF
#4. 重启zabbix agent
systemctl restart zabbix-agent
监控keepalived是否切换
- 备节点
- 监控项:过滤下keepalived是否有进程
- 监控项:是否有vip,过滤VIP就可以,确定是否发生主备切换
shell
#1.在备节点书写监控脚本即可
#自定义监控脚本
cat > /server/scripts/check_vip.sh <<'EOF'
#!/bin/bash
##############################################################
# File Name:/server/scripts/check_vip.sh
# Version:V1.0
# Author:csq
# Organization: www.chenshiquan.xyz
# Desc:
##############################################################
#1.vars
vip=$1
#2.过滤
vip_cnt=`ip a | grep -w "${vip}" | wc -l`
#3.判断
if [ $vip_cnt -gt 0 ];then
echo 0
else
echo 1
fi
EOF
#2.添加agent配置文件
cat > /etc/zabbix/zabbix_agentd.d/keepalived.conf <<'EOF'
UserParameter=keepalived.vip[*],sh /server/scripts/check_vip.sh "$1"
EOF
#3.重启agent
systemctl restart zabbix-agent
#4.服务端测试键值对
zabbix_get -s 172.16.1.116 -k keepalived.vip["10.0.0.11"]
##后续
创建监控项、触发器、创建模板、关联负载备节点
监控nginx访问日志和错误日志
-
nginx访问日志(elk)
- ip地址出现次数最近5分钟出现ip次数超过1w的ip
- 状态码及出现的次数
- 200,206,301,302,304,400,401,403,404,405,413,499,500,502,503,504
-
nginx错误日志:failed/denied/error/ 最近5000行
shell
tail -5000 /var/log/nginx/error.log |grep -c -i error
ip地址最近5分钟出现IP次数超过1w的ip
shell
#1.添加客户端agent配置文件(注意客户端zabbix用户要有能看日志的权限才行)
cat >> /etc/zabbix/zabbix_agentd.d/lb.conf <<'EOF'
UserParameter=ip.count.1w,sudo awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | awk '{if($1>=10000)print $1;else print 0}'
EOF
#2.重启agent
systemctl restart zabbix-agent
#3.服务端测试键值
zabbix_get -s 172.16.1.115 -k ip.count.1w
监控访问日志的状态码
shell
#1.编写脚本
cat > /server/scripts/check_ngx_access_log.sh <<'EOF'
#!/bin/bash
#1.vars
Access_files="/var/log/nginx/access.log"
code=$1
#2.case
case "$code" in
200) awk '{print $9}' $Access_files | grep -w "200"|wc -l ;;
206) awk '{print $9}' $Access_files | grep -w "206"|wc -l ;;
301) awk '{print $9}' $Access_files | grep -w "301"|wc -l ;;
302) awk '{print $9}' $Access_files | grep -w "302"|wc -l ;;
304) awk '{print $9}' $Access_files | grep -w "304"|wc -l ;;
400) awk '{print $9}' $Access_files | grep -w "400"|wc -l ;;
401) awk '{print $9}' $Access_files | grep -w "401"|wc -l ;;
403) awk '{print $9}' $Access_files | grep -w "403"|wc -l ;;
404) awk '{print $9}' $Access_files | grep -w "404"|wc -l ;;
405) awk '{print $9}' $Access_files | grep -w "405"|wc -l ;;
413) awk '{print $9}' $Access_files | grep -w "413"|wc -l ;;
500) awk '{print $9}' $Access_files | grep -w "500"|wc -l ;;
502) awk '{print $9}' $Access_files | grep -w "502"|wc -l ;;
503) awk '{print $9}' $Access_files | grep -w "503"|wc -l ;;
504) awk '{print $9}' $Access_files | grep -w "504"|wc -l ;;
*) echo "输入错误"
esac
EOF
#2.添加客户端agent配置文件
cat >> /etc/zabbix/zabbix_agentd.d/lb.conf <<'EOF'
UserParameter=http.status.code[*],sudo bash /server/scripts/check_ngx_access_log.sh "$1"
EOF
#3.重启agent
systemctl restart zabbix-agent
#3.服务端测试键值
zabbix_get -s 172.16.1.115 -k http.status.code["200"]
#可以将2xx和3xx放一个图
#将4xx放一个图
#5xx放一个图
错误日志和secure日志分析
- 注意sudo权限
shell
#精确过滤时间 最近5分钟 最近1小时
#1.输出最近5分钟的日志(要确保开始点要有数据才可以)
start=$(date -d '-5min' +"%Y/%m/%d %H:%M")
sed -n "/$start/,\$p" /var/log/nginx/error.log
#2.书写zabbix agent子配置文件
# 统计Nginx错误日志近1000行的异常关键词数(推荐使用)
cat >> /etc/zabbix/zabbix_agentd.d/lb.conf <<'EOF'
UserParameter=check.ngx.error,sudo tail -n1000 /var/log/nginx/error.log | egrep -i 'error|failed|denied' | wc -l
EOF
# 统计secure日志近1000行的暴力破解登录尝试数
UserParameter=check.error.login,sudo tail -n1000 /var/log/secure | egrep -i 'failed password' | wc -l
网络tcp/ip监控
shell
#1.书写脚本
cat > /server/scripts/net_stat.sh <<'EOF'
#!/bin/bash
#1.vars
code=$1
#2.case
case "$code" in
listen) ss -ant |grep -i listen |wc -l ;;
estab) ss -ant |grep -i estab |wc -l ;;
time-wait) ss -ant |grep -i time-wait |wc -l ;;
close-wait) ss -ant |grep -i close-wait |wc -l ;;
fin-wait1) ss -ant |grep -i fin-wait1 |wc -l ;;
fin-wait2) ss -ant |grep -i fin-wait2 |wc -l ;;
closing) ss -ant |grep -i closing |wc -l ;;
last-ack) ss -ant |grep -i last-ack |wc -l ;;
syn-sent) ss -ant |grep -i syn-sent |wc -l ;;
*) echo "输入错误"
esac
EOF
#2.书写zabbix agent子配置文件
cat >> /etc/zabbix/zabbix_agentd.d/lb.conf <<'EOF'
UserParameter=net.status[*],sudo bash /server/scripts/net_stat.sh "$1"
EOF
#3.重启agent
systemctl restart zabbix-agent
#4.服务端测试键值
zabbix_get -s 172.16.1.115 -k net.status["estab"]
web监控
shell
应用:代码,war,jar包
服务:nginx,php,tomcat,jar
系统:模板+自定义
| 监控内容 | 详细内容 | 具体实现落地 |
|---|---|---|
| 5 API 接口监控 | 监控指定 API 接口(如 zbx api),含内部接口、外部第三方接口 | curl 命令、web 场景 / 监测 |
| 4 业务、应用、app 监控 | 检查应用可用性,通过测试代码页面(如 info.php、mysqli.php)验证应用状态 | curl 命令、web 场景 / 监测 |
| 3 服务监控 | 1. 基础项:进程、端口 2. 专有项:各服务的专属状态3. 日志项:错误日志近 2000 行中的异常关键词(error/failed/exception) | 模板或根据具体要求自定义监控 |
| 2 系统监控 | 资源类:CPU、负载、内存、磁盘、网络、带宽、IO安全类:关键文件变化(aide)、进程、僵尸进程、非堡垒机登录 | 模板 + 自定义(覆盖僵尸进程、异地登录、aide 校验、secure 日志等场景) |
| 1 硬件监控 | 物理服务器专属项:温度、风扇转速、RAID 状态 | Linux 命令(ipmitool/megacli 查询 RAID) |
服务层
监控php状态
shell
#1.修改nginx配置文件 设置php状态页面
cat > /etc/nginx/conf.d/default.conf <<'EOF'
server {
listen 80 default_server;
server_name status.chenshiquan.xyz;
location /status {
stub_status;
}
location /php-status {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location /php-ping {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
EOF
#2.设置php的配置文件
egrep 'pm.status|ping' /etc/php-fpm.d/www.conf
pm.status_path = /php-status #通过该路径可获取 PHP-FPM 的实时运行数据(如进程数、请求量、慢请求等)
ping.path = /php-ping #定义 PHP-FPM 的「健康检查(存活检测)」路径
ping.response = pong #设置访问 ping.path 时,PHP-FPM 返回的响应内容(相当于「心跳包」的返回值)
#3.生效php配置文件
systemctl restart php-fpm
- 主机添加php模板

- 修改模板宏定义

- 检查php的模块监控项是否有报错,有报错修改过滤的正则表达式
应用或业务监控web场景监控
(1)监控php是否正常
shell
#1.在站点目录下编写php状态页面
cat > /app/code/test/test_info.php <<'EOF'
<?php
phpinfo();
?>
EOF
#2.修改站点文件
server {
listen 80 default_server;
server_name status.chenshiquan.xyz;
location / {
root /app/code/test;
index index.php;
}
location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
浏览器查看

(2)测试php能否连接数据库
shell
#1.在站点目录下编写php是否能连接数据库的状态页面(编译安装要在php.ini 添加mysql socket )
cat > /app/code/test/test_php_db.php <<'EOF'
<?php
//数据库地址
$db_host='127.0.0.1';
//数据库用户名
$db_user='root';
$db_pass='Abc@1234';
$link_id=mysqli_connect($db_host,$db_user,$db_pass);
if($link_id){
echo "mysql successful!\n";
}else{
echo "connection failed!\n";
}
?>
EOF
浏览器访问

(3)zabbix web页面对应主机的web监测
- 选择对应主机的web监测

- 创建web场景

- 配置web场景



- 点击监测->主机->查看对应主机的web监测->查看状态


- 查看图形

- web场景相当于监控项,如果添加触发器
shell
last(/web01/web.test.fail[web场景名字]) <>0
web.test.fail 该监控项将显示场景中失败的步骤数。失败则非0,如果所有步骤都成功执行,则返回0

(4)tomcat、jetty、jboss和jar包监控(推荐自定义监控)
之前文章有写
API监控
官方API参考文档:https://www.zabbix.com/documentation/7.0/zh/manual/api/reference
shell
使用web场景实现
应用或业务API
服务API接口 /check /health
- 监控zabbix api接口是否可用
- 添加web场景流程与上面监控test_info.php流程一致
- 区别在于添加api接口的时候不能只看状态码,应该看返回结果的内容,这里过滤Zabbix Server
(1)监控zabbix api接口是否可用
为什么监控Zabbix API:因为grafana 通过前端web API接口访问zabbix数据库内容,让后再返回grafana渲染dashboard
1.获取API令牌


shell
#1.记录好令牌
39024847a3c66ba498a6beced2939e71f9278d143f9b14a061f376ffde087849
s
#2.测试 批量获取主机的核心信息(主机 ID、主机名、接口 ID、IP 地址)
curl -X POST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [
"hostid",
"host"
],
"selectInterfaces": [
"interfaceid",
"ip"
]
},
"id": 2,
"auth": "39024847a3c66ba498a6beced2939e71f9278d143f9b14a061f376ffde087849"
}' http://10.0.0.118/api_jsonrpc.php
2.创建zabbix server web监测,监测zabbix api接口是否正常


查看zabbix server web监测是否正常

缓存(Redis监控)
- redis监控模板
- 监控redis运行、端口、进程
- 命中率
- 占用内存
- Redis by Zabbix agent2(需要agent2)
shell
#1.安装redis
yum install -y redis
#2.修改配置
[root@db01 ~]# egrep '^bind|^protected' /etc/redis.conf
bind 127.0.0.1 -::1 172.16.1.114
protected-mode no
#3.启动redis
systemctl enable --now redis
配置模板

数据库监控
- mysql
- zabbix自带模板
- 第3方模板 pt percona tools
- pmm数据库监控专用
存储
- NFS是否可用
- 本地进行临时挂载
- 本地写入数据
- 检查是否可以写入
- 卸载
- 其他存储调用对应的模板即可
- 检查空间
Docker监控
从zabbix6.0也有docker监控的模板了
使用官方模板即可