zabbix 配置基础监控
本文介绍如何配置 zabbix 的一些基础监控,包括如何监控网站的存活、端口的存活、页面返回值等。
[TOC]
1. 快速搭建 zabbix
- 利用 docker 快速部署 zabbix,示例 服务端为
192.168.31.101
#.配置DNS和时区
cat /etc/resolv.conf | grep "^nameserver" || echo "nameserver 223.5.5.5" > /etc/resolv.conf
timedatectl set-timezone Asia/Shanghai
#.安装 docker
curl -sL 'http://iso.sqlfans.cn/docker/install_docker_2401.sh' | bash
curl -sL 'http://iso.sqlfans.cn/docker/install_docker_compose_2181.sh' | bash
docker-compose --version
#.配置 docker 加速
mkdir -p /etc/docker
curl http://iso.sqlfans.cn/config/docker/daemon.202504.json > /etc/docker/daemon.json
systemctl daemon-reload
systemctl restart docker
#.部署 zabbix 6.4-latest
mkdir -p /data/docker/{zabbix-server,zabbix-web,zabbix-mysql/var}
curl -sL http://iso.sqlfans.cn/docker/yml/docker-zabbix64.yml -o /data/docker/docker-zabbix.yml
docker-compose -f /data/docker/docker-zabbix.yml up -d
netstat -lnpt | grep "0.0.0.0:" | egrep "(3306|10050|10051|80)"
#.登录 zabbix 控制台
地址:http://192.168.31.101
账密:Admin / zabbix
2. 借助 http 状态码监控网站存活
- HTTP状态码(HTTP Status Code)是服务器返回给客户端的,其核心作用是 web 服务器来告诉客户端,当前网页发生的什么事,或者说当前 web 服务器的响应状态。所以HTTP状态码常用来判断和分析当前 web 服务器的运行状况。下面是常见的 HTTP 状态码:
| 状态码 | 类别 | 分类描述 | 常见的http状态码 |
|---|---|---|---|
| 1xx | Information(信息) | 接受的请求正在处理 | - |
| 2xx | Success(成功) | 请求正常处理完毕 | 200-请求成功 |
| 3xx | Redirection(重定向) | 需要进行附加操作以完成请求 | 301-资源被永久转移到其他url |
| 4xx | Client Error(客户端错误) | 服务器无法处理请求 | 404-请求的资源不存在 |
| 5xx | Server Error(服务端错误) | 服务器处理请求出错 | 500-内部服务器错误 |
- 第1步,点击“创建主机”,可以针对某个一级域名添加一台主机,示例
sqlfans.cn
注:由于监控的是 http 状态码,所以不需安装zabbix客户端,也不需要添加接口
- 第2步,针对特定主机,选择“Web检测”
- 第3步,点击“创建web场景”,在【步骤】标签页,填写名称、更新间隔、尝试次数、Agent等
- 第4步,在【步骤】标签页,填写名称、URL、超时、要求的状态码等,然后点击“添加”
注:可以添加多个二级域名,示例
wiki.sqlfans.cn及www.sqlfans.cn
- 第5步,点击“创建触发器”,在【触发器】标签页,配置名称、严重性、问题表现形式、恢复表达式等,选择“添加”
注:问题表现形式 last(/<主机名称>/web.test.rspcode[<主机名称,站点名称>])<>200 表示当状态码不等于 200 时触发告警
- 第6步,可以针对多个域名配置多个触发器(示例
wiki.sqlfans.cn及www.sqlfans.cn)
- 第7步,点击“创建图表”,填写配置名称、监控项等,选择“添加”
- 第8步,查看监控曲线,确认检测到异常(示例重启站点导致状态码 200 -> 404 -> 200):
3. 借助健康检查页的返回值监控服务
- 常见的中间件默认都会提供一个健康检查接口,用于标识服务状态,我们可以通过监控健康检查页的返回值来判断服务是否异常,以下是常见的健康检查接口:
| 服务名称 | 健康检查页 | 方法 | 检查策略 |
|---|---|---|---|
| nacos | http://{ip}:8848/nacos/actuator/health |
GET | 返回值包含DOWN则为异常 |
| minio | http://{ip}:9000/minio/health/live |
GET | HTTP状态值非200则为异常 |
| xxl-job | http://{ip}:7777/xxl-job-admin/actuator/health |
GET | 返回值包含DOWN则为异常 |
- 第1步,登录中间件服务器(示例
192.168.31.102),模拟接口正常
#.模拟接口正常
echo '{"status":"UP","message":"ok"}' > /usr/local/nginx/html/healthcheck.html
#.查看健康检查页的返回值
curl http://192.168.31.102/healthcheck.html
- 第2步,点击“创建主机”,示例 api_healthcheck
- 第3步,针对特定主机,选择“Web检测”
- 第4步,点击“创建web场景”,示例 health_status
- 第5步,在【步骤】标签页,填写名称、URL、超时、要求的字串、要求的状态码等,然后点击“添加”
注:这里的参数 要求的字串 是基于
http://192.168.31.102/healthcheck.html的返回格式
- 第6步,点击“监控项”,示例 item_nacos_health_status、键值 api.health.status
- 第7步,在【预处理】标签页,示例 名称 JSONPath、参数 $.status,选择“添加”
注:这里的参数 $.status 是基于
http://192.168.31.102/healthcheck.html的返回格式
- 第8步,点击“创建触发器”,示例 nacos_is_down,其中“监控项”选择 item_nacos_health_status
注:问题表现形式 last(/<主机名称>/api.health.status)<>"UP" 表示当健康检查页面返回值的status不等于 UP 时触发告警
- 第9步,点击“创建图表”,示例 nacos、监控项
api_healthcheck: Failed step of scenario "health_status".
- 第10步,登录中间件服务器(示例
192.168.31.102),模拟接口异常
#.模拟接口异常
echo '{"status":"DOWN","message":"timeout"}' > /usr/local/nginx/html/healthcheck.html
- 第11步,查看监控曲线,确认检测到异常
4. 监控服务器端口
- 第1步,登录要监控的服务器,安装 agent 客户端,示例
192.168.31.102
#.先临时关闭防火墙
iptables -F
#.安装:在agent端执行,第1个ip是zabbix_server地址,第2个是zabbix_agent地址
cd /opt
wget -c http://iso.sqlfans.cn/linux/zabbix/zabbix_agents_3.0.0.linux2_6_23.amd64.tar.gz
wget -c http://iso.sqlfans.cn/linux/zabbix/install_zabbix_agent_300.sh
sh install_zabbix_agent_300.sh 192.168.31.101 192.168.31.102
#.查看配置文件
cat /usr/local/zabbix_agent/conf/zabbix_agentd.conf
- 第2步,在 server 端:测试一下 zabbix 连通性
docker exec -it zabbix-server /bin/bash -c 'zabbix_get -s192.168.31.102 -p10050 -k"system.uptime"'
- 第3步,创建主机,示例
192.168.31.102
- 第4步,在“主机”详情页面,可以点击“监控项 / 监控项 / 图形”进行创建
- 第5步,创建监控项,示例名称 http_tcp_80、键值 net.tcp.port[,80]、更新间隔 1m
注:若要监控 UDP 端口,键值请改为
net.udp.port[,<端口号>]
- 第6步,创建触发器,示例名称 tcp_80_is_down
注:问题表现形式 last(/<主机名称>/net.tcp.port[,80])=0 表示当端口不可用时触发告警
- 第7步,创建图表,示例名称 monitoring_http_tcp_80、监控项关联上面创建的 http_tcp_80
- 第8步,登录中间件服务器(示例
192.168.31.102),将监听 tcp 80 端口的 nginx 服务停掉,模拟端口异常
#.模拟端口异常
/usr/local/nginx/sbin/nginx -s stop
- 第9步,查看监控曲线,确认检测到异常






















