当前位置: 首页 > news >正文

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 Agent2CPU/内存/磁盘/网络
Template App MySQLMySQL连接/查询
Template App HTTP ServiceHTTP响应/时间

主机宏覆盖: 配置 → 主机 → 宏标签

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 │ 查看日志排查 │ └────────────────────────────────────────────────────────────────┘
http://www.cnnetsun.cn/news/2508959.html

相关文章:

  • 【东方博宜】1000 - 熟悉一下Online Judge的环境
  • git的使用教程
  • 在模型广场对比不同模型的响应速度与风格选择合适接口
  • 大模型API中转站工程选型:OpenAI兼容、成本和稳定性怎么评估
  • Diablo Edit2终极指南:5分钟解决暗黑2存档编辑的所有痛点
  • Chrome二维码插件:本地化跨设备数据流转技术方案
  • 独立开发者如何利用 Taotoken 的 Token Plan 套餐控制项目预算
  • 原神抽卡分析终极指南:免费开源工具帮你掌握每次祈愿数据
  • 三步实现智能二维码转换:告别复制粘贴的跨设备链接分享方案
  • 想彻底改造Office界面?这个免费工具让你5分钟搞定个性化工作区
  • 五大处理器架构深度解析与高阶选型指南
  • OBS多平台直播终极指南:obs-multi-rtmp插件高效实现多路RTMP推流
  • 5个关键技巧:用Source Sans 3打造专业级UI字体系统
  • 如何快速掌握DLSS Swapper:新手完整入门指南
  • 互联网大厂 Java 求职面试:揭秘核心技术与实际场景
  • 互联网大厂 Java 求职者面试:音视频、微服务与支付服务的技术探讨
  • 如何高效使用Supervisely:计算机视觉标注完整实践指南
  • AI Agent 工具调用系统设计:让大模型掌控世界
  • 告别公网IP!用OpenWRT软路由+Zerotier实现远程访问NAS和智能家居(保姆级教程)
  • Arm嵌入式跟踪技术(ETE)原理与实战指南
  • FinalShell的密码安全吗?从配置文件解密看本地存储风险
  • 碧蓝航线全皮肤解锁终极指南:Perseus补丁5分钟快速上手教程
  • STM32G431时钟树配置避坑指南:从CubeMX图形化到代码生成的完整流程(蓝桥杯嵌入式备赛)
  • Mac Mouse Fix终极指南:如何让普通鼠标在macOS上超越苹果触控板
  • 如何利用 AI Agent 优化日常办公自动化流程?
  • 3步解决FanControl风扇控制软件配置难题:从崩溃到稳定运行的完整指南
  • csp信奥赛C++高频考点专项训练之前缀和差分 --【二维前缀和】:最大正方形
  • 微信聊天记录守护者:用技术温度守护你的数字记忆
  • HoRain云--大语言模型基础(LLM)
  • 如何快速掌握Diablo Edit2:3步完成暗黑2角色定制与游戏体验优化