【基于智能监控系统的配置问题】1、zabbix部署与配置

先说清楚根因,再一步步解决。

你截图里那条红色告警 Linux: Zabbix agent is not available (for 3m)、持续 8M 3d,意思是:"Zabbix server"这台主机自带的 agent 监控项一直连不上 agent。原因很简单——你用 docker-compose 部署的这套栈里(从 docker ps 看)只有 server、web、mysql 三个容器,根本没有跑 agent 容器,但 Zabbix 默认自带的"Zabbix server"主机会去 ping 一个 agent(默认地址 127.0.0.1 或 zabbix-agent),没人应答,所以从你部署那天起就一直红着。

下面分三大块:①修掉这条告警 ②给 CentOS 装 agent ③给 Windows Server 2019 装 agent。


第一部分:修复"Zabbix server"自身的 agent 告警

最干净的做法是给这套栈补一个 agent 容器,挂到同一个 docker 网络里,让 server 用容器名找到它。

第 1 步:找到 Zabbix 所在的 docker 网络

docker inspect zabbix_axas-zabbix-server-1 -f '{{range $k,$v := .NetworkSettings.Networks}}{{$k}} {{end}}'

记下输出的网络名(大概率类似 zabbix_axas_default 之类),下一步要用。

第 2 步:启动 agent2 容器,加入同一网络

<网络名> 换成上一步的结果:

docker run -d \
  --name zabbix-agent \
  --network <网络名> \
  --restart always \
  -e ZBX_SERVER_HOST="zabbix_axas-zabbix-server-1" \
  -e ZBX_HOSTNAME="Zabbix server" \
  zabbix/zabbix-agent2:alpine-7.0-latest

ZBX_SERVER_HOST 指向 server 容器名,agent 就会放行来自 server 的连接;ZBX_HOSTNAME 必须和 UI 里那台主机名完全一致(就是 Zabbix server)。

第 3 步:改主机的 agent 接口指向这个新容器

Web UI → 数据采集主机 → 点开 Zabbix server接口 那一栏的 Agent 接口:把"连接到"改成 DNS,DNS 名称填 zabbix-agent(就是容器名),端口 10050 → 保存。

因为 server 和 agent 在同一 docker 网络,server 能直接用容器名解析到它。等 1 分钟左右,那条红色告警就会自动消失、可用性变绿。

注意:容器版 agent 监控的是"容器内部",不是你这台宿主机的真实 CPU/内存/磁盘。如果你还想监控这台香港 BT 宿主机本身,就按第二部分在宿主机上原生装一个 agent,再在 UI 里单独加一台主机。

如果你压根不需要监控 server 自己,也可以偷懒:在主机列表把 Zabbix server 停用,或在 数据采集 → 触发器 里禁用那条 trigger。但不推荐,自监控还是有用的。


第二部分:CentOS 服务器安装 agent

先明确一个网络判断(决定配置方式):

  • 被监控机和 BT 主机在同一内网 / 能互相访问 → 用被动模式(server 主动来连 agent 的 10050),用默认模板。
  • 被监控机在公网另一端、跨互联网、有 NAT → 用主动模式(agent 主动连 BT 主机的 10051),只需 agent 能出网,不用对外开 10050,更安全省事。

第 1 步:装 Zabbix 官方源 + agent2(按你的系统大版本选 el7/el8/el9)

# CentOS 7 为例;CentOS Stream 8 改 el8,9 改 el9
rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rhel/7/x86_64/zabbix-release-latest-7.0.el7.noarch.rpm
yum clean all
yum install -y zabbix-agent2

第 2 步:改配置

vi /etc/zabbix/zabbix_agent2.conf

改这三行(<BT主机IP> = 你那台香港宿主机的、10051 端口能被访问到的 IP):

Server=<BT主机IP>
ServerActive=<BT主机IP>:10051
Hostname=centos-web-01

Hostname 取一个全局唯一的名字,等会儿 UI 里加主机要填得一模一样(主动模式下不一致就采不到数据)。

第 3 步:启动 + 开机自启 + 放行端口

