Zabbix 添加监控主机
·
Zabbix 添加监控主机实战
plaintext
1.安装Agent → 2.配置文件 → 3.Web添加 → 4.链接模板 → 5.数据采集
Agent:10050 ◄────► Server:10051 ◄────► Proxy
│
▼
Database
2. Agent 安装与配置
2.1 Zabbix Agent2 安装
bash
# RHEL/CentOS
rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/8/x86_64/zabbix-release-6.4-1.el8.noarch.rpm
dnf install zabbix-agent2 -y && systemctl enable --now zabbix-agent2
# Debian/Ubuntu
wget https://repo.zabbix.com/zabbix/6.4/debian/pool/main/z/zabbix-release_6.4-1+debian12_all.deb
dpkg -i zabbix-release_6.4-1+debian12_all.deb && apt update && apt install zabbix-agent2 -y
# 源码编译
yum install -y gcc make pcre-devel openssl-devel
./configure --enable-agent --with-libpcre2 --with-openssl && make install
useradd -M -s /sbin/nologin zabbix
2.2 zabbix_agent2.conf 核心配置
bash
# /etc/zabbix/zabbix_agent2.conf
Server=192.168.1.100,192.168.1.101 # 被动模式允许的Server IP
ServerActive=192.168.1.100:10051 # 主动模式(Agent上报)
Hostname=web-server-01 # 必须与Web端完全一致
ListenIP=0.0.0.0
ListenPort=10050
# TLS加密(生产环境建议)
TLSConnect=psk
TLSAccept=psk
TLSPSKIdentity=PSK-ID-web-server-01
TLSPSKFile=/etc/zabbix/zabbix_agent2.psk
# 主动模式参数
RefreshActiveChecks=120
BufferSend=5
Timeout=30
Include=/etc/zabbix/zabbix_agent2.d/*.conf
2.3 主动模式 vs 被动模式
表格
| 模式 | Server角色 | Agent角色 | 适用场景 |
|---|---|---|---|
| 被动 | 主动拉取 | 被动响应 | 小规模 |
| 主动 | 等待接收 | 主动上报 | 大规模、NAT |
bash
# 被动模式
Server=192.168.1.100
# 主动模式
ServerActive=192.168.1.100:10051
Hostname=web-server-01
2.4 PSK 加密通信
bash
# 生成PSK密钥
openssl rand -hex 32 > /etc/zabbix/zabbix_agent2.psk
chown zabbix:zabbix /etc/zabbix/zabbix_agent2.psk && chmod 600 /etc/zabbix/zabbix_agent2.psk
# Agent配置
TLSConnect=psk
TLSAccept=psk
TLSPSKIdentity=PSK-ID-web-server-01
TLSPSKFile=/etc/zabbix/zabbix_agent2.psk
systemctl restart zabbix-agent2
# 测试
zabbix_get -s 127.0.0.1 -p 10050 -k "system.cpu.load" \
--tls-connect psk --tls-psk-identity="PSK-ID-web-server-01" \
--tls-psk-file=/etc/zabbix/zabbix_agent2.psk
3. Web 端添加主机
3.1 手动添加流程
plaintext
配置 → 主机 → 创建主机
主机名称: web-server-01 ← 与Agent一致
可见名称: Web服务器-01
群组: Linux servers
接口: Agent
IP: 192.168.1.101
端口: 10050
模板: Template OS Linux by Zabbix Agent2
状态: 已启用
表格
| 配置项 | 说明 |
|---|---|
| 主机名称 | Agent Hostname值,唯一标识 |
| 可见名称 | Web显示名称 |
| 群组 | 主机所属群组 |
| IP/端口 | Agent连接信息 |
3.2 模板链接与宏覆盖
表格
| 模板 | 监控内容 |
|---|---|
| Template OS Linux by Zabbix Agent2 | CPU/内存/磁盘/网络 |
| Template App MySQL | MySQL连接/查询 |
| Template App HTTP Service | HTTP响应/时间 |
主机宏覆盖: 配置 → 主机 → 宏标签
bash
{$CPU.LIMIT} = 80 # 覆盖CPU告警阈值
{$DISK.SIZE.MIN} = 10GB # 覆盖磁盘告警阈值
宏优先级: 主机宏 → 模板宏 → 全局宏
4. 自动发现与自动注册
4.1 自动发现(Server主动扫描)
plaintext
Discovery Rule → 扫描网段:10050 → 匹配条件 → 执行动作
配置: 配置 → 动作 → Discovery actions → 创建动作
- 条件: 发现状态=上线, IP范围=192.168.1.0/24
- 操作: 添加主机+链接模板+启用
4.2 自动注册(Agent主动上报)
plaintext
Agent主动上报 → Server接收 → 匹配Hostname/元数据 → 执行动作
Agent端配置
bash
ServerActive=192.168.1.100:10051
Hostname=web-server-01
HostMetadata=linux production
Server端动作: 配置 → 动作 → 自动注册动作
- 条件: 主机元数据包含linux
- 操作: 添加到群组+链接模板
4.3 两种方式对比
表格
| 特性 | 自动发现 | 自动注册 |
|---|---|---|
| 发起方 | Server主动扫描 | Agent主动上报 |
| Agent模式 | 被动 | 主动 |
| 适用场景 | 新机器已知IP | 云环境/动态扩容 |
5. 常用操作命令
5.1 zabbix_get 验证连通性
bash
zabbix_get -s 192.168.1.101 -p 10050 -k "agent.ping" # 返回1正常
zabbix_get -s 192.168.1.101 -p 10050 -k "system.cpu.load" # CPU负载
zabbix_get -s 192.168.1.101 -p 10050 -k "vfs.fs.size[/,pused]" # 磁盘
# PSK测试
zabbix_get -s 192.168.1.101 -p 10050 -k "system.cpu.load" \
--tls-connect psk --tls-psk-identity="PSK-ID-web-server-01" \
--tls-psk-file=/etc/zabbix/zabbix_agent2.psk
5.2 zabbix_sender 主动推送
bash
# 单个值
zabbix_sender -z 192.168.1.100 -p 10051 -s "web-server-01" -k "custom.item" -o "123"
# 批量文件(格式: host key value)
zabbix_sender -z 192.168.1.100 -p 10051 -i /tmp/data.txt
# 带时间戳
zabbix_sender -z 192.168.1.100 -p 10051 -s "web-server-01" -k "custom.item" -o 123 -t $(date +%s)
5.3 Agent日志排查
bash
/var/log/zabbix/zabbix_agent2.log
tail -f /var/log/zabbix/zabbix_agent2.log
grep -i error /var/log/zabbix/zabbix_agent2.log
# 调试模式: DebugLevel=4 && systemctl restart zabbix-agent2
5.4 Zabbix API批量添加主机
python
#!/usr/bin/env python3
"""Zabbix API批量添加主机 - pip install zabbix-api"""
from zabbix_api import ZabbixAPI
import json
class ZabbixHostManager:
def __init__(self, server, username, password):
self.zapi = ZabbixAPI(server=server)
self.zapi.login(username, password)
print(f"已连接: {server}")
def get_group_id(self, name):
r = self.zapi.hostgroup.get({"output": "extend", "filter": {"name": [name]}})
return r[0]['groupid'] if r else None
def get_template_ids(self, names):
t = self.zapi.template.get({"output": "extend", "filter": {"host": names}})
return [{"templateid": x['templateid']} for x in t]
def create_host(self, hostname, ip, group, templates, port=10050):
gid = self.get_group_id(group)
if not gid:
print(f"⚠ 群组不存在: {group}")
return None
try:
host = self.zapi.host.create({
"host": hostname,
"interfaces": [{"type": 1, "main": 1, "useip": 1, "ip": ip, "port": str(port)}],
"groups": [{"groupid": gid}],
"templates": self.get_template_ids(templates)
})
print(f"✓ {hostname} 创建成功")
return host['hostids'][0]
except Exception as e:
print(f"✗ {hostname} 失败: {e}")
return None
def batch_create(self, hosts):
return [{"hostname": h["hostname"],
"id": self.create_host(h["hostname"], h["ip"], h["group"], h.get("templates", []))}
for h in hosts]
if __name__ == "__main__":
manager = ZabbixHostManager("http://192.168.1.100/zabbix", "Admin", "zabbix")
hosts = [
{"hostname": "web-server-01", "ip": "192.168.1.101",
"group": "Linux servers", "templates": ["Template OS Linux by Zabbix Agent2"]},
{"hostname": "mysql-server-01", "ip": "192.168.1.102",
"group": "Database servers", "templates": ["Template OS Linux by Zabbix Agent2", "Template App MySQL"]},
]
print(json.dumps(manager.batch_create(hosts), indent=2, ensure_ascii=False))
6. 常见问题与排查
6.1 主机不可达(Get value from agent failed)
bash
systemctl status zabbix-agent2
ss -tlnp | grep 10050
zabbix_get -s 192.168.1.101 -p 10050 -k "agent.ping"
firewall-cmd --add-port=10050/tcp --permanent && firewall-cmd --reload
setsebool -P zabbix_can_network=1
tail -50 /var/log/zabbix/zabbix_agent2.log
表格
| 原因 | 解决方案 |
|---|---|
| Agent未启动 | systemctl start zabbix-agent2 |
| 防火墙阻止 | 开放10050/tcp |
| Hostname不匹配 | Agent与Web主机名必须一致 |
| TLS配置错误 | 确认PSK密钥一致 |
6.2 数据采集不到
bash
tail -f /var/log/zabbix/zabbix_agent2.log | grep -i error
zabbix_get -s 192.168.1.101 -p 10050 -k "system.cpu.load"
# 返回ZBX_NOTSUPPORTED表示不支持该键值
表格
| 原因 | 解决方案 |
|---|---|
| 键值拼写错误 | 参考官方文档确认 |
| 缺少依赖 | 安装相关工具 |
| 脚本无权限 | chmod +x /path/to/script |
| 模板未链接 | 确认模板已正确链接 |
6.3 自动发现/注册不生效
bash
grep -E "ServerActive|Hostname" /etc/zabbix/zabbix_agent2.conf
tail -f /var/log/zabbix/zabbix_server.log | grep -i auto
systemctl restart zabbix-agent2
表格
| 原因 | 解决方案 |
|---|---|
| 动作未启用 | 确认动作状态为"已启用" |
| 条件不匹配 | 检查主机元数据/名称 |
| 群组不存在 | 先创建群组 |
7. 最佳实践
7.1 命名规范
plaintext
格式: {环境}-{角色}-{序号}
示例: prod-web-01, prod-mysql-01
⚠️ 主机名必须唯一,与Agent Hostname一致
7.2 群组划分
表格
| 类型 | 示例 |
|---|---|
| 按环境 | Production / Staging / Development |
| 按角色 | Web Servers / Database Servers |
7.3 模板继承
plaintext
层级1: Template OS Linux by Zabbix Agent2
↓
层级2: Template App MySQL (链接L1)
↓
层级3: Template Business Web (链接L2)
⚠️ 建议不超过3层
7.4 标签管理
bash
# 触发器标签
env:production # 环境
service:mysql # 服务
severity:high # 严重程度
team:ops # 负责团队
7.5 批量操作
bash
# Ansible批量部署
ansible -i hosts all -m yum -a "name=zabbix-agent2 state=present" -b
ansible all -m template -a "src=zabbix_agent2.conf.j2 dest=/etc/zabbix/zabbix_agent2.conf" -b
# CSV格式: hostname,ip,group,templates
# prod-web-01,192.168.1.101,Production Linux,"Template OS Linux by Zabbix Agent2"
总结
plaintext
┌────────────────────────────────────────────────────────────────┐
│ 1. Agent安装 │ Agent2推荐 │ 主动模式适合大规模 │
│ 2. 配置 │ Hostname与Web一致 │ PSK加密生产环境建议 │
│ 3. Web添加 │ 主机名=Agent Hostname │ 链接模板+宏覆盖 │
│ 4. 自动注册 │ 适合云环境/动态扩容 │
│ 5. 验证 │ zabbix_get/sender │ 查看日志排查 │
└────────────────────────────────────────────────────────────────┘
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)