zabbix_get [4818]: Get value error: ZBX_TCP_READ() failed: [104] Connection reset by peer zabbix_get [4818]: Check access restrictions in Zabbix agent configuration
时间: 2025-07-19 17:28:08 浏览: 5
<think>我们正在解决Zabbix agent配置中的访问限制导致zabbix_get获取数据失败的问题,具体错误是:
"zabbix_get error: ZBX_TCP_READ() failed: [104] Connection reset by peer Check access restrictions in Zabbix agent configuration"
这个错误通常发生在Zabbix服务端(或使用zabbix_get命令的机器)尝试连接Zabbix agent时,由于agent端的访问限制(如IP白名单)而拒绝连接。下面我们将逐步排查:
### 1. **检查Zabbix agent的访问控制配置**
Zabbix agent通过`Server`和`ServerActive`参数控制允许哪些主机连接它。这两个参数在agent的配置文件(通常是`/etc/zabbix/zabbix_agentd.conf`或`/etc/zabbix/zabbix_agent2.conf`)中设置。
- **`Server`参数**:定义允许哪些主机通过被动模式(服务端拉取数据)连接agent。如果服务端不在这个列表中,连接会被拒绝。
- **`ServerActive`参数**:定义允许哪些主机通过主动模式(agent推送数据)连接。但注意,`zabbix_get`命令使用的是被动模式,所以主要关注`Server`参数。
请打开agent的配置文件,检查以下内容:
```ini
# 示例:允许192.168.1.100和192.168.1.101的服务端连接
Server=192.168.1.100,192.168.1.101
# 或者允许一个网段
Server=192.168.1.0/24
```
**重要提示**:
- 确保配置中包含了运行`zabbix_get`命令的服务端IP(或网段)。
- 如果配置的是`127.0.0.1`(如引用[1]中的错误示例),则只有本机可以连接。如果服务端和agent不在同一台机器,必须改为服务端的实际IP或网段[^1][^3]。
- 多个IP或网段用逗号分隔。
修改后重启agent服务:
```bash
systemctl restart zabbix-agent # 或 zabbix-agent2
```
### 2. **检查agent的监听设置**
确保agent监听在正确的IP地址上(尤其是当机器有多个网卡时)。默认情况下,agent监听在`0.0.0.0`(所有接口)。检查配置:
```ini
ListenIP=0.0.0.0 # 默认监听所有接口,无需修改
```
如果这里指定了某个IP(如`127.0.0.1`),则只有本机可以连接。建议注释掉或改为`0.0.0.0`。
### 3. **验证服务端IP是否在允许列表中**
在agent机器上,使用以下命令测试服务端到agent的连通性(假设agent端口是10050):
```bash
# 从服务端IP(假设为192.168.220.1)测试
nc -zv 192.168.220.125 10050
```
如果显示`Connection refused`,则可能是:
- 防火墙阻挡(见下一步)
- agent未运行
- agent监听端口不是10050(检查配置文件中的`ListenPort`)
### 4. **检查防火墙设置**
在agent机器上,确保开放了10050端口,并允许服务端IP访问:
```bash
# 对于firewalld
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.220.1" port port="10050" protocol="tcp" accept' --permanent
firewall-cmd --reload
# 或临时允许所有来源(测试用)
firewall-cmd --add-port=10050/tcp
```
### 5. **检查SELinux设置**
如果SELinux开启,可能阻止连接:
```bash
# 临时禁用SELinux(测试用)
setenforce 0
# 永久允许Zabbix网络连接
setsebool -P zabbix_can_network=1
```
### 6. **检查agent日志**
查看agent日志(位置通常是`/var/log/zabbix/zabbix_agentd.log`或`/var/log/zabbix/zabbix_agent2.log`)是否有拒绝连接的记录:
```bash
tail -f /var/log/zabbix/zabbix_agentd.log
```
日志中如果出现类似`denied connection from [服务端IP]`的消息,则确认是访问限制问题。
### 7. **使用zabbix_get测试**
在服务端或允许的主机上执行:
```bash
zabbix_get -s 客户端IP -p 10050 -k "system.uptime"
```
**参数说明**:
- `-s`: 客户端IP
- `-p`: 客户端端口(默认10050)
- `-k`: 监控项键值
### 总结
错误"Connection reset by peer"通常由以下原因导致:
1. Agent的`Server`参数未包含服务端IP(最常见)[^1][^3]。
2. 防火墙或SELinux阻止了连接。
3. Agent未运行或监听端口错误。
请根据以上步骤逐一排查。
§§相关问题§§
1. 如何配置Zabbix agent的IP白名单?
2. Zabbix agent日志中出现"denied connection"如何解决?
3. 如何测试Zabbix agent的端口连通性?</think>### 排查 Zabbix agent 访问限制导致的数据获取失败
#### 核心问题分析
错误信息 `zabbix_get error: ZBX_TCP_READ failed Connection reset by peer` 表明 Zabbix 服务端在连接 agent 时被强制断开,这通常由 agent 的访问控制配置错误引起。以下是关键排查步骤:
---
### 1. **检查 agent 的访问控制配置**(首要修复点)
在 agent 配置文件(`zabbix_agentd.conf` 或 `zabbix_agent2.conf`)中检查以下参数:
```ini
# 必须包含 Zabbix server/proxy 的 IP
Server=192.168.220.100 # 服务端IP(非127.0.0.1)
# 主动模式需额外配置
ServerActive=192.168.220.100 # 服务端IP
# 关键:允许哪些主机连接(重要!)
AllowKey=system.* # 允许的监控项键值
AllowRoot=0 # 禁止root权限(安全建议)
DenyKey=system.cpu.* # 禁止的监控项键值
```
**修复要点**:
- 将 `Server` 和 `ServerActive` 中的 `127.0.0.1` 改为服务端真实 IP(如引用[1][^3]所示)
- 若需允许所有连接(测试用),添加:
```ini
Allow=0.0.0.0/0 # 允许所有IP连接(临时测试)
```
---
### 2. **验证网络连通性与端口**
在服务端执行测试:
```bash
# 测试端口连通性
nc -zv 192.168.220.125 10050
# 使用zabbix_get手动获取数据(关键诊断)
zabbix_get -s 192.168.220.125 -k "system.uptime"
```
- 若返回 `Connection refused` → 检查防火墙/agent运行状态
- 若返回 `Connection reset by peer` → 确认访问限制配置
---
### 3. **防火墙与 SELinux 配置**
**在 agent 端操作**:
```bash
# 开放10050端口
firewall-cmd --add-port=10050/tcp --permanent
firewall-cmd --reload
# SELinux 设置
setsebool -P zabbix_can_network=1
semanage port -a -t zabbix_port_t -p tcp 10050
```
---
### 4. **检查 agent 运行状态与日志**
```bash
# 查看 agent 状态
systemctl status zabbix-agent2
# 实时监控日志(关键错误定位)
tail -f /var/log/zabbix/zabbix_agent2.log
```
**日志关键线索**:
- `denied connection from [IP]` → 访问控制列表阻止
- `access to key [key] denied` → AllowKey/DenyKey 配置错误
---
### 5. **配置文件路径确认(源码安装场景)**
若通过源码安装(如引用[2][^2]),配置文件可能在:
```bash
/usr/local/etc/zabbix_agentd.conf # 常见路径
```
使用绝对路径检查配置:
```bash
grep -E "Server|ServerActive|Allow" /usr/local/etc/zabbix_agentd.conf
```
---
### 总结:优先检查项
| 步骤 | 检查点 | 修复方法 |
|------|-------------------------|-----------------------------------|
| 1 | `Server` 是否为服务端IP | 修改为真实IP(非127.0.0.1)[^1][^3] |
| 2 | `Allow` 是否包含服务端 | 添加服务端IP或 `0.0.0.0/0`(测试) |
| 3 | 防火墙端口开放 | 开放10050 TCP 端口 |
| 4 | agent 日志拒绝记录 | 调整 `AllowKey/DenyKey` |
> ⚠️ 修改配置后必须重启服务:`systemctl restart zabbix-agent2`
阅读全文
相关推荐


