systemctl enable --now zabbix-agent2
systemctl status zabbix-agent2          # 看是否 running

# 被动模式才需要开 10050 入站;纯主动模式可跳过
firewall-cmd --add-port=10050/tcp --permanent && firewall-cmd --reload

如果是云服务器,记得在云安全组里也放行(被动放 10050 入站,主动则在 BT 主机侧放 10051 入站)。


第三部分:Windows Server 2019 安装 agent

第 1 步:下载

zabbix.com/download_agents,选 7.0 LTSWindowsamd64 → 下载 Zabbix agent 2 的 MSI 安装包

第 2 步:安装

双击 MSI,安装向导里填:

  • Zabbix server IP/DNS<BT主机IP>
  • Server or Proxy for active checks<BT主机IP>
  • Hostnamewinserver19-01(唯一,UI 要对应)
  • 勾选 Add agent location to the PATH,下一步装完会自动注册并启动服务。

想手动改配置就编辑 C:\Program Files\Zabbix Agent 2\zabbix_agent2.conf,改 Server / ServerActive / Hostname 三项,然后在服务里重启 "Zabbix Agent 2"。

第 3 步:放行防火墙(被动模式需要,PowerShell 管理员运行)

New-NetFirewallRule -DisplayName "Zabbix Agent" -Direction Inbound -Protocol TCP -LocalPort 10050 -Action Allow

确认服务在跑:services.msc 里看 "Zabbix Agent 2" 是否"正在运行"。


第四部分:在 Web UI 里把这些机器加进来(CentOS / Windows 通用)

  1. 数据采集主机 → 右上角 创建主机

  2. 主机名称:填得和 agent 配置里的 Hostname 完全一致(如 centos-web-01winserver19-01)。

  3. 主机群组:新建或选 Linux servers / Windows servers

  4. 接口:添加一个 Agent 接口,IP 填这台被监控机的可达 IP,端口 10050

  5. 模板

    :点"模板"标签链接——

    • 内网被动:CentOS 选 Linux by Zabbix agent,Windows 选 Windows by Zabbix agent
    • 跨公网主动:选带 active 的版本,Linux by Zabbix agent active / Windows by Zabbix agent active
  6. 保存。等约 1 分钟,主机列表里那台的"可用性 ZBX"图标变绿就成了。


收尾几个点

关于你截图里 7.0.20 那个"有新更新可用"——只是 7.0 系列出了更新的小版本补丁,不影响使用,不用现在动。要注意的是 agent 版本不要高于 server 版本,你 server 是 7.0,上面装的 agent2 也都用 7.0.x,正好匹配。

排错顺序:UI 不变绿时,先在被监控机 zabbix_agent2 -t agent.ping 看本地通不通;再从 BT 主机 telnet 被监控机IP 10050 看被动通道;主动模式则 tail -f /var/log/zabbix/zabbix_agent2.log 看有没有 "active check configuration update" 之类的日志,没有就是 Hostname 没对上或 10051 没放行。

要不要我把这整套流程,连同你这套 zabbix_axas 栈的实际容器名/网络,整理成一份可以存进你 Wiki.js 的 Markdown 运维文档?方便以后再上新机器照着抄。

你的 server 同时挂在四个网络上,这正常——它要分别和后端采集、数据库、前端通信。agent 只需要和 server 共享其中任意一个网络,用容器名就能互相解析。这里选 zabbix_axas_backend 最合理,因为后端网络就是 server 做监控采集的内部通道,agent 放这儿最干净。

把刚才第二步的命令改成这个网络名即可:

docker run -d \
  --name zabbix-agent \
  --network zabbix_axas_backend \
  --restart always \
  -e ZBX_SERVER_HOST="zabbix_axas-zabbix-server-1" \
  -e ZBX_HOSTNAME="Zabbix server" \
  zabbix/zabbix-agent2:alpine-7.0-latest

跑完验证一下两个容器确实在同一网络、能互通:

# 确认 agent 进了 backend 网络
docker inspect zabbix-agent -f '{{range $k,$v := .NetworkSettings.Networks}}{{$k}} {{end}}'

