《Zabbix7.2.6:从部署到告警配置的全流程记录》

一、安装zabbix

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

  1. 共享密钥一致性/etc/zabbix/zabbix_agentd.conf -->TLSPSKIdentity=prod_agent_host5 保持一致
  2. 共享密钥(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监控配置

  1. 修改Tomcat的JMX参数(Docker环境)

目标:启用Tomcat的JMX远程监控端口。

步骤

docker环境

  1. 编辑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
    
  2. 重启Tomcat容器

    docker compose down && docker compose up -d
    

非 Docker 环境(直接安装的 Tomcat)

  1. 修改 Tomcat 启动脚本

Tomcat 的 JMX 参数通过 CATALINA_OPTS 环境变量设置。具体配置方法如下:

  • Tomcat 启动脚本通常位于 bin/catalina.sh(Linux)或 bin/catalina.bat(Windows)。
  • 推荐:在 bin/setenv.sh(需手动创建)中设置环境变量,避免直接修改 catalina.sh
  1. 创建或编辑 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数据。

步骤

  1. 启动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/
    
    
  2. 修改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监控。

步骤

  1. 进入主机配置
    打开Zabbix网页端 → 配置 → 主机 → 选择Host1或Host2的主机条目。

  2. 关联JMX模板

    • 点击 模板选择 → 搜索并添加 Apache Tomcat by JMX

    • 标签页中设置JMX连接参数:

      {$JMX.PROTOCOL} = rmi  # 确保协议为 rmi(非 ssl)
      {$JMX.IP} =192.168.0.221   # Tomcat 宿主机的真实 IP
      {$JMX.PORT} = 12345    # JMX 端口
      

    在这里插入图片描述

  3. 验证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. 进入模板的 监控项 页面 → 创建监控项 → 填写名称、键值、数据类型。
  2. 配置触发器(可选):在 触发器 标签页中创建告警规则。

三、验证模板配置

1. 确认监控项生成

  1. 进入 配置 → 主机 → 关联模板的主机 → 监控项,搜索 jmx 过滤,应看到以下指标:
    • jmx["java.lang:type=Memory",HeapMemoryUsage.used]
    • jmx["Catalina:type=ThreadPool,name=http-nio-8080",currentThreadCount]

2. 检查数据采集

  1. 进入 监控 → 最新数据 → 选择主机,检查新监控项是否有数据。

  2. 无数据时的排查

    • 使用 jconsole 连接到 Tomcat JMX 端口,验证 MBean 是否存在。

    • 检查 Zabbix Server 日志:

      docker logs zabbix-server | grep "JMX"
      

(4)如何导入模版文件

ZABBIX 官方代码和资源库

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.手动搜索下载

Search - ZABBIX GIT

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性能数据。

步骤

  1. 进入需监控的MySQL容器

    docker exec -it mysql_container_name bash
    
  2. 登录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指标。

步骤

  1. 在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监控模板。

步骤

  1. 进入主机配置
    Zabbix网页端 → 配置 → 主机 → 选择Host1或Host2的主机条目。

  2. 关联MySQL模板

    • 点击 模板选择 → 搜索并添加 MySQL by Zabbix agent

    • 标签页中设置MySQL连接参数:

      宏名称说明
      {$MYSQL.HOST}192.168.0.221MySQL服务器IP
      {$MYSQL.PORT}3306端口
      其他宏按需调整阈值{$MYSQL.REPL_LAG.MAX.WARN}

    在这里插入图片描述

    关键宏参数及其作用和配置建议

    宏名称默认值作用是否必须配置
    {$MYSQL.HOST}127.0.0.1MySQL服务器IP或主机名必须配置
    {$MYSQL.PORT}3306MySQL服务端口必须配置
    {$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}2InnoDB日志文件数量,用于计算innodb_log_file_size可选(按需调整)
  3. 检查监控项
    监控项 标签页中,确认 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 AgentZabbix 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:新部署环境、需要更高性能或未来扩展性。
  • 保留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 996Zabbix 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后的变更操作说明

关于配置文件的变更

  1. 配置文件路径与名称

    • 旧版Agent:配置文件为 /etc/zabbix/zabbix_agentd.conf

    • Agent2:配置文件为 /etc/zabbix/zabbix_agent2.conf

    • 操作:将原有配置文件重命名或复制到新路径:

      mv /etc/zabbix/zabbix_agentd.conf /etc/zabbix/zabbix_agent2.conf
      
  2. UserParameter的兼容性

    • 仍生效:Agent2完全兼容旧版Agent的 UserParameter 配置,无需修改。
    • 优化建议:逐步迁移到Agent2插件(如MySQL插件),提升性能和可维护性。

Tomcat JMX监控的调整

是否需要修改

  • 无需变更:Tomcat JMX监控依赖Zabbix Server的Java Gateway,与Agent类型无关。
  • 验证步骤
    • 确保Tomcat容器暴露的JMX端口(如12345)可被Zabbix Server访问。
    • 在Zabbix Web中检查JMX监控项数据是否正常(如 jmx["java.lang:type=Memory",HeapMemoryUsage.used])。

(3)MySQL监控的调整

迁移到Agent2的MySQL

  • 优势:无需依赖mysql-client和自定义脚本。

  • 步骤

    1. 移除旧版UserParameter

      • 删除 userparameter_mysql.conf 或注释相关配置。
    2. 进入需监控的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;
      
    3. :在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
      
    4. 重启Agent2容器

      docker restart zabbix-agent2
      
    5. Docker插件无数据

      # 在宿主机调整套接字权限
      sudo chmod 666 /var/run/docker.sock
      
    6. 数据采集-主机-HOST-将模版替换成agent2

      MySQL by Zabbix agent 2 Docker by Zabbix agent 2

    7. 添加宏

      #mysql主机ip:端口
      {$MYSQL.DSN}
      tcp://192.168.0.221:3306
      #mysql用户
      {$MYSQL.USER}
      zbx_monitor
      #msyql密码
      {$MYSQL.PASSWORD}
      SecurePassword123
      
    8. 日志检查

      docker logs zabbix-agent2
      tail -f /var/log/zabbix/zabbix_agent2.log
      
    9. 到最新数据查看最新数据

三、告警与通知集成

3.1.告警分级与通知

(1)触发器配置

官网: 触发器

按严重性分级(如“灾难级”为服务宕机,“警告级”为CPU超80%)。例如,为MySQL设置触发器:

原始有效表达式

max(/host1/mysql.ping["{$MYSQL.DSN}","{$MYSQL.USER}","{$MYSQL.PASSWORD}"],5m)=0

关键概念解析

  1. 为何使用 max() 函数?
    • mysql.ping 监控项返回 0(服务不可达)或 1(正常)
    • max(5m) 的含义:过去5分钟内取最大值
    • max(5m)=0 时,表示 过去5分钟内所有检测结果均为0,即MySQL服务持续不可用
  2. 时间参数组成
    Zabbix时间参数格式为:<时间窗口>[:<时间偏移>]
    • 时间窗口(必填):定义统计周期(如 5m=5分钟)
    • 时间偏移(可选):定义相对当前时间的偏移量(如 now-1d=1天前)
  3. 网页翻译问题说明
    • 中文界面中的 “时间间隔” 实际对应英文术语 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
  • 操作步骤
    1. 创建企业自建应用:需企业管理员账号,个人版飞书可能无法完成此步骤。
    2. 配置权限
      • 通讯录权限contact:user.id:readonlycontact:contact:readonly_as_app
      • 消息权限im:message(发送消息)、im:chat(获取群ID)
      • 审批权限(可选):若需告警联动审批,需开通 approval:approval 等权限。
    3. 发布应用:提交审核,管理员在飞书管理后台通过后生效。

2. 获取飞书机器人 Webhook

  1. 在飞书群聊中添加机器人:
    • 群设置 → 智能群助手 → 添加机器人 → 自定义机器人。
  2. 配置机器人名称、头像,并开启 Webhook 功能。
  3. 复制生成的 Webhook URL(格式:https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxx)。

3. Zabbix 配置

  1. 创建报警媒介类型

    • 类型: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;
      }
      
  2. 关联用户与动作

    • 用户需绑定飞书媒介类型,填写 Webhook URL。
    • 创建动作(Action),触发条件关联主机或模板,操作中指定发送至飞书媒介。

