一、安装zabbix
1.1.安装zabbix-server服务端
使用官网docker compose创建
github获取: zabbix/zabbix-docker: Official Zabbix Dockerfiles
git clone https://github.com/zabbix/zabbix-docker.git
选择compose,我这里选docker-compose_v3_ubuntu_mysql_latest
修改数据库密码
file: zabbix-docker-7.2.6\env_vars/MYSQL_PASSWORD
file: zabbix-docker-7.2.6\env_vars/.MYSQL_ROOT_USER
file: zabbix-docker-7.2.6\env_vars/.MYSQL_ROOT_PASSWORD
启动容器
docker-compose -f ./docker-compose_v3_ubuntu_mysql_latest.yaml up -d
开放端口,访问测试
sudo ufw allow 10051/tcp
sudo ufw allow 80/tcp
sudo ufw reload
sudo ufw status
http://你的zabbix-server的ip:80
- 默认账号:
Admin
- 默认密码:
zabbix
设置中文
Administration–>General–>Default language: 修改为Chinese (zh_CN)
,点击Update
1.2.安装zabbix-agent客户端
docker创建客户端
# ========== 1. 开放端口 ==========
sudo ufw allow 10050/tcp
sudo ufw reload
sudo ufw status
# ========== 2. 创建运行时目录 ==========
sudo mkdir -p /var/lib/zabbix/run /var/log/zabbix /etc/zabbix
sudo chown -R 1997:1997 /var/lib/zabbix /var/log/zabbix /etc/zabbix
sudo chmod 0755 /var/lib/zabbix/run /var/log/zabbix /etc/zabbix
# ========== 3. 生成PSK密钥(如果需要TLS) ==========
# 如果需要TLS则执行以下命令:
sudo sh -c 'openssl rand -hex 32 > /etc/zabbix/zabbix_agent.psk'
sudo chmod 644 /etc/zabbix/zabbix_agent.psk
# ========== 4. 生成配置文件 ==========
cat <<EOF | sudo tee /etc/zabbix/zabbix_agentd.conf
### 全局配置 ###
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
# 修改为文件日志
LogType=file
LogFileSize=50
DebugLevel=3
### 连接配置 ###
Server=zabbix_server_ip修改你的服务器ip
ServerActive=zabbix_server_ip修改你的服务器ip
Hostname=hostname:修改客户端的hostname
### 高级参数 ###
StartAgents=3
Timeout=30
EnableRemoteCommands=0
AllowRoot=0
Include=/etc/zabbix/zabbix_agentd.d/*.conf
### TLS/PSK加密配置 ###
TLSConnect=psk
TLSAccept=psk
TLSPSKIdentity=zabbix_psk_identity修改身份标识,如prod_agent_host4
TLSPSKFile=/etc/zabbix/zabbix_agent.psk
EOF
# ========== 5. 启动容器 ==========
sudo docker run -d \
--name zabbix-agent \
--network host \
-e ZBX_SERVER_HOST="ZABBIX_SERVER_IP" \ # 替换实际IP
-e ZBX_HOSTNAME="$(hostname -f)" \ # 或自定义主机名
-e ZBX_TLSCONNECT=psk \
-e ZBX_TLSACCEPT=psk \
-e ZBX_ALLOWCONFIGUPDATE=0 \
-e ZBX_TLSPSKIDENTITY="zabbix_psk_identity" \ # 与配置文件一致
-v /etc/zabbix/zabbix_agentd.conf:/etc/zabbix/zabbix_agentd.conf:ro \
-v /etc/zabbix/zabbix_agent.psk:/etc/zabbix/zabbix_agent.psk:ro \
-v /var/lib/zabbix/run:/var/run/zabbix:rw \
-v /var/log/zabbix:/var/log/zabbix:rw \
--restart unless-stopped \
--health-cmd "zabbix_agentd -t agent.ping" \
--health-interval 30s \
--health-timeout 10s \
--health-retries 3 \
--label monitoring=zabbix \
--cpu-shares 512 \
--memory 512M \
zabbix/zabbix-agent:7.2.6-ubuntu #注意版本与服务端一致,如服务端这里客户端也是7.2.6
2.部署验证
# 检查容器状态
sudo docker ps -f name=zabbix-agent
# 查看健康状态
sudo docker inspect --format '{{json .State.Health }}' zabbix-agent | jq
# 测试PSK连接(在Zabbix Server执行)
##复制zabbix_agent.psk到服务端容器
docker cp /etc/zabbix/zabbix_agent.psk zabbix-docker-726-zabbix-server-1:/etc/zabbix/
##测试
docker exec -it zabbix-docker-726-zabbix-server-1 zabbix_get -s 客户端ip -p 10050 -k "agent.ping" --tls-connect=psk --tls-psk-identity=zabbix_psk_identity --tls-psk-file=/etc/zabbix/zabbix_agent.psk
#查看日志
docker logs zabbix-agent
cat /var/log/zabbix/zabbix_agentd.log
二、zabbix应用与服务监控
2.1. 在Zabbix Web界面添加主机
登录Zabbix Server的Web界面。
(1)进入 数据采集→ 主机 → 创建主机。
填写主机名称(与配置文件中的Hostname
一致)、IP地址。
(2)关联模板
(如 Template- Linux by Zabbix agent
)。
!
(3)配置psk
共享密钥一致性
与/etc/zabbix/zabbix_agentd.conf
-->TLSPSKIdentity=prod_agent_host5
保持一致共享密钥(PSK)
可在/etc/zabbix/zabbix_agent.psk
获取
cat /etc/zabbix/zabbix_agentd.conf
### 全局配置 ###
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
# 修改为文件日志
LogType=file
LogFileSize=50
DebugLevel=3
### 连接配置 ###
Server=192.168.0.224
ServerActive=192.168.0.224
Hostname=host5
### 高级参数 ###
StartAgents=3
Timeout=30
EnableRemoteCommands=0
AllowRoot=0
Include=/etc/zabbix/zabbix_agentd.d/*.conf
### TLS/PSK加密配置 ###
TLSConnect=psk
TLSAccept=psk
TLSPSKIdentity=prod_agent_host5
TLSPSKFile=/etc/zabbix/zabbix_agent.psk
cat /etc/zabbix/zabbix_agent.psk
412991b609a203f07b3ab32703297c68af3feb1da1d91dd644bccf63111e7231
(4)查看数据
2.2.配置Tomcat JMX监控
例如我这里监控host1Tomcat jmx
(1)Host1上的Tomcat JMX监控配置
- 修改Tomcat的JMX参数(Docker环境)
目标:启用Tomcat的JMX远程监控端口。
步骤:
docker环境
-
编辑Docker Compose文件
在docker-compose.yml
中找到Tomcat服务的定义,添加JMX环境变量:services: tomcat: image: tomcat:9.0 environment: CATALINA_OPTS: "-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.rmi.port=12346 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.0.221" # 替换为实际宿主机IP或主机名 ports: - "8080:8080" - "12345:12345" # 暴露JMX端口 - "12346:12346" # RMI 端口
确保替换
java.rmi.server.hostname
为宿主机的真实IP或主机名。#开放端口12345 sudo ufw allow 12345/tcp sudo ufw allow 12346/tcp sudo ufw reload
-
重启Tomcat容器:
docker compose down && docker compose up -d
非 Docker 环境(直接安装的 Tomcat)
- 修改 Tomcat 启动脚本
Tomcat 的 JMX 参数通过 CATALINA_OPTS
环境变量设置。具体配置方法如下:
- Tomcat 启动脚本通常位于
bin/catalina.sh
(Linux)或bin/catalina.bat
(Windows)。 - 推荐:在
bin/setenv.sh
(需手动创建)中设置环境变量,避免直接修改catalina.sh
。
- 创建或编辑
setenv.sh
# Linux/Mac
vi $CATALINA_HOME/bin/setenv.sh
添加以下内容(替换 192.168.0.221
为实际 IP):
export CATALINA_OPTS="
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.rmi.port=12346
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=192.168.0.221
-Dcatalina.jmxremote=true
-Dcatalina.useJmx=true
-Djava.net.preferIPv4Stack=true
"
#设置文件权限
chmod +x $CATALINA_HOME/bin/setenv.sh
#开放防火墙端口 Linux(以 ufw 为例)
sudo ufw allow 12345/tcp # JMX 端口
sudo ufw allow 12346/tcp # RMI 端口
#重启 Tomcat
$CATALINA_HOME/bin/shutdown.sh
$CATALINA_HOME/bin/startup.sh
(2)在Host4(Zabbix Server)上配置Java Gateway
目标:使Zabbix Server能通过JMX采集Tomcat数据。
步骤:
-
启动Java Gateway
#修改compose_zabbix_components.yaml文件 java-gateway: profiles: - javagateway #修改环境变量env_vars/.env.java ZBX_LISTEN_IP=0.0.0.0 #或者服务端ip ZBX_LISTEN_PORT=10052 ZBX_START_POLLERS=5 ZBX_TIMEOUT=3 # Possible values: trace, debug, info, want, error, all, off ZBX_DEBUGLEVEL=info #启动java-geteway docker compose --profile javagateway up -d zabbix-java-gateway #需确保 Zabbix Server 容器对挂载目录有写入权限 #zbx_env是compose中的${DATA_DIRECTORY}, 在.env中可以配置挂载路径 chmod -R 777 实际的zbx_env地址/var/lib/zabbix/ssl/
-
修改Zabbix Server配置:
编辑Zabbix Server的
zabbix_server.conf
(位于容器内/etc/zabbix/zabbix_server.conf
):JavaGateway=192.168.0.224 # Zabbix Server所在主机 JavaGatewayPort=10052 StartJavaPollers=5 # 根据负载调整 #命令修改 docker exec -uroot zabbix-docker-726-zabbix-server-1 sh -c 'echo "JavaGateway=192.168.0.224" >> /etc/zabbix/zabbix_server.conf' docker exec -uroot zabbix-docker-726-zabbix-server-1 sh -c 'echo "JavaGatewayPort=10052" >> /etc/zabbix/zabbix_server.conf' docker exec -uroot zabbix-docker-726-zabbix-server-1 sh -c 'echo "StartJavaPollers=5" >> /etc/zabbix/zabbix_server.conf' docker exec zabbix-docker-726-zabbix-server-1 cat /etc/zabbix/zabbix_server.conf
重启Zabbix Server容器:
dockecompose restart zabbix-server
3. Zabbix网页端关联JMX模板
目标:在Zabbix界面中启用Tomcat监控。
步骤:
-
进入主机配置
打开Zabbix网页端 → 配置 → 主机 → 选择Host1或Host2的主机条目。 -
关联JMX模板
-
点击 模板 → 选择 → 搜索并添加
Apache Tomcat by JMX
。 -
在 宏 标签页中设置JMX连接参数:
{$JMX.PROTOCOL} = rmi # 确保协议为 rmi(非 ssl) {$JMX.IP} =192.168.0.221 # Tomcat 宿主机的真实 IP {$JMX.PORT} = 12345 # JMX 端口
-
-
验证JMX连通性
在主机详情页的 监控项 标签页中,检查是否有以JMX
开头的监控项开始采集数据(可能需要等待1-2分钟)。
(3)添加监控项
1. 添加核心 JMX 监控项
在 Apache Tomcat by JMX
模板中手动创建以下监控项:
监控项名称 | 键值 | 数据类型 | 单位 | 触发器示例 |
---|---|---|---|---|
JVM堆内存使用量 | jmx[“java.lang:type=Memory”,HeapMemoryUsage.used] | 数字(无符号) | B | {Template:jmx["java.lang:type=Memory",HeapMemoryUsage.used].last()}/{$JMX.HEAP.MAX}*100 > 80 |
Full GC累计耗时 | jmx["java.lang:type=GarbageCollector,name=G1 Old Generation",CollectionTime] | 数字(无符号) | ms | {Template:jmx["java.lang:type=GarbageCollector,name=G1 Old Generation",CollectionTime].delta(1h)} > 5000 |
操作步骤:
- 进入模板的 监控项 页面 → 创建监控项 → 填写名称、键值、数据类型。
- 配置触发器(可选):在 触发器 标签页中创建告警规则。
三、验证模板配置
1. 确认监控项生成
- 进入 配置 → 主机 → 关联模板的主机 → 监控项,搜索
jmx
过滤,应看到以下指标:jmx["java.lang:type=Memory",HeapMemoryUsage.used]
jmx["Catalina:type=ThreadPool,name=http-nio-8080",currentThreadCount]
2. 检查数据采集
-
进入 监控 → 最新数据 → 选择主机,检查新监控项是否有数据。
-
无数据时的排查:
-
使用
jconsole
连接到 Tomcat JMX 端口,验证 MBean 是否存在。 -
检查 Zabbix Server 日志:
docker logs zabbix-server | grep "JMX"
-
(4)如何导入模版文件
Zabbix 的 官方代码和资源库,包含 Zabbix Server、Agent、模板、工具等所有开源组件。以下是关键目录说明:
目录路径 | 内容说明 |
---|---|
/templates/app/ | 核心模板目录,包含所有官方应用监控模板(如 Tomcat、MySQL、Nginx 等)。 |
/templates/db/ | 数据库相关模板(如 Oracle、PostgreSQL)。 |
/templates/os/ | 操作系统监控模板(如 Linux、Windows)。 |
/src/zabbix_agent2/plugins/ | Zabbix Agent 2 的插件代码(如 MongoDB、PostgreSQL 插件)。 |
/tools/ | 辅助工具(如数据加载器、Kafka 连接器)。 |
1.手动搜索下载
Source of template_app_tomcat_jmx.yaml - Zabbix - ZABBIX GIT
选择对应版本模版
2.导入模版
2.3.配置MySQL监控配置
在zabbix-agent安装mysql客户端
# 进入容器并更新软件源(需 root 权限)
docker exec -u root -it zabbix-agent bash
apt update
apt install -y mysql-client
exit
#安装完成后,检查 mysql 命令是否可用
docker exec -it zabbix-agent mysql --version
(1)在MySQL中创建监控用户
目标:授权Zabbix Agent访问MySQL性能数据。
步骤:
-
进入需监控的MySQL容器:
docker exec -it mysql_container_name bash
-
登录MySQL并创建用户:
mysql -uroot -p CREATE USER 'zbx_monitor'@'%' IDENTIFIED BY 'SecurePassword123'; GRANT REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'zbx_monitor'@'%'; FLUSH PRIVILEGES;
(2)配置Zabbix Agent的MySQL监控项
目标:通过Zabbix Agent采集MySQL指标。
步骤:
-
在Host1上修改Zabbix Agent配置:
-
修改配置文件(
/etc/zabbix/zabbix_agentd.conf
):docker exec -it zabbix-agent cat /etc/zabbix/zabbix_agentd/userparameter_mysql.conf #输出一堆UserParameter,Include到/etc/zabbix/zabbix_agentd.conf中 ###加载模版配置 ### Include=/etc/zabbix/zabbix_agentd/userparameter_mysql.conf #可手动测试是否能获取数据 docker exec zabbix-agent zabbix_agentd -t mysql.version["192.168.0.221","3306"] # 应输出 Server version 5.7.44-log docker exec zabbix-agent zabbix_agentd -t mysql.ping["192.168.0.221","3306"] # 应输出 mysql.ping[192.168.0.221,3306] [t|mysqld is alive]
-
配置认证文件(替代密码明文传递):
# 在agent容器内创建.my.cnf docker exec -u root -it zabbix-agent bash mkdir -p /var/lib/zabbix # 修改为你的MySQL服务器IP和密码 cat > /var/lib/zabbix/.my.cnf <<EOF [client] user=zbx_monitor password=SecurePassword123 host=192.168.0.221 port=3306 EOF chown zabbix:zabbix /var/lib/zabbix/.my.cnf exit #重启容器 docker restart zabbix-agent
-
(3)Zabbix网页端关联MySQL模板
目标:启用预定义的MySQL监控模板。
步骤:
-
进入主机配置
Zabbix网页端 → 配置 → 主机 → 选择Host1或Host2的主机条目。 -
关联MySQL模板
-
点击 模板 → 选择 → 搜索并添加
MySQL by Zabbix agent
。 -
在 宏 标签页中设置MySQL连接参数:
宏名称 值 说明 {$MYSQL.HOST}
192.168.0.221 MySQL服务器IP {$MYSQL.PORT}
3306 端口 其他宏 按需调整阈值 如 {$MYSQL.REPL_LAG.MAX.WARN}
等
关键宏参数及其作用和配置建议
宏名称 默认值 作用 是否必须配置 {$MYSQL.HOST}
127.0.0.1 MySQL服务器IP或主机名 必须配置 {$MYSQL.PORT}
3306 MySQL服务端口 必须配置 {$MYSQL.REPL_LAG.MAX.WARN}
30m 主从复制延迟的阈值(例如30分钟),超过此值会触发告警 可选(按需调整) {$MYSQL.SLOW_QUERIES.MAX.WARN}
3 慢查询数量的阈值(每秒),超过此值会触发告警 可选(按需调整) {$MYSQL.BUFF_UTIL.MIN.WARN}
50% InnoDB缓冲池利用率的最低阈值,低于此值会告警(表示缓冲池可能分配过大) 可选(按需调整) {$MYSQL.DBNAME.MATCHES}
.+
数据库发现规则的正则表达式,匹配需要监控的数据库(例如 .+
表示所有数据库)可选(按需调整) {$MYSQL.DBNAME.NOT_MATCHES}
information_schema
排除不监控的数据库(默认排除 information_schema
)可选(按需调整) {$MYSQL.INNODB_LOG_FILES}
2 InnoDB日志文件数量,用于计算 innodb_log_file_size
可选(按需调整) -
-
检查监控项
在 监控项 标签页中,确认MySQL
等指标已开始采集。
2.4Docker容器监控
- 容器资源监控:利用Zabbix的Docker模板(如
Template App Docker
)监控容器CPU、内存、网络流量。需在主机上安装zabbix-agent2
并启用Docker插件。 - 服务健康检查:通过自定义脚本监控Docker Compose管理的服务状态(如
docker-compose ps
结果解析),结合Zabbix的system.run
键值实现。
(1)zabbix Agent2
Zabbix Agent 与 Zabbix Agent2 的核心区别
特性 | Zabbix Agent | Zabbix Agent2 |
---|---|---|
架构 | 单线程模型,功能有限 | 多线程插件化架构,支持并发任务 |
Docker监控 | 不支持 | 原生支持(需启用Docker插件) |
资源占用 | 较低 | 略高(因插件化设计) |
自定义监控扩展 | 依赖UserParameter脚本 | 支持插件化开发(Go语言) |
协议兼容性 | 仅Zabbix协议 | 支持Zabbix协议和HTTP/HTTPS |
维护状态 | 维护中(逐步淘汰) | 官方主力维护版本 |
- 推荐场景:
- 必须使用Agent2:需监控Docker容器、Kubernetes、或通过插件扩展功能(如MQTT、JMX)。
- 插件路径
docker exec -uroot -it zabbix-agent2 ls -l /usr/sbin/zabbix-agent2-plugin
- 插件路径
- 建议使用Agent2:新部署环境、需要更高性能或未来扩展性。
- 必须使用Agent2:需监控Docker容器、Kubernetes、或通过插件扩展功能(如MQTT、JMX)。
- 保留Agent的场景:
- 旧监控项依赖特定UserParameter脚本且迁移成本高。
- 资源极度受限的环境(Agent2内存占用略高)。
启动命令与agent有什么不同
sudo docker run -d \
--name zabbix-agent2 \
--network host \
--group-add 996 \
-e ZBX_SERVER_HOST="192.168.0.224" \
-e ZBX_HOSTNAME="$(hostname -f)" \
-e ZBX_TLSCONNECT=psk \
-e ZBX_TLSACCEPT=psk \
-e ZBX_TLSPSKIDENTITY="prod_agent_host1" \
-v /etc/zabbix/zabbix_agent2.conf:/etc/zabbix/zabbix_agent2.conf:ro \
-v /etc/zabbix/zabbix_agent.psk:/etc/zabbix/zabbix_agent.psk:ro \
-v /var/lib/zabbix/run:/var/run/zabbix:rw \
-v /var/log/zabbix:/var/log/zabbix:rw \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
--restart unless-stopped \
zabbix/zabbix-agent2:7.2.6-ubuntu
#检查容器日志
docker logs zabbix-agent2 | grep -E "Docker|plugin"
#测试Docker监控项
zabbix_get -s 客户端IP -k docker.containers.running
-
--group-add 996
Zabbix Agent2的用户添加到docker组 访问Docker.sock文件#可通过构建镜像固化组名 FROM zabbix/zabbix-agent2:latest # 添加与宿主机一致的 Docker 组 RUN groupadd -g 996 docker && \ usermod -aG docker zabbix
-
修改Docker镜像名称
-
新增Docker套接字挂载,使Agent2能访问Docker API
-
配置文件调整(zabbix_agent2)
-
Agent2的配置文件(
zabbix_agent2.conf
)与旧版Agent大部分兼容,但需注意:-
插件启用:若需监控Docker,确保配置中启用插件:
Plugins.Docker.Endpoint=unix:///var/run/docker.sock
-
参数兼容性:原有参数(如
Server
,Hostname
,TLS
配置)无需修改。
-
(2)升级到Zabbix Agent2后的变更操作说明
关于配置文件的变更
-
配置文件路径与名称:
-
旧版Agent:配置文件为
/etc/zabbix/zabbix_agentd.conf
。 -
Agent2:配置文件为
/etc/zabbix/zabbix_agent2.conf
。 -
操作:将原有配置文件重命名或复制到新路径:
mv /etc/zabbix/zabbix_agentd.conf /etc/zabbix/zabbix_agent2.conf
-
-
UserParameter的兼容性:
- 仍生效:Agent2完全兼容旧版Agent的
UserParameter
配置,无需修改。 - 优化建议:逐步迁移到Agent2插件(如MySQL插件),提升性能和可维护性。
- 仍生效:Agent2完全兼容旧版Agent的
Tomcat JMX监控的调整
是否需要修改:
- 无需变更:Tomcat JMX监控依赖Zabbix Server的Java Gateway,与Agent类型无关。
- 验证步骤:
- 确保Tomcat容器暴露的JMX端口(如
12345
)可被Zabbix Server访问。 - 在Zabbix Web中检查JMX监控项数据是否正常(如
jmx["java.lang:type=Memory",HeapMemoryUsage.used]
)。
- 确保Tomcat容器暴露的JMX端口(如
(3)MySQL监控的调整
迁移到Agent2的MySQL
-
优势:无需依赖
mysql-client
和自定义脚本。 -
步骤:
-
移除旧版UserParameter:
- 删除
userparameter_mysql.conf
或注释相关配置。
- 删除
-
进入需监控的MySQL容器:
docker exec -it mysql_container_name bash #登录MySQL并创建用户 mysql -uroot -p CREATE USER 'zbx_monitor'@'%' IDENTIFIED BY 'SecurePassword123'; GRANT REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'zbx_monitor'@'%'; FLUSH PRIVILEGES;
-
:在Agent2完整配置:
nano /etc/zabbix/zabbix_agent2.conf
### 全局配置 ### # Agent2的PID文件路径 PidFile=/var/run/zabbix/zabbix_agent2.pid # Agent2的日志路径 LogFile=/var/log/zabbix/zabbix_agent2.log LogType=file LogFileSize=50 DebugLevel=3 ### 连接配置 ### # Zabbix Server IP Server=192.168.0.224 # 主动检查的Server IP ServerActive=192.168.0.224 # 客户端主机名(需唯一) Hostname=host1 ### 高级参数 ### Timeout=30 ### 包含外部配置文件(可选)### # 插件或自定义配置目录 Include=./zabbix_agent2.d/plugins.d/*.conf ### TLS/PSK加密配置(与旧版兼容)### TLSConnect=psk TLSAccept=psk TLSPSKIdentity=prod_agent_host1 TLSPSKFile=/etc/zabbix/zabbix_agent.psk ### Docker监控插件配置(需挂载Docker套接字)### Plugins.Docker.Endpoint=unix:///var/run/docker.sock Plugins.Docker.Timeout=10s
-
重启Agent2容器:
docker restart zabbix-agent2
-
Docker插件无数据
# 在宿主机调整套接字权限 sudo chmod 666 /var/run/docker.sock
-
数据采集-主机-HOST-将模版替换成agent2
MySQL by Zabbix agent 2
Docker by Zabbix agent 2
-
添加宏
#mysql主机ip:端口 {$MYSQL.DSN} tcp://192.168.0.221:3306 #mysql用户 {$MYSQL.USER} zbx_monitor #msyql密码 {$MYSQL.PASSWORD} SecurePassword123
-
日志检查
docker logs zabbix-agent2 tail -f /var/log/zabbix/zabbix_agent2.log
-
到最新数据查看最新数据
-
三、告警与通知集成
3.1.告警分级与通知
(1)触发器配置
按严重性分级(如“灾难级”为服务宕机,“警告级”为CPU超80%)。例如,为MySQL设置触发器:
原始有效表达式
max(/host1/mysql.ping["{$MYSQL.DSN}","{$MYSQL.USER}","{$MYSQL.PASSWORD}"],5m)=0
关键概念解析
- 为何使用
max()
函数?mysql.ping
监控项返回0
(服务不可达)或1
(正常)max(5m)
的含义:过去5分钟内取最大值- 当
max(5m)=0
时,表示 过去5分钟内所有检测结果均为0,即MySQL服务持续不可用
- 时间参数组成
Zabbix时间参数格式为:<时间窗口>[:<时间偏移>]
- 时间窗口(必填):定义统计周期(如
5m
=5分钟) - 时间偏移(可选):定义相对当前时间的偏移量(如
now-1d
=1天前)
- 时间窗口(必填):定义统计周期(如
- 网页翻译问题说明
- 中文界面中的 “时间间隔” 实际对应英文术语 Time Window(时间窗口)
- 中文界面中的 “时间偏移” 对应 Time Shift(时间偏移)
- 翻译不准确导致混淆,需以功能逻辑为准
典型场景示例与解释
场景1:实时监控(无时间偏移)
表达式
max(/host1/mysql.ping["{$MYSQL.DSN}","{$MYSQL.USER}","{$MYSQL.PASSWORD}"],5m)=0
含义
- 检查过去5分钟内
mysql.ping
的最大值 - 若持续返回
0
(服务不可达),触发告警
适用场景
- 实时监控MySQL服务状态
- 需要快速响应持续故障
场景2:同比分析(含时间偏移)
表达式
max(/host1/mysql.ping["{$MYSQL.DSN}","{$MYSQL.USER}","{$MYSQL.PASSWORD}"],1h:now-1d)=0
参数解析
- 时间窗口:
1h
(1小时) - 时间偏移:
now-1d
(24小时前)
含义
- 对比 昨天同一时段 的1小时数据
- 若昨天此时段服务不可用,则触发告警
适用场景
- 周期性业务波动分析
- 历史故障根因调查
场景3:复合条件检查
表达式
max(/host1/mysql.ping["{$MYSQL.DSN}","{$MYSQL.USER}","{$MYSQL.PASSWORD}"],5m)=0
and
avg(/host1/system.cpu.util[,idle],5m)<20
含义
- 当MySQL服务不可用 且 CPU空闲率低于20%时触发告警
- 多条件关联分析,精准定位复杂故障
适用场景
- 资源瓶颈导致的级联故障
- 高负载场景下的服务异常
时间参数配置规则总结
参数类型 | 格式 | 是否必填 | 示例 | 作用 |
---|---|---|---|---|
时间窗口 | N<s/m/h/d/w> | 是 | 5m , 1h | 定义统计周期 |
时间偏移 | now±N<单位> | 否 | now-1d | 定义历史数据对比基准点 |
复合格式 | <时间窗口>:<偏移> | 可选 | 1h:now-7d | 动态时间范围组合 |
在Zabbix前端:
数据采集 → 主机 → 触发器 → 创建触发器
,设置表达式和严重性
# MySQL宕机(灾难级)
{MySQL:mysql.ping.max(5m)}=0 → 严重性:灾难
# CPU超80%(警告级)
{HOST1:system.cpu.util[,idle].avg(5m)}>20 → 严重性:警告
(2)飞书/钉钉集成
飞书/钉钉集成:通过Zabbix的Webhook功能将告警推送至飞书群,实现处理流程留痕与自动化状态更新(如“未响应→解决中→已解决”)。
(2.1)飞书集成步骤
1. 飞书应用创建与权限配置
- 入口:访问飞书开放平台 https://open.feishu.cn/app
- 操作步骤:
- 创建企业自建应用:需企业管理员账号,个人版飞书可能无法完成此步骤。
- 配置权限:
- 通讯录权限:
contact:user.id:readonly
、contact:contact:readonly_as_app
- 消息权限:
im:message
(发送消息)、im:chat
(获取群ID) - 审批权限(可选):若需告警联动审批,需开通
approval:approval
等权限。
- 通讯录权限:
- 发布应用:提交审核,管理员在飞书管理后台通过后生效。
2. 获取飞书机器人 Webhook
- 在飞书群聊中添加机器人:
- 群设置 → 智能群助手 → 添加机器人 → 自定义机器人。
- 配置机器人名称、头像,并开启 Webhook 功能。
- 复制生成的 Webhook URL(格式:
https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxx
)。
3. Zabbix 配置
-
创建报警媒介类型:
-
类型:
Webhook
-
参数设置:
参数名 值 说明 HTTPProxy
留空或代理地址 可选 Message
{ALERT.MESSAGE}
告警消息内容 Subject
{ALERT.SUBJECT}
告警主题 To
{ALERT.SENDTO}
飞书 Webhook URL -
脚本内容(JavaScript):
try { var params = JSON.parse(value), req = new HttpRequest(), msg = { msg_type: "text", content: { text: params.Subject + "\n" + params.Message } }; req.addHeader("Content-Type: application/json"); resp = req.post(params.To, JSON.stringify(msg)); return JSON.stringify(resp); } catch (error) { throw "Failed: " + error; }
-
-
关联用户与动作:
- 用户需绑定飞书媒介类型,填写 Webhook URL。
- 创建动作(Action),触发条件关联主机或模板,操作中指定发送至飞书媒介。
(2.2)钉钉集成步骤
1. 钉钉应用创建与权限配置
- 入口:钉钉开放平台 https://open.dingtalk.com
- 操作步骤:
- 创建企业内部应用:需企业管理员权限,个人版钉钉不支持。
- 配置权限:
- 机器人权限:
chatbot:SendMsg
(发送消息)、chatbot:QueryBot
(查询机器人信息)。 - 通讯录权限(可选):
contact:user:read
(读取用户信息)。
- 机器人权限:
2. 获取钉钉机器人 Webhook
- 在钉钉群聊中添加机器人:
- 群设置 → 智能群助手 → 添加机器人 → 自定义(通过 Webhook 接入)。
- 设置安全策略(如关键词、IP 白名单),复制 Webhook URL(格式:
https://oapi.dingtalk.com/robot/send?access_token=xxxxxx
)。
3. Zabbix 配置
-
创建报警媒介类型:
-
类型:
Webhook
-
参数设置与飞书类似,脚本调整为钉钉格式:
try { var params = JSON.parse(value), req = new HttpRequest(), msg = { msgtype: "text", text: { content: params.Subject + "\n" + params.Message } }; req.addHeader("Content-Type: application/json"); resp = req.post(params.To, JSON.stringify(msg)); return JSON.stringify(resp); } catch (error) { throw "Failed: " + error; }
-
-
用户与动作配置:同飞书流程。
3.关键注意事项
-
权限要求:
- 飞书/钉钉 必须使用企业版,个人版无法创建应用或机器人。
- 应用需通过管理员审核,并配置正确的权限范围。
-
网络连通性:
- Zabbix Server 需能访问飞书/钉钉 API 地址(如
open.feishu.cn
、oapi.dingtalk.com
)。 - 验证命令:
curl https://open.feishu.cn/open-apis/ping
返回{"code":0}
表示正常。
- Zabbix Server 需能访问飞书/钉钉 API 地址(如
-
告警模板优化:
-
消息内容支持宏变量(如
{HOST.NAME}
、{TRIGGER.STATUS}
),可在 Zabbix 的 Message Templates 中自定义39。 -
示例模板:
告警主机:{HOST.NAME} 告警等级:{TRIGGER.SEVERITY} 故障详情:{TRIGGER.NAME} 当前状态:{TRIGGER.STATUS}
-
4.常见问题排查
- 收不到告警:
- 检查 Zabbix 动作日志(报表 → 动作日志)。
- 确认飞书/钉钉机器人 Webhook 地址正确且未过期。
- 检查 Zabbix 用户权限,确保对告警主机有读取权限29。
- 脚本执行失败:
- 使用 Zabbix 的 测试 功能验证脚本。
- 查看 Zabbix Server 日志(
/var/log/zabbix/zabbix_server.log
)。
5.简化方案(第三方工具)
若企业网络限制严格,可使用 Spug推送助手 等第三方平台:
- 注册并获取模板 ID 。
- 在 Zabbix 中导入预配置的媒介类型,减少脚本开发工作。
- 支持多通道(电话、短信、飞书、钉钉)统一告警。
(3)告警抑制与依赖
- 告警抑制:当父触发器(如宿主机宕机)触发时,自动抑制所有依赖它的子触发器(如容器服务异常)告警,避免重复告警。
- 根因定位:帮助运维快速识别根本问题(如宿主机故障),而非被级联告警干扰。
- 减少告警噪音:在复杂架构中(如Kubernetes集群),有效降低无效告警数量。
详细配置步骤
-
进入触发器配置界面
- 路径:
配置 → 主机 → 选择宿主机(如Host1) → 触发器 → 创建/编辑触发器
- 路径:
-
配置宿主机父触发器
名称:Docker: Service is down 表达式:last(/host1/docker.ping)=0 严重性:灾难
agent.ping
:主动检测 Agent 是否存活,正常返回1
,异常返回0
agent.ping.nodata(T)
:检测过去T
时间内是否未收到任何数据,无数据返回1
,有数据返回0
。
-
配置容器子触发器并添加依赖
名称:mysql服务不可用 表达式:last(/host1/mysql.ping["{$MYSQL.DSN}","{$MYSQL.USER}","{$MYSQL.PASSWORD}"])=0 严重性:严重 → 依赖关系 → 添加 → 选择“Docker: Service is down”触发器
-
验证依赖关系
-
模拟测试:
- 手动停止宿主机docker:
- 观察告警列表:
- 仅“宿主机Host1宕机”触发
- “容器MySQL服务不可用”被抑制
-