# 从 server 容器里 ping agent 容器名,通了说明 DNS 和网络都没问题
docker exec zabbix_axas-zabbix-server-1 ping -c 2 zabbix-agent

ping 能通之后,再回 Web UI 按之前说的第 3 步操作:数据采集 → 主机 → Zabbix server → 接口,把 Agent 接口的"连接到"改成 DNS,DNS 名称填 zabbix-agent,端口 10050,保存。等 1 分钟左右那条红色告警就会消失。

如果 ping 不通(比如这个镜像里没带 ping),可以改用下面这条直接测 agent 端口通不通,能返回内容就说明 server 找得到 agent:

docker exec zabbix_axas-zabbix-server-1 sh -c "nc -zv zabbix-agent 10050"

这一步搞定后,第二、三部分给 CentOS 和 Windows 装 agent 的流程完全不受影响,照原样走就行——那两类是独立主机,走的是 <BT主机IP>:10051,跟这个容器网络没关系。

弄完告警消失了告诉我,需要的话我接着帮你把这套 zabbix_axas 栈的网络结构和加主机流程整理成 Wiki.js 文档。

你的 server 同时挂在四个网络上,这正常——它要分别和后端采集、数据库、前端通信。agent 只需要和 server 共享其中任意一个网络,用容器名就能互相解析。这里选 zabbix_axas_backend 最合理,因为后端网络就是 server 做监控采集的内部通道,agent 放这儿最干净。

把刚才第二步的命令改成这个网络名即可:

docker run -d \
  --name zabbix-agent \
  --network zabbix_axas_backend \
  --restart always \
  -e ZBX_SERVER_HOST="zabbix_axas-zabbix-server-1" \
  -e ZBX_HOSTNAME="Zabbix server" \
  zabbix/zabbix-agent2:alpine-7.0-latest

跑完验证一下两个容器确实在同一网络、能互通:

# 确认 agent 进了 backend 网络
docker inspect zabbix-agent -f '{{range $k,$v := .NetworkSettings.Networks}}{{$k}} {{end}}'

# 从 server 容器里 ping agent 容器名,通了说明 DNS 和网络都没问题
docker exec zabbix_axas-zabbix-server-1 ping -c 2 zabbix-agent

ping 能通之后,再回 Web UI 按之前说的第 3 步操作:数据采集 → 主机 → Zabbix server → 接口,把 Agent 接口的"连接到"改成 DNS,DNS 名称填 zabbix-agent,端口 10050,保存。等 1 分钟左右那条红色告警就会消失。

如果 ping 不通(比如这个镜像里没带 ping),可以改用下面这条直接测 agent 端口通不通,能返回内容就说明 server 找得到 agent:

docker exec zabbix_axas-zabbix-server-1 sh -c "nc -zv zabbix-agent 10050"

这一步搞定后,第二、三部分给 CentOS 和 Windows 装 agent 的流程完全不受影响,照原样走就行——那两类是独立主机,走的是 <BT主机IP>:10051,跟这个容器网络没关系。

弄完告警消失了告诉我,需要的话我接着帮你把这套 zabbix_axas 栈的网络结构和加主机流程整理成 Wiki.js 文档。

先指出两个问题,你这台大概率是两个原因叠加导致"还是没有"。

问题一:模板是空的(这是没数据的直接原因)

你截图里"模板"那一栏是空白的。没有模板 = 这台主机一个监控项都没有,自然什么数据都采不到、可用性图标也不会变绿。这一步必须补:

点"模板"右边的 选择 → 搜索 Windows,根据下面问题二的判断选其一:

  • 如果是被动模式:选 Windows by Zabbix agent
  • 如果是主动模式:选 Windows by Zabbix agent active

(顺便:主机群组你挂在了 Linux servers 下,这台是 Windows,建议改成 Windows servers,不影响功能但便于管理。)

问题二:你的网络大概率走不通被动模式(这是更关键的)

你接口填的是 172.16.1.3,"连接到"选的是 IP,端口 10050 —— 这是被动模式,意思是让 Zabbix server 主动去连 172.16.1.3:10050

