🌟你用zabbix都监控了什么?
- 2个维度监控
- 第1个维度:用户访问流程维度(数据流/业务流)
- 第2个维度:某个层次上/某个服务上具体监控的内容:模板+自定义监控
- 物理层监控(风扇,温度,raid)
- 系统层监控(cpu,内存,磁盘网络,负载…用户,软件包)
- 服务监控(nginx,php,java,tomcat,db…)
- 代码/业务监控(web场景监控,curl/wget)
- API接口监控
🖥️任何一台机器(从下到上)
监控内容 | 详细内容 | 具体实现落地 |
---|---|---|
API接口监控 | 监控指定的api接口,比如zabbix api,开发提供(内部接口,外部第三方接口) | curl命令、web场景/监测 |
业务、应用、app监控 | 检查应用是否可用,书写测试代码页面 类似于info.php,mysqli.php |
curl命令、web场景/监测 |
服务监控 | 基本:进程,端口 专有:服务的状态,不同服务不同 |
模板或根据具体要求自定义监控 |
系统监控 | cpu,负载,内存,磁盘,网络,带宽,io,关键文件是否变化(aide),进程,僵尸进程,是否有非堡垒机登录 | 模板+自定义(僵尸进程,用户异地登录,堡垒机登录,aide,hm,日志secure) |
硬件监控 | 如果是物理服务器则需要监控:温度,风扇转速,raid状态 | zabbix自带:ipmi/自定义监控 Linux命令:(ipmitool/megacli) |
🎯按照访问顺序监控(一层一层)
监控内容 | 详细内容 | 具体实现落地 |
---|---|---|
DNS | 解析是否OK | 自定义监控-ping/dig/lookup/… 域名:whois zhubl.xyz过滤是否过期 证书:curl -Lsv www.zhubl.xyz -o /dev/null 过滤expire data 过期openssl命令检查 |
CDN | 是否可用,命中率,带宽,流量 | 登录对应cdn页面检查:命中率,流量,带宽 分布式ping: 商业:监控宝,听云 免费网站:www.17ce.com,ping,chinaz.com 开源软件:smokeping |
防火墙和网络设备 | 监控流量,带宽,端口 | snmp协议 |
负载 | nginx服务情况,证书过期,网站访问量,并发 | nginx/haproxy/keepalived状态:模板 证书:模板、自定义监控 网站访问量(运营):ip,pv,uv(网站第三方插件实现百度统计),自建matomo(php piwiki) 并发:统计80,443端口连接数(已经连接) 负载均衡健康检查模式 upstream_check 自定义监控访问日志(状态码),错误日志(error,failed数量) 服务:nginx,keepalived(vip数量,备节点是否有vip) |
web | 主要监控服务情况 | 具体服务使用对应模板即可 nginx php tomcat(war)/jar包-自定义监控 |
数据库 | redir,mysql | 模板即可,写入内容,读取写入的内容 |
存储 | nfs | 自定义监控,存储目前多少空间,能否使用,模拟挂载,创建文件检查结果。 |
备份 | 备份的数据量 | 自定义监控,系统是否有备份,发送邮件…占用多少空间 |
核心:
按照用户访问流程,运维角度,开发角度,按照顺序逐个进行监控
辅助每个节点,硬件监控(如果有),系统监控(必需),服务监控(如果有),业务监控(如果有),api监控(如果有)
🌟监控域名
🔍监控域名dns解析是否正常
自定义监控放在负载均衡节点(任何1个)
域名DNS是否可用,nslookup,xxx命令查看解析
域名过期,输出剩余时间(天)
WEB或调取API接口查看,DNS查询数量(阿里云DNS)
分布式测试ping,dns,cdn
https://ping.chinaz.com/www.zhubl.xyz
- 阿里云cms中的一次性拨测和定时拨测
- 全国或全世界用户访问网站的速度(分布式网站速度http,dns解析测试)
- 第3方免费网站:ping.chinaz.com,17ce.com,…
- 第3放收费免费使用:监控包https://www.jiankongbao.com/
- 阿里云拨测工具于站点监控(定时拨测)
- 自己搭建:全国各地服务器+smokeping
自定义监控项
- 编写监控脚本
vim /server/scripts/check_dns.sh
#!/bin/bash
##############################################################
# File Name:/server/scripts/check_dns.sh
# Version:V1.0
# Author:zbl
# Organization:zhubaolin.blog.csdn.net
# Desc:
##############################################################
#1.vars
url=$1
#2.检查nslookup命令是否存在
which nslookup &>/dev/null
if [ $? -ne 0 ];then
echo "nslookup命令不存在,正在安装软件包......"
yum install -y bind-utils &>/dev/null
fi
#3.检查
if nslookup $url &>/dev/null;then
echo "1"
else
echo "0"
fi
- 修改zabbix子配置文件
vim /etc/zabbix/zabbix_agent2.d/dns.conf
UserParameter=check.dns[*],sh /server/scripts/check_dns.sh "$1"
- 重启zabbix_agent2服务
systemctl restart zabbix-agent2.service
- 客户端测试
zabbix_agent2 -t check.dns[zhubl.xyz]
- 服务端测试
zabbix_get -s 172.16.1.5 -k check.dns[baidu.com]
web页面添加监控项
web页面添加触发器
web页面查看最新数据
🔍监控域名是否过期
自定义监控项
- 编写监控脚本
[root@lb01 ~]# cat /server/scripts/check_https_expire.sh
#!/bin/bash
##############################################################
# File Name:/server/scripts/check_https_expire.sh
# Version:V1.0
# Author:zbl
# Organization:zhubaolin.blog.csdn.net
# Desc:
##############################################################
#1.function
#检查域名过期
function check_domain() {
local expire_date=`whois $url |egrep "Expiry|Expiration" |awk -F ": " '{print $2}'`
local exprire_date_second=`date -d "${expire_date}" +%s`
local date_second_now=`date +%s`
local date_expire_days=`echo "(${exprire_date_second} - ${date_second_now} )/60/60/24" |bc`
echo "$date_expire_days"
}
#检查证书过期
function check_https() {
#这里还可以加入curl判断.
local expire_date=`curl -v https://www.$url |& grep expire |awk -F ": |GMT" '{print $2}'`
local exprire_date_second=`date -d "${expire_date}" +%s`
local date_second_now=`date +%s`
local date_expire_days=`echo "(${exprire_date_second} - ${date_second_now} )/60/60/24" |bc`
echo "$date_expire_days"
}
#main
function main() {
choice=$1
url=$2
case "$choice" in
domain)
check_domain ;;
https)
check_https ;;
esac
}
main $*
- 修改zabbix_agent2子配置文件
vim /etc/zabbix/zabbix_agent2.d/dns.conf
UserParameter=check.domain_https[*],sudo /bin/bash /server/scripts/check_https_expire.sh "$1" "$2"
注意执行脚本需要使用sudo,否则会报错
- 客户端测试
zabbix_agent2 -t check.domain_https[domain,zhubl.xyz]
zabbix_agent2 -t check.domain_https[https,zhubl.xyz]
- 服务端测试
zabbix_get -s 172.16.1.5 -k check.domain_https[domain,zhubl.xyz]
zabbix_get -s 172.16.1.5 -k check.domain_https[https,zhubl.xyz]
web页面添加监控项
web页面添加触发器
web页面查看最新数据
🌟监控CDN
- 每日带宽,web页面或api监控
- 每日流量,web页面或api监控
- CDN命中率,不低于90%,web页面或api监控
- 检查分析日志 miss 2xx/3xx分析
- 监控宝
🌟监控防火墙 waf 日志
- POST请求 uri异常 200
- 蜜罐
- iptables直接看规则即可,开启或关闭
- 共有云防火墙查看规则即可
- 硬件防火墙通过snmp监控即可
🌟监控负载均衡
监控内容 | 详细内容 | 具体实现落地 |
---|---|---|
服务 | nginx,haproxy,lvs,keepalived | 模板: 状态码,并发(ss -ant),每种状态数量,端口,进程 日志:访问日志,错误日志 |
系统 | cpu,内存,磁盘,网络,io读写,进程,登录用户数,运行时间 | zabbix-agent模板+自定义监控(僵尸进程数量,挂起进程数,文件是否发生变化aide --check,用户是否来自堡垒机) |
硬件 | ipmi监控硬件信息 | megacli,ipmitool 自定义监控项/相关项 |
🔍监控tengine服务
安装tengine
- 修改nginx配置文件
vim /etc/nginx/conf.d/default.conf
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;
}
}
- 重启nginx服务
nginx -t
systemctl restart nginx
zabbix服务端测试
zabbix_get -s 172.16.1.5 -k web.page.get["localhost","status","80"]
status指令结果说明 | 说明 | 备注 |
---|---|---|
Active connections | 已经建立连接的数量. 4层 实时数据 | 当前网站并发访问数量 |
accepts | 总数(持续增加),nginx已经接收了多少个3次握手请求 | 绝大部分情况accepts与handlers一致类似 |
handled | 总数(持续增加),nginx已经处理的请求数量 | |
requests | 总数(持续增加),nginx已经收到了多少http请求 | 数量比accepts数量多.(连接建立后,连接可以重复使用) |
Reading | 实时数据.正在读取客户端请求(头,主体)数量 | |
Writing | 实时数据.正在返回客户端响应(头,主体)数量 | |
Waiting | 实时数据.空闲的连接数量.(3次握手建立连接,发出http请求,连接保留,此时没有请求使用连接) |
web页面创建模板
- 复制nginx的监控模板
- 修改模板
正则表达式匹配需要值
Server: Tengine/(.*)
server accepts handled requests request_time\s+([0-9]+) ([0-9]+) ([0-9]+) ([0-9]+)
Reading: ([0-9]+) Writing: ([0-9]+) Waiting: ([0-9]+)
var a = value.match(/server accepts handled requests request_time\s+([0-9]+) ([0-9]+) ([0-9]+) ([0-9]+)/)
if (a) {
return a[1]-a[2]
}
修改监控项中的相关项
主机关联tengine模板
查看最新数据
🔍监控考试系统负载均衡各web站点情况
自定义监控项
nginx负载均衡自定义监控 开启负载均衡监控检查模块upstream check
编译安装nginx
默认没有关联的模板
监控项:有多少个节点,有多少个分组,每个分组里面的节点状态
编写nginx配置文件
vim /etc/nginx/conf.d/exam.conf
upstream l7_pools {
server 10.0.0.7:80;
server 10.0.0.8:80;
hash $remote_addr consistent;
check interval=3000 rise=2 fall=5 timeout=1000 type=http;
check_http_send "HEAD /index.html HTTP/1.0\r\nHost:student.zhubl.xyz\r\nUser-Agent: lb_check\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
server {
listen 80;
server_name admin.zhubl.xyz;
error_log /var/log/nginx/admin-error.log notice;
access_log /var/log/nginx/admin-access.log main;
location / {
proxy_pass http://l7_pools;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-Ip $remote_addr;
}
}
server {
listen 80;
server_name student.zhubl.xyz;
error_log /var/log/nginx/student-error.log notice;
access_log /var/log/nginx/student-access.log main;
location / {
proxy_pass http://l7_pools;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-Ip $remote_addr;
}
location /lb_status {
check_status;
access_log off;
#allow
#deny
}
}
- 命令行测试
curl -s -H Host:student.zhubl.xyz localhost/lb_status?format=csv
curl -s -H Host:student.zhubl.xyz localhost/lb_status?format=csv | grep -wi up | wc -l
- 编写脚本
#!/bin/bash
##############################################################
# File Name:/server/scripts/check_lb_pools.sh
# Version:V1.0
# Author:zbl
# Organization:zhubaolin.blog.csdn.net
# Desc:
##############################################################
#1.vars
url=$1
#2.统计负载均衡后端服务器在线的数量
total=`curl -s -H Host:${url} localhost/lb_status?format=csv |wc -l`
up=`curl -s -H Host:${url} localhost/lb_status?format=csv |grep -wi up |wc -l`
#3.统计负载均衡后端服务器在线百分比
echo "scale=2; $up / $total * 100" |bc -l
- 修改zabbix_agent2子配置文件
vim /etc/zabbix/zabbix_agent2.d/lb.conf
UserParameter=check.lb[*],/bin/bash /server/scripts/check_lb_pools.sh "$1"
- 重启zabbix_agent2服务
systemctl restart zabbix-agent2.service
- 客户端测试
zabbix_agent2 -t check.lb[student.zhubl.xyz]
- 服务端测试
zabbix_get -s 172.16.1.5 -k check.lb[student.zhubl.xyz]
web页面添加监控项
web页面添加触发器
web页面查看最新数据
🔍监控keepalived服务
- 监控keepalived是否切换
- 监控项:过滤keepalived是否有进程
- 监控项:是否有vip,过滤VIP,确定是否发生了主备切换
自定义监控项
- 备节点书写监控脚本
vim /server/scripts/chk_vip.sh
#!/bin/bash
##############################################################
# File Name:/server/scripts/chk_vip.sh
# Version:V1.0
# Author:zbl
# Organization:zhubaolin.blog.csdn.net
# Desc:
##############################################################
#1.vars
vip=$1
#2.过滤
vip_cnt=`ip a |grep -w "${vip}" |wc -l`
#3.判断
if [ $vip_cnt -gt 0 ];then
echo 1
else
echo 0
fi
- 编写zabbix_agent2子配置文件
UserParameter=keepalived.vip[*],/bin/bash /server/scripts/chk_vip.sh "$1"
- 重启zabbix_agent2服务
systemctl restart zabbix-agent2.service
- 客户端测试
zabbix_agent2 -t keepalived.vip[10.0.0.3]
- 服务端测试
zabbix_get -s 172.16.1.5 -k keepalived.vip[10.0.0.3]
web页面添加监控项
web页面添加触发器
web页面查看最新数据
🔍监控访问日志
- nginx访问日志(elk服务)
- ip地址出现次数
- 状态码及出现的次数
自定义监控项
- 编写脚本(统计状态码数量)
vim /server/scripts/check_ngx_access_log.sh
#!/bin/bash
##############################################################
# File Name:/server/scripts/check_ngx_access_log.sh
# Version:V1.0
# Author:zbl
# Organization:zhubaolin.blog.csdn.net
# Desc:
##############################################################
#1.vars
access_files="/var/log/nginx/student-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;;
esac
- 修改zabbix_agent2配置文件
UserParameter=nginx.log.status[*],sudo /bin/bash /server/scripts/check_ngx_access_log.sh "$1"
- 重启zabbix_agent2服务
systemctl restart zabbix-agent2.service
- 客户端测试
zabbix_agent2 -t nginx.log.status[200]
- 服务端测试
zabbix_get -s 172.16.1.5 -k nginx.log.status[200]
web页面添加监控项
web页面添加触发器
web页面配置图形
🔍监控错误日志
- nginx错误日志:faild/denied/error/最近5000行
tail -5000 /var/log/nginx/error.log|grep -c -i error
- 监控系统日志secure日志是否有大量的Failed password/failure
自定义监控项
- 命令行测试
start=`date +%Y\/%m\/%d" "%H:%M -d "-1min"`
echo $start
2025/07/24 21:07
start=`date +"%Y\/%m\/%d %H:%M" -d "-1min"`
echo $start
2024\/07\/26 11:37
# 输出最近1分钟的错误日志
sed -n "/${start}/,\$p" /var/log/nginx/error.log
- 统计错误日志中最近1000行有多少error
UserParameter=check.ngx.error,sudo tail -n1000 /var/log/nginx/error.log |egrep -i 'error|failed|denied'|wc -l
- 分析安全日志系统是否有异常登录(暴力破解)
UserParameter=check.error.login,sudo tail -n1000 /var/log/secure |egrep -i 'fail'|wc -l
- 重启zabbix_agent2服务
systemctl restart zabbix-agent2.service
- 客户端测试
zabbix_agent2 -t check.ngx.error
zabbix_agent2 -t check.error.login
- 服务端测试
zabbix_get -s 172.16.1.5 -k check.ngx.error
zabbix_get -s 172.16.1.5 -k check.error.login
web页面添加监控项
🔍监控网络TCP/IP
自定义监控项
- 修改zabbix_agent2子配置文件
#并发数
UserParameter=net.tcp.estab,sudo ss -ant | grep -i estab | wc -l
#将要断开连接的数量
UserParameter=net.tcp.wait,sudo ss -ant | grep -i wait | wc -l
- 重启zabbix_agent2服务
systemctl restart zabbix-agent2.service
- 客户端测试
zabbix_agent2 -t net.tcp.estab
- 服务端测试
zabbix_get -s 172.16.1.5 -k net.tcp.estab
zabbix_get -s 172.16.1.5 -k net.tcp.wait
web页面添加监控项
添加触发器
✅监控负载均衡小结
层次 | 监控内容 |
---|---|
API层监控 | 无 |
应用层监控 | 无 |
服务层监控 | 使用服务对应的模板stub_status 自定义监控负载均衡状态upstream_check check_status keepalived监控是否主备切换 |
系统层监控 | 系统基本指标:使用模板linux by agent + 僵尸进程,是否堡垒机登录,是否同时同步 安全指标:自定义监控,aide,hm结果 日志监控:系统日志,服务日志,过滤错误信息,登录失败信息,访问情况 |
物理层监控 | ipmi或megacli ipmitools |
🌟监控web
应用:代码,war,jar包
服务:nginx,php,tomcat,jar
系统:模板+自定义
层次 | 监控内容 |
---|---|
API层监控 | 无 |
应用层监控 | 书写专用页面(测试业务是否可用,php,jsp) |
服务层监控 | nginx使用服务对应的模板 stub_status php tomcat或java jar相关项监控 |
系统层监控 | 系统基本指标:使用模板linux by agent (active)+僵尸进程,是否堡垒机登录,是否同时同步 安全指标:自定义监控,aide,hm结果 日志监控:系统日志,服务日志,过滤错误信息,登录失败信息,访问情况 |
物理层监控 | ipmi或megacli ipmitools |
🔍监控nginx服务(应用层监控)
准备测试页面
#测试页面
cd /app/code/blog/
echo 'blog' > chk_ngx.html
cat >chk_php.php<<'EOF'
<?php
phpinfo();
?>
EOF
cat >chk_db.php<<'EOF'
<?php
//数据库地址
$db_host='172.16.1.51';
//数据库用户名
$db_user='blog';
$db_pass='blog';
//数据库名字
$db_name="blog";
$link_id=mysqli_connect($db_host,$db_user,$db_pass,$db_name);
if($link_id){
echo "mysql successful \n" ;
}
else{
echo "connection failed!\n" ;
}
?>
EOF
web页面添加web场景监控
注意:由于zabbix是在容器中,没有做Host解析,需要填写Host头
- 检查nginx状态
- 检查nginx-php状态
- 检查php-db状态
写完步骤后记得点击添加按钮
查看最新数据
添加触发器
last(/web01-172.16.1.7/web.test.fail[监控blog业务是否正常])<>0
web.test.fail 该监控项将显示场景中失败的步骤数。如果所有步骤都成功执行,则返回 0
查看仪表盘
关闭数据库,测试触发器
🔍监控php服务
修改nginx配置文件
vim /etc/nginx/conf.d/default.conf
server {
listen 80 default_server;
server_name status.zhubl.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;
}
}
修改php配置文件
vim /etc/php/8.1/fpm/pool.d/www.conf
重启nginx和php服务
docker restart blog
命令行测试
curl 10.0.0.7/php_status
zabbix客户端测试
zabbix_agent2 -t web.page.get["localhost","php_status","80"]
zabbix服务端测试
zabbix_get -s 172.16.1.7 -k web.page.get["localhost","php_status","80"]
web页面修改php模板
主机关联模板
查看最新数据
🌟java-gateway监控
- 开启远程监控功能
- zabbix服务端部署java gateway配置
- 添加主机关联模板
🎯zabbix客户端开启远程监控功能
- 修改启动脚本(jar包)
#!/bin/bash
##############################################################
# File Name:entry.sh
# Version:V1.0
# Author:zbl
# Organization:zhubaolin.blog.csdn.net
# Desc:
##############################################################
java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=172.16.1.9 -Duser.timezone=Asia/Shanghai -jar -Dspring.profiles.active=prod xzs-3.9.0.jar
- 修改启动脚本bin/catalina.sh(tomcat)124行后添加
CATALINA_OPTS="$CATALINA_OPTS \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=12345 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Djava.rmi.server.hostname=172.16.1.9"
- 修改Dockerfile文件
- 修改docker-compose
- 运行docker-compose
🍀docker运行gateway
- 导入java-gateway镜像
docker load -i zbx-java-gatway-7.0.9.tar
- 修改docker-compose文件
ZBX_JAVAGATEWAY_ENABLE: true
ZBX_JAVAGATEWAY: zbx_java_gateway
ZBX_JAVAGATEWAYPORT: 10052
zbx_java_gateway:
image: zabbix/zabbix-java-gateway:7.0.9-ubuntu
container_name: zabbix-java-gateway-7.0
networks:
- oldboy_zbx_net
restart: always
ports:
- 10052:10052
depends_on:
- zbx_server
- 启动docker-compose
🌏web页面添加java jmx监控模板