igozhang

——

    Zabbix-Agent双Server上报配置指南

    本文说明如何让一台 Zabbix Agent 同时向两个独立的 Zabbix Server 上报监控数据,涵盖 Agent 客户端配置与新 Server 端 UI(自动注册)配置。

    适用场景:基地已有旧 Zabbix Server,新增一台 Zabbix Server,K8s/物理机等节点需双端监控,主机通过自动注册入库。

    脱敏约定:Server 端 IP 使用 10.10.10.* / 10.10.11.*;Client 端 IP 使用 172.27.10.*;基地名以 baseA 代替。


    一、架构说明

    ┌─────────────┐     主动连接 (ServerActive)      ┌──────────────────┐
    │  K8s 节点    │ ───────────────────────────────► │ 旧 Zabbix Server │
    │ zabbix-agent│                                  │ 10.10.10.38      │
    │             │     主动连接 (ServerActive)      └──────────────────┘
    │             │ ───────────────────────────────► ┌──────────────────┐
    │             │                                  │ 新 Zabbix Server │
    └─────────────┘                                  │ 10.10.11.68      │
           ▲                                         └──────────────────┘
           │ 被动探测 (Server 参数授权 + ListenPort)
           └────────────────────────────────────────────────────────────
    
    • 主动模式:Agent 按 ServerActive 连接 Server,拉取监控项并上报(Linux by Zabbix agent active 模板依赖此模式)。
    • 被动模式:Server 按 Server 白名单连接 Agent 的 ListenPort(默认 10050)。
    • 双 Server 并存时,两个 Server 的数据库各自维护一份主机记录;Agent 只负责向两个地址上报,不会自动同步 Server 之间的主机配置。

    二、前置条件

    项目 要求
    Agent 版本 Zabbix 4.4+(推荐 6.0.x,本文以 6.0.25 为例)
    网络 Agent 到两个 Server 的 Trapper 端口(如 31051)TCP 可达
    Server 版本 建议与 Agent 主版本一致(如均为 6.0)
    主机名 Agent Hostname 与 Server 中 Host name 必须一致

    三、Client 端:zabbix_agentd.conf 配置

    配置文件路径(源码安装示例):/usr/local/zabbix/conf/zabbix_agentd.conf

    3.1 核心参数

    # 被动模式:允许哪些 Server IP 来连接本 Agent(逗号分隔)
    Server=10.10.10.38,10.10.11.68
    
    # 主动模式:Agent 向哪些 Server 上报(见下方分隔符说明)
    ServerActive=10.10.10.38:31051,10.10.11.68:31051
    
    # 主机名,必须与 Zabbix UI 中 Host name 完全一致
    Hostname=172.27.10.224
    
    ListenPort=10050
    Timeout=20
    LogFile=/tmp/zabbix_agentd.log
    

    3.2 ServerActive 分隔符(重要)

    分隔符 含义 行为
    逗号 , 多个独立 Server Agent 同时向所有 Server 上报
    分号 ; 高可用(HA)主备 只连第一个可用的 Server,第一个正常则不会连第二个

    双 Server 并行上报必须使用逗号:

    # 正确:双 Server 并行
    ServerActive=10.10.10.38:31051,10.10.11.68:31051
    
    # 错误:HA 写法,第二个 Server 永远不会收到数据
    ServerActive=10.10.10.38:31051;10.10.11.68:31051
    

    3.3 Server 与 ServerActive 对照

    参数 分隔符 作用
    Server 逗号 , 被动探测白名单
    ServerActive 逗号 ,(多独立 Server) 主动上报目标列表
    ServerActive 分号 ;(HA 主备) 故障切换,非双上报

    3.4 修改与生效

    # 1. 备份
    cp /usr/local/zabbix/conf/zabbix_agentd.conf \
       /usr/local/zabbix/conf/zabbix_agentd.conf.bak.$(date +%Y%m%d%H%M%S)
    
    # 2. 修改 Server / ServerActive(示例)
    sed -i 's/^Server=10.10.10.38$/Server=10.10.10.38,10.10.11.68/' \
      /usr/local/zabbix/conf/zabbix_agentd.conf
    
    sed -i 's/^ServerActive=10.10.10.38:31051$/ServerActive=10.10.10.38:31051,10.10.11.68:31051/' \
      /usr/local/zabbix/conf/zabbix_agentd.conf
    
    # 3. 核对
    grep -E '^Server=|^ServerActive=|^Hostname=' /usr/local/zabbix/conf/zabbix_agentd.conf
    
    # 4. 重启生效
    systemctl restart zabbix-agent
    systemctl is-active zabbix-agent
    

    说明:修改 ServerActive 后必须重启 Agent 才能生效。自动注册请求在 Agent 启动时发出;若仅改配置不重启,新 Server 不会收到注册。

    3.5 Ansible 批量示例

    # 在 ansible 控制节点执行,逐台重启(-f 1)降低对生产的影响
    ansible baseA_k8s -m shell -a \
      "sed -i 's/^Server=10.10.10.38\$/Server=10.10.10.38,10.10.11.68/' /usr/local/zabbix/conf/zabbix_agentd.conf && \
       sed -i 's/^ServerActive=10.10.10.38:31051\$/ServerActive=10.10.10.38:31051,10.10.11.68:31051/' /usr/local/zabbix/conf/zabbix_agentd.conf && \
       grep -E '^Server=|^ServerActive=' /usr/local/zabbix/conf/zabbix_agentd.conf && \
       systemctl restart zabbix-agent && sleep 5 && systemctl is-active zabbix-agent" \
      -b -f 1
    

    四、Server 端 UI:自动注册配置

    新 Server 上必须完成 全局开关 + Action 规则 + 依赖资源 三部分,缺一不可。

    4.1 启用全局自动注册

    路径:Administration → General → Other

    配置项
    Autoregistration / Enable auto registration Enabled

    点击 Update 保存。

    仅创建 Autoregistration Action 并设为 Enabled 不够;全局 Autoregistration 未开启时,Server 会丢弃 Agent 的注册请求,Agent 日志仅表现为 host [xxx] not found,UI 中看不到主机。

    4.2 创建 Autoregistration Action

    路径:Data collection → Actions,左上角下拉选择 Autoregistration actionsCreate action

    示例:baseA K8s 节点

    字段
    Name baseA172.27.10
    Status Enabled

    Conditions(条件)

    Label Operator Value
    Host name contains 172.27.10.

    Agent 的 Hostname=172.27.10.224 满足 Host name contains 172.27.10.。若使用主机名(如 k8s04),条件需改为匹配对应名称规则。

    Operations(操作)

    步骤 操作
    1 Add host
    2 Add to host groups: baseA_SRV(或 baseA-srv,按实际组名)
    3 Link to templates: Linux by Zabbix agent active

    保存后确认 Action 状态为 Enabled(绿色)。

    4.3 Action 依赖资源检查

    Action 引用的资源在新 Server 上必须已存在,否则注册静默失败:

    资源 检查路径
    主机组 Data collection → Host groups
    模板 Data collection → Templates

    常见失败原因:

    • 主机组 baseA_SRV 未创建
    • 模板 Linux by Zabbix agent active 未导入
    • Action 条件与 Agent Hostname 不匹配

    失败记录查看:Reports → Action log

    4.4 与旧 Server 规则对齐参考

    旧 Server(示例)规则:

    项目 旧 Server 新 Server
    条件 Host name contains 172.27.10. 同上
    主机组 baseA-srv baseA_SRV
    模板 Linux by Zabbix agent active 同上

    规则逻辑一致即可,主机组名称可以不同,但新 Server 上对应组必须存在


    五、验证清单

    5.1 Client 端

    # 连通性(5 秒超时)
    timeout 5 bash -c 'echo > /dev/tcp/10.10.11.68/31051' && echo OK || echo FAIL
    
    # 配置
    grep -E '^Server=|^ServerActive=|^Hostname=' /usr/local/zabbix/conf/zabbix_agentd.conf
    
    # 服务
    systemctl is-active zabbix-agent
    
    # 日志:连上新 Server 且主机未入库时
    grep '10.10.11.68' /tmp/zabbix_agentd.log | tail -n 10
    # 预期(注册完成前):no active checks on server [10.10.11.68:31051]: host [xxx] not found
    # 预期(注册完成后):active check configuration update from [10.10.11.68:31051]
    

    5.2 Server 端 UI

    检查项 预期
    Monitoring → Hosts 出现与 Agent Hostname 同名的主机
    主机 Availability(ZBX) 绿色
    Reports → Action log 有成功的 Add host 记录,无 group/template 报错
    Latest data 有数据项计数

    六、常见问题

    Q1:新 Server 一直 host not found,UI 无主机

    按顺序排查:

    1. ServerActive 是否为逗号分隔(不是分号)
    2. 新 Server Administration → General → Other 全局 Autoregistration 是否 Enabled
    3. Action 条件是否匹配 Agent Hostname
    4. 主机组、模板在新 Server 是否存在
    5. 查看 Reports → Action log 失败原因
    6. 修改 Agent 配置后是否已 restart zabbix-agent

    Q2:旧 Server 正常,新 Server 完全无连接记录

    ServerActive 使用了分号 ;(HA 模式),Agent 只连第一个 Server。改为逗号 , 并重启。

    Q3:旧 Server Availability 变灰

    多为 Agent 重启后短暂断连,或 ServerActive 配置错误导致主动心跳中断。确认旧 Server 地址仍在 ServerActive 列表中且 Agent 为 active (running),通常数分钟内恢复。

    Q4:配置改完又被还原

    检查 Ansible playbook、配置管理工具是否覆盖 zabbix_agentd.conf,将双 Server 配置写入配置管理源,避免手工修改被回滚。


    七、baseA K8s 实施记录(参考)

    项目
    Agent 组 baseA_k8s(6 台:172.27.10.221–226)
    Agent 版本 6.0.25
    旧 Server 10.10.10.38:31051
    新 Server 10.10.11.68:31051
    Agent Hostname 各节点 IP(如 172.27.10.224)

    最终有效配置:

    Server=10.10.10.38,10.10.11.68
    ServerActive=10.10.10.38:31051,10.10.11.68:31051
    Hostname=172.27.10.224
    

    关键修复点:将 ServerActive 从分号改为逗号;新 Server 开启全局 Autoregistration 并确保 Action 依赖的主机组与模板存在。


    八、相关文档

    MP3