但你的 Zabbix server 是跑在那台香港主机(root@hk)上的,而 172.16.1.3内网私有地址。除非香港这台和你这台 Windows 之间有 VPN 打通,否则香港的 server 根本路由不到 172.16.1.3,被动模式怎么填都连不上。

先做一个判断,在香港主机上执行:

docker exec zabbix_axas-zabbix-server-1 nc -zv 172.16.1.3 10050
  • 能 succeeded/open → 网络是通的,那就是单纯模板没选,补上模板就好,被动模式可用。
  • 超时/connection refused → 香港 server 到不了这台内网机,必须改用主动模式(下面这套)。

改主动模式(如果上面测试不通,按这个走)

第 1 步:Windows 上改 agent 配置

打开 C:\Program Files\Zabbix Agent 2\zabbix_agent2.conf,确认这三行(<香港公网IP> 换成香港主机对外可访问的公网 IP):

Server=<香港公网IP>
ServerActive=<香港公网IP>:10051
Hostname=WINSERVER-1-3

Hostname 必须和 UI 主机名一字不差(你已确认是 WINSERVER-1-3)。改完在 services.msc 重启 "Zabbix Agent 2" 服务。

第 2 步:确认 Windows 能连到香港的 10051

Windows 上 PowerShell 跑:

Test-NetConnection <香港公网IP> -Port 10051

TcpTestSucceeded : True 才行。如果 False,检查:香港云服务器安全组是否放行 10051 入站(你 docker 里 server 已经映射了 0.0.0.0:10051,所以容器侧没问题,卡点通常在云安全组或宿主机防火墙)。

第 3 步:UI 里改对应设置

回到你这个主机编辑页:

  • 模板改成 Windows by Zabbix agent active
  • 接口里的 172.16.1.3 主动模式下其实用不到(主动检查靠 Hostname 不靠这个 IP),保留无所谓,但别再纠结它通不通
  • 保存

主动模式下,是 Windows 这台主动把数据推到香港的 10051,所以完全不需要香港能反向连到内网。


整体排错顺序就是:先确认 Windows 上服务在跑(services.msc 看 "Zabbix Agent 2" 正在运行)→ 判断网络方向(上面那条 nc 测试)→ 选对模式和模板。

你先跑一下那条 nc -zv 172.16.1.3 10050,把结果发我,我就能确定你该走被动还是主动,再帮你把剩下的对齐。

好消息:nc 显示 172.16.1.3:10050 open,说明香港 server 能直接连到这台 Windows 的 10050——你们之间网络是通的(应该是有 VPN 或专线打通了内网)。所以被动模式可用,不用改主动模式,你之前的接口配置(IP 172.16.1.3、端口 10050)是对的,就差一个模板。

现在这个弹窗是模板组,你要往下钻进去找具体模板。操作路径:

  1. 点你截图里高亮的 Templates/Operating systems(操作系统类模板都在这里)。
  2. 进去后会列出一堆系统模板,找到 Windows by Zabbix agent,点它选中。

注意别选错成这几个相近的:

  • Windows by Zabbix agent ✅ ← 选这个(被动模式,正好对应你现在的配置)
  • Windows by Zabbix agent active ❌ 这是主动模式,你不需要
  • 名字带 SNMP 的 ❌ 那是走 SNMP 不是 agent

选完模板回到主机编辑页,点 更新 保存。等 1 分钟左右,主机列表里 WINSERVER-1-3 的"可用性 ZBX"图标就会变绿、开始出数据。


顺带说一句:既然你这些机器都在 172.16.0.0/16 内网、香港 server 也能直连,那CentOS 那台也一样走被动模式就行——装好 agent2、配置文件里 Server=<香港主机内网IP>Hostname 取唯一名,UI 里加主机时接口填那台的 172.16.x.x + 10050、模板进 Templates/Operating systemsLinux by Zabbix agent,逻辑完全一致。

保存完看 WINSERVER-1-3 变绿了没,没变绿的话把主机列表里那个可用性图标悬停显示的报错发我,我接着帮你看。

posted @ 2026-07-10 10:30  crockery  阅读(5)  评论(0)    收藏  举报