(2.2)钉钉集成步骤

1. 钉钉应用创建与权限配置

  • 入口:钉钉开放平台 https://open.dingtalk.com
  • 操作步骤
    1. 创建企业内部应用:需企业管理员权限,个人版钉钉不支持。
    2. 配置权限
      • 机器人权限chatbot:SendMsg(发送消息)、chatbot:QueryBot(查询机器人信息)。
      • 通讯录权限(可选):contact:user:read(读取用户信息)。

2. 获取钉钉机器人 Webhook

  1. 在钉钉群聊中添加机器人:
    • 群设置 → 智能群助手 → 添加机器人 → 自定义(通过 Webhook 接入)。
  2. 设置安全策略(如关键词、IP 白名单),复制 Webhook URL(格式:https://oapi.dingtalk.com/robot/send?access_token=xxxxxx)。

3. Zabbix 配置

  1. 创建报警媒介类型

    • 类型: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;
      }
      
  2. 用户与动作配置:同飞书流程。


3.关键注意事项

  1. 权限要求

    • 飞书/钉钉 必须使用企业版,个人版无法创建应用或机器人。
    • 应用需通过管理员审核,并配置正确的权限范围。
  2. 网络连通性

    • Zabbix Server 需能访问飞书/钉钉 API 地址(如 open.feishu.cnoapi.dingtalk.com)。
    • 验证命令:curl https://open.feishu.cn/open-apis/ping 返回 {"code":0} 表示正常。
  3. 告警模板优化

    • 消息内容支持宏变量(如 {HOST.NAME}{TRIGGER.STATUS}),可在 Zabbix 的 Message Templates 中自定义39。

    • 示例模板:

      告警主机:{HOST.NAME}
      告警等级:{TRIGGER.SEVERITY}
      故障详情:{TRIGGER.NAME}
      当前状态:{TRIGGER.STATUS}
      

4.常见问题排查

  • 收不到告警
    1. 检查 Zabbix 动作日志(报表 → 动作日志)。
    2. 确认飞书/钉钉机器人 Webhook 地址正确且未过期。
    3. 检查 Zabbix 用户权限,确保对告警主机有读取权限29。
  • 脚本执行失败
    1. 使用 Zabbix 的 测试 功能验证脚本。
    2. 查看 Zabbix Server 日志(/var/log/zabbix/zabbix_server.log)。

5.简化方案(第三方工具)

若企业网络限制严格,可使用 Spug推送助手 等第三方平台:

  1. 注册并获取模板 ID 。
  2. 在 Zabbix 中导入预配置的媒介类型,减少脚本开发工作。
  3. 支持多通道(电话、短信、飞书、钉钉)统一告警。

(3)告警抑制与依赖

  • 告警抑制:当父触发器(如宿主机宕机)触发时,自动抑制所有依赖它的子触发器(如容器服务异常)告警,避免重复告警。
  • 根因定位:帮助运维快速识别根本问题(如宿主机故障),而非被级联告警干扰。
  • 减少告警噪音:在复杂架构中(如Kubernetes集群),有效降低无效告警数量。
详细配置步骤
  1. 进入触发器配置界面

    • 路径配置 → 主机 → 选择宿主机(如Host1) → 触发器 → 创建/编辑触发器
  2. 配置宿主机父触发器

    名称:Docker: Service is down
    表达式:last(/host1/docker.ping)=0
    严重性:灾难
    
    • agent.ping:主动检测 Agent 是否存活,正常返回 1,异常返回 0
    • agent.ping.nodata(T):检测过去 T 时间内是否未收到任何数据,无数据返回 1,有数据返回 0
  3. 配置容器子触发器并添加依赖

    名称:mysql服务不可用
    表达式:last(/host1/mysql.ping["{$MYSQL.DSN}","{$MYSQL.USER}","{$MYSQL.PASSWORD}"])=0
    严重性:严重
    → 依赖关系 → 添加 → 选择“Docker: Service is down”触发器
    
  4. 验证依赖关系

    • 模拟测试

      1. 手动停止宿主机docker:
      2. 观察告警列表:
      • 仅“宿主机Host1宕机”触发
      • “容器MySQL服务不可用”被抑制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值