3

39-Zabbix实现SNMP网络设备监控及分布式Proxy代理实现和自动化运维

 1 year ago
source link: https://blog.51cto.com/mooreyxia/5973709
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

39-Zabbix实现SNMP网络设备监控及分布式Proxy代理实现和自动化运维

精选 原创

监控网络设备 SNMP

  • 即 Simple Network Management Protocol 简单网络管理协议,属于TCP/IP五层协议中的应用层协议,用于网络管理的协议,SNMP主要用于网络设备的管理。

SNMP 工作原理 - SNMP网络设备分为NMS和Agent两种

  • NMS(Network Management Station,网络管理站)是SNMP网络的管理者,NMS是运行SNMP客户端管理程序的工作站,能够提供友好的人机交互界面,方便网络管理员完成绝大多数的网络管理工作。
  • Agent是SNMP网络的被管理者。Agent是驻留在设备上的一个进程,负责接收、处理来自NMS的请求报文。在一些紧急情况下,如接口状态发生改变等,Agent也会主动通知NMS。
  • NMS和Agent之间通过SNMP协议来交互管理信息。

SNMP管理进程与代理进程之前为了交互信息,定义了5种报文:

get-request:这个操作是由管理进程发起,向代理进程处请求提取一个或多个参数值。
get-next-request:这个操作是由管理进程发起,向从代理进程处提取一个或多个参数的下一个参数值。
get-response:这个操作是由代理进程发出的,向管理进程返回的一个或多个参数值。
set-request:这个操作是由管理进程发起,对代理进程设置一个或多个参数值。
trap:这个操作是由代理进程主动发出的报文,通知管理进程有某些事情发生。

MIB 和 OID

MIB中存放了对每个对象都指定唯 一的对象标识OID, OID是一种数据类型,它指明一种“授权”命名的对象。“授权”的意思就是这些标识不是随便分配的,它是由一些权威机构进行管理和分配的。对象标识是一个整数序列,以点(“.”)分隔。这些整数构成一个树型结构,类似于DNS或Unix的文件系统。对象标识从树的顶部开始,顶部没有标识,以root表示,树上的每个结点同时还有一个文字名。例如标识 .1.3.6.1.2.1和iso.org.dod.internet.memt.mib对应。

SNMP中用到树型结构可以去下面网站查看 - 利用树形结构的层级关系可以做到访问控制
http://www.oid-info.com/index.htm

例如:
系统信息: sysDescr .1.3.6.1.2.1.1.1
CPU负载: l minute Load: .1.3.6.1.4.1.2021.10.1.3.1
内存使用: Total swap size:.1.3.6.1.4.1.2021.4.3.0
硬盘使用: Path where the disk is mounted: .1.3.6.1.4.1.2021.9.1.2.1
....
39-Zabbix实现SNMP网络设备监控及分布式Proxy代理实现和自动化运维_自动注册

案例:利用 Zabbix 监控 Linux 主机

#在 Zabbix Agent 安装 SNMP 协议并配置
[root@ubuntu2204 ~]#apt -y install snmpd
[root@ubuntu2204 ~]#snmpd -v

NET-SNMP version: 5.9.1
Web: http://www.net-snmp.org/
Email: [email protected]
[root@ubuntu2204 ~]#vim /etc/snmp/snmpd.conf
[root@ubuntu2204 ~]#systemctl restart snmpd
[root@ubuntu2204 ~]#cat /etc/snmp/snmpd.conf
...
# agentaddress: The IP address and port number that the agent will listen on.
# By default the agent listens to any and all traffic from any
# interface on the default SNMP port (161). This allows you to
# specify which address, interface, transport type and port(s) that you
# want the agent to listen on. Multiple definitions of this token
# are concatenated together (using ':'s).
# arguments: [transport:]port[@interface/address],...

#agentaddress 127.0.0.1,[::1]
agentaddress 0.0.0.0

###########################################################################
# SECTION: Access Control Setup
#
# This section defines who is allowed to talk to your running
# snmp agent.

# Views
# arguments viewname included [oid]

# system + hrSystem groups only
view systemonly included .1.3.6.1.2.1.1
view systemonly included .1.3.6.1.2.1.25.1
view systemonly included .1


# rocommunity: a SNMPv1/SNMPv2c read-only access community name
# arguments: community [default|hostname|network/bits] [oid | -V view]

# Read-only access to everyone to the systemonly view
#rocommunity public default -V systemonly
rocommunity 123456 default -V systemonly
#rocommunity6 public default -V systemonly
rocommunity6 123456 default -V systemonly

...
[root@ubuntu2204 ~]#ss -nultp|grep snmp
udp UNCONN 0 0 0.0.0.0:161 0.0.0.0:* users:(("snmpd",pid=17630,fd=6))
[root@ubuntu2204 ~]#systemctl status snmpd
● snmpd.service - Simple Network Management Protocol (SNMP) Daemon.
Loaded: loaded (/lib/systemd/system/snmpd.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2022-12-27 19:03:44 CST; 8min ago
Main PID: 17074 (snmpd)
Tasks: 1 (limit: 9365)
Memory: 3.6M
CPU: 405ms
CGroup: /system.slice/snmpd.service
└─17074 /usr/sbin/snmpd -LOw -u Debian-snmp -g Debian-snmp -I -smux mteTrigger mteTriggerConf -f

12月 27 19:03:43 ubuntu2204.wang.org systemd[1]: snmpd.service: Deactivated successfully.
12月 27 19:03:43 ubuntu2204.wang.org systemd[1]: Stopped Simple Network Management Protocol (SNMP) Daemon..
12月 27 19:03:43 ubuntu2204.wang.org systemd[1]: Starting Simple Network Management Protocol (SNMP) Daemon....
12月 27 19:03:43 ubuntu2204.wang.org snmpd[17074]: /etc/snmp/snmp.conf: line 11: Warning: Unknown token: agentaddress.
12月 27 19:03:43 ubuntu2204.wang.org snmpd[17074]: /etc/snmp/snmp.conf: line 12: Warning: Unknown token: view.
12月 27 19:03:43 ubuntu2204.wang.org snmpd[17074]: /etc/snmp/snmp.conf: line 13: Warning: Unknown token: view.
12月 27 19:03:43 ubuntu2204.wang.org snmpd[17074]: /etc/snmp/snmp.conf: line 14: Warning: Unknown token: view.
12月 27 19:03:43 ubuntu2204.wang.org snmpd[17074]: /etc/snmp/snmp.conf: line 16: Warning: Unknown token: rocommunity.
12月 27 19:03:43 ubuntu2204.wang.org snmpd[17074]: /etc/snmp/snmp.conf: line 17: Warning: Unknown token: rocommunity6.
12月 27 19:03:44 ubuntu2204.wang.org systemd[1]: Started Simple Network Management Protocol (SNMP) Daemon..

测试 SNMP 是否可以访问

  • 在 Zabbix Server (也可以在其它主机上)安装 SNMP工具 net-snmp-utils
  • 注意: 在实际生产环境中Zabbix Server 在进行 SNMP 监测时,无需在 Zabbix Server 安装此工具
案例: snmpwalk 获取 SNMP代理端的信息
[root@ubuntu2204 ~]#snmpwalk --help
USAGE: snmpwalk [OPTIONS] AGENT [OID]
...
常用选项:
-h:显示帮助。
-v:指定snmp的版本,1或者2c或者3。
-c:指定连接设备SNMP密码。
—r:指定重次次数.默认为0次
-l:指定安全级别: noAuthNoPriv|authNoPriv|authPriv。
-a:验证协议:MD5|SHA。只有-l指定为authNoPriv或authPriv时才需要。
-A∶验证字符串。只有-1指定为authNoPriv或authPriv时才需要
-x:加密协议:DES。只有-l指定为authPriv时才需要
-x:加密字符串。只有-l指定为authPriv时才需要

[root@ubuntu2204 ~]#apt -y install snmp
#获取系统信息
[root@ubuntu2204 ~]#snmpwalk -v 2c -c123456 10.0.0.202 .1.3.6.1.2.1.1.1
iso.3.6.1.2.1.1.1.0 = STRING: "Linux ubuntu2204.mooreyxia.org 5.15.0-52-generic #58-Ubuntu SMP Thu Oct 13 08:03:55 UTC 2022 x86_64"
#获取内存
[root@ubuntu2204 ~]#snmpwalk -v 2c -c123456 10.0.0.202 .1.3.6.1.4.1.2021.4.5.0
iso.3.6.1.4.1.2021.4.5.0 = INTEGER: 8105800
#获取接口MAC
[root@ubuntu2204 ~]#snmpwalk -v 2c -c123456 10.0.0.202 .1.3.6.1.2.1.2.2.1.6
iso.3.6.1.2.1.2.2.1.6.1 = ""
iso.3.6.1.2.1.2.2.1.6.2 = Hex-STRING: 00 0C 29 F6 07 67
#获取接口当前带宽[bps]
[root@ubuntu2204 ~]#snmpwalk -v 2c -c123456 10.0.0.202 .1.3.6.1.2.1.2.2.1.5
iso.3.6.1.2.1.2.2.1.5.1 = Gauge32: 10000000
iso.3.6.1.2.1.2.2.1.5.2 = Gauge32: 1000000000
....

在配置中添加需要监控的SNMP代理端

39-Zabbix实现SNMP网络设备监控及分布式Proxy代理实现和自动化运维_Zabbix_02
39-Zabbix实现SNMP网络设备监控及分布式Proxy代理实现和自动化运维_网络自动发现_03
39-Zabbix实现SNMP网络设备监控及分布式Proxy代理实现和自动化运维_网络自动发现_04
39-Zabbix实现SNMP网络设备监控及分布式Proxy代理实现和自动化运维_ZabbixAPI_05

Zabbix 分布式实现 Proxy

39-Zabbix实现SNMP网络设备监控及分布式Proxy代理实现和自动化运维_Zabbix_06

Zabbix Proxy 工作原理

  • zabbix作为一个分布式监控系统(分布式监控解决方案),支持通过代理(proxy)收集zabbix agent的监控数据,然后由zabbix proxy再把数据发送给zabbix server,也就是zabbix proxy 可以代替zabbix server收集监控数据,然后把数据汇报给zabbix server,所以zabbix proxy可以在一定程度上分担了zabbixserver的数据收集压力,从而降低了数据的采集时间、也相应的增加了zabbix server的监控能力。
  • zabbix proxy在主动模式下要主动地向zabbix server周期性的申请获取zabbix agent的监控项信息,此模式可以大幅降低Zabbix Server的压力,生产推荐使用
  • Zabbix Proxy在被动模式下要被动地等待zabbix server的连接,并接受zabbix server发送的监控项指令,然后再由zabbix proxy向zabbix agent发起请求获取数据。

Zabbix Proxy 使用场景

  • 监控远程区域设备,尤其是多机房和多个云环境时
  • 监控网络不稳定区域,避免跨网段监控的告警不及时
  • 当需要监控设备众多时,使用它来减轻 Zabbix Server 的压力
  • 简化分布式监控的维护,无需各位创建 Zabbix Server,统一管理策略

Zabbix proxy 功能列表

https://www.zabbix.com/documentation/5.0/zh/manual/distributed_monitoring/proxies
https://www.zabbix.com/documentation/4.0/zh/manual/distributed_monitoring/proxies

*zabbix proxy 是一个数据收集器,它不计算触发器、不处理事件、不发送报警。

Zabbix Proxy 安装和配置

  • 注意: Zabbix Proxy的大版本必须要和zabbix server版本相同,否则很可能会导致出现 zabbix server与zabbix proxy不兼容问题
#Ubuntu20.04
[root@zabbix-proxy]#wget
https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbixrelease_
5.0-1%2Bfocal_all.deb
[root@zabbix-proxy]#dpkg -i zabbix-release_5.0-1+bionic_all.deb
[root@zabbix-proxy]#apt update
[root@zabbix-proxy]#apt -y install zabbix-proxy-mysql zabbix-agent
[root@zabbix-proxy]#systemctl enable zabbix-proxy.service zabbix-agent.service

为Zabbix Proxy 创建一个单独的数据库(Mysql 注意创建数据库初期更改身份验证方式为mysql_native_password)

注意:Zabbix server和Zabbix proxy不能使用相同的数据库。 如果它们安装在同一主机上,则proxy数据库必须具有不同的名称

#为主动模式的 Proxy 准备独立的数据库
[root@zabbix-proxy-active ~]#apt -y install mysql-server
[root@zabbix-proxy-active ~]#mysql
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.17 |
+-----------+
1 row in set (0.00 sec)
mysql> create database zabbix_proxy_active character set utf8 collate utf8_bin;
mysql> create user proxy@'localhost' identified by '123456';
mysql> grant all on zabbix_proxy_active.* to proxy@'localhost' ;
#从Proxy主机导入和zabbix Server不同的数据库和表
[root@zabbix-proxy-active ~]#apt -y install mysql
#包安装的路径
[root@zabbix-proxy-active ~]#zcat /usr/share/doc/zabbix-proxymysql/schema.sql.gz | mysql -uproxy -p123456 -h10.0.0.101 zabbix_proxy_active

#为被动模式的 proxy 准备独立的数据库
[root@zabbix-proxy-passive ~]#apt -y install mysql-server
[root@zabbix-proxy-passive ~]#mysql
mysql> create database zabbix_proxy_passive character set utf8 collate utf8_bin;
mysql> grant all on zabbix_proxy_passive.* to proxy@'10.0.0.%' identified by
'123456' ;
#创建被动模式使用的数据库和表
[root@zabbix-proxy-passive zabbix-5.0.13]#pwd
/root/zabbix-5.0.13
#源码编译的路径
[root@zabbix-proxy-passive zabbix-5.0.13]#mysql -uproxy -p123456 zabbix_proxy_passive < database/mysql/schema.sql

主动模式配置

[root@zabbix-proxy-active ~]#grep '^[^#]' /etc/zabbix/zabbix_proxy.conf
ProxyMode=0 #主动模式为0,被动模式为1,默认为0即主动模式
Server=10.0.0.100 #指向Zabbix Server
Hostname=zabbix-proxy-active #此名称必须和后面Web管理页的agent代理程序名称相同
DBHost=localhost #MySQL服务器地址
DBName=zabbix_proxy_active #MySQL 数据库名
DBUser=proxy #连接MySQL的用户
DBPassword=123456 #连接MySQL的用户密码
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=0
DebugLevel=4 #指定日志级别,默认为3,值越大日志越详细
EnableRemoteCommands=1 #开启远程命令,允许server到proxy上执行命令,在故障
自愈时使用
PidFile=/var/run/zabbix/zabbix_proxy.pid
SocketDir=/var/run/zabbix
ProxyLocalBuffer=360 #当proxy将数据发送给server后将数据仍在本地保存多少时间,
默认不保留
ProxyOfflineBuffer=720 #当proxy和server无法连接时将数据在本地保存多长时间,默认
1小时
HeartbeatFrequency=60 #server端用来检测proxy可用性的心跳信息的时间间隔,被动模
式无效
ConfigFrequency=60 #每间隔多少时间到server获取监控项,在agent更新端监控
项,只在主动模式有效,默认3600s
DataSenderFrequency=60 #数据发送的间隔时间,只在主动模式有效,默认1s,建议加长
JavaGateway=10.0.0.101 #指向JAVA gateway主机
StartJavaPollers=10 #指定开启的进程数,默认为0,即不开启
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
CacheSize=8M #当主机数量很多时,会将获取的监控项存放在缓存中,生产中
设置2G
StartDBSyncers=4 #启动多少个线程和数据库连接
HistoryCacheSize=16M #保存agent发送过来的监控数据的内存空间大小,生产中设置
2G
HistoryIndexCacheSize=4M #历史数据的索引
Timeout=30 #获取数据的最长等待时间
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000 #慢查询时长
[root@zabbix-proxy-active ~]#systemctl restart zabbix-proxy.service
#Zabbix Proxy 监听10051/tcp端口
[root@zabbix-proxy-active ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 100 127.0.0.1:25 0.0.0.0:*
LISTEN 0 128 0.0.0.0:10050 0.0.0.0:*
LISTEN 0 128 0.0.0.0:10051 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 100 [::1]:25 [::]:*
LISTEN 0 128 [::]:10050 [::]:*
LISTEN 0 128 [::]:10051 [::]:*
LISTEN 0 70 *:33060 *:*
LISTEN 0 128 *:3306 *:*

修改Zabbix Agent 配置文件为主动模式的 Zabbix Proxy

[root@centos8 ~]#vim /apps/zabbix_agent/etc/zabbix_agentd.conf
[root@centos8 ~]#grep '^[^#]' /apps/zabbix_agent/etc/zabbix_agentd.conf
LogFile=/tmp/zabbix_agentd.log
Server=10.0.0.100,10.0.0.101 #指向Zabbix Server(可选)和Zabbix Proxy(必
选)
ServerActive=10.0.0.101 #指向Zabbix Proxy
Hostname=10.0.0.103
[root@centos8 ~]#systemctl restart zabbix-agent.service

在 Zabbix Server 上添加代理 Proxies

管理-- agent 代理程序(英文环境为Proxies,汉化翻译不准确)

39-Zabbix实现SNMP网络设备监控及分布式Proxy代理实现和自动化运维_网络自动发现_07
39-Zabbix实现SNMP网络设备监控及分布式Proxy代理实现和自动化运维_Zabbix_08

被动模式配置

# vim /apps/zabbix_proxy/etc/zabbix_proxy.conf
ProxyMode=1 #0为主动,1为被动,此为默认
server=10.0.0.100 #zabbix server服务器的地址
Hostname=zabbix-proxy-passive-wang #代理服务器名称,需要与zabbix server添加代理时候的
proxy
DBHost=10.0.0.101 #数据库服务器地址
DBName=zabbix_proxy_passive #数据库库名称
DBUser=proxy #连接数据库的用户名称
DBPassword=123456 #数据库用户密码
DBPort=3306 #数据库端口
ListenPort=10051 #zabbix proxy监听端口
LogFile=/tmp/zabbix_proxy.log
Enab1eRemoteCommands=1 #允许zabbix server执行远程命令
ProxyLocalBuffer=720#已经提交到zabbix server的数据保留时间
ProxyofflineBuffer=720 #未提交到zabbix server的时间保留时间
ConfigFrequency=5 #间隔多少秒从zabbix server获取监控项信息,此横在被动模式无效
startPo1lers=20 #启动的数据采集器数量
javaGatewayPort=10052 #Java gateway服务端口
startJavaPollers=20 #启动多少个线程采集数据
cachesize=2G #保存监控项而占用的最大内存
Historycachesize=2G #保存监控历史数据占用的最大内存
HistoryIndexcachesize=128M #历史索引缓存的大小
Timeout=30 #监控项超时时间,单位为秒
LogslowQueries=3000 #毫秒,多久的数据库查询会被记录到日志
HeartbeatFrequency=60 #心跳间隔检测时间,默认60秒,范围0-3600秒,被动模式不使用
DatasenderFrequency=5 #数据发送时间间隔,默认为1秒,范围为1-3600秒,被动模式不使用
JavaGateway=10.0.0.102 #java gateway服务器地址,当需要监控java的时候必须配置否则监控不到数据

修改proxy配置文件

[root@zabbix-proxy-passive ~]#grep '^[^#]'
/apps/zabbix_proxy/etc/zabbix_proxy.conf
ProxyMode=1 #被动模式为1
Server=10.0.0.100 #指向zabbix server的地址
Hostname=zabbix-proxy-passvie-wang
LogFile=/tmp/zabbix_proxy.log
DBHost=localhost #指定MySQL的地址
DBName=zabbix_proxy_passive #指定MySQL数据库名称
DBUser=proxy #指定MySQL的用户
DBPassword=123456 #指定MySQL的用户密码
ProxyLocalBuffer=360
ProxyOfflineBuffer=720
JavaGateway=10.0.0.102
StartJavaPollers=10
CacheSize=8M
StartDBSyncers=4
HistoryCacheSize=16M
HistoryIndexCacheSize=4M
Timeout=30
LogSlowQueries=3000
[root@zabbix-proxy-passive ~]#systemctl enable --now zabbix-proxy.service
#查看是否打开10051/tcp端口,如果没有打开检查是否能连接MySQL
[root@zabbix-proxy-passive ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 100 127.0.0.1:25 0.0.0.0:*
LISTEN 0 128 0.0.0.0:10051 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 100 [::1]:25 [::]:*

在Zabbix Server 上配置Zabbix Agent 使用被动代理过程同主动模式差不多,不做赘述


Zabbix 实现自动化运维

Zabbix 网络发现

自动发现虽然能自动完成发现并添加主机,但仍然存在一些问题

  • 发现时间长,效率较低
  • 扫描过程中容易漏扫
  • 当IP地址不固定难以实现
  • 无法实现不同类型主机关联不同模板

自动发现由两个步骤组成:

  • 发现discovery: Zabbix周期性地扫描在"网络发现规则"中定义的IP段,发现满足规则的主机
  • 动作action: 对这些主机完成动作,包括添加主机、添加模板、发送通知等等。
#自动发现需求
发现有Zabbix agent运行的主机
每10分钟执行一次
如果主机正常运行时间超过2分钟,添加主机
将Linux主机添加到“Linux servers”组
链接模板Template OS Linux 到Linux主机
如果主机停机时间超过24小时,删除主机

创建自动发现指定需要监控的网段

39-Zabbix实现SNMP网络设备监控及分布式Proxy代理实现和自动化运维_Proxy分布式_09
39-Zabbix实现SNMP网络设备监控及分布式Proxy代理实现和自动化运维_ZabbixAPI_10

创建添加主机的自动发现动作

39-Zabbix实现SNMP网络设备监控及分布式Proxy代理实现和自动化运维_Zabbix_11

Zabbix 自动注册 - 相比于自动发现,更推荐

  • 利用Zabbix的自动注册功能,实现添加主机的自动化,可以大幅减少运维的工作量,减少Zabbix Server 的资源消耗
  • 此方式和自动发现不同,是由Active agent主动发起请求zabbix server将这些agent加到主机里。
  • 注意: Agent 必须使用主动模式才支持自动注册
#在Zabbix agent 端的配置文件修改以下项目

Server=<Zabbix Server IP>
ServerActive=<Zabbix Server IP> #客户端主动模式是实现自动注册的前提条件
Hostname=<agent IP>
#HostnameItem=system.hostname
HostMetadata==<key> #非必须项,可以做为添加主机的验证标识和分类,或者实现加入主机的验证功能,实现自动添加对应模板
HostMetadataItem=<监控项Item> #非必须项,监控项的值可以做为添加主机的验证标识和分类

案例:
[root@centos8 ~]#vim /etc/zabbix/zabbix_agentd.conf
Server=10.0.0.200
ServerActive=10.0.0.200
Hostname=web-10.0.0.8 #指定主机名,如果不指定,则服务器将使用agent的系统主机名
#HostnameItem=system.hostname #指定主机名
HostMetadata=123456
#HostMetadataItem=system.uname
[root@rocky8 ~]#systemctl restart zabbix-agent2.service

#测试连接
[root@ubuntu2204 ~]#zabbix_get -s 10.0.0.8 -k system.uname
Linux rocky8.moore.org 4.18.0-372.9.1.el8.x86_64 #1 SMP Tue May 10 14:48:47 UTC 2022 x86_64
[root@ubuntu2204 ~]#zabbix_get -s 10.0.0.8 -k system.hostname
rocky8.moore.org
39-Zabbix实现SNMP网络设备监控及分布式Proxy代理实现和自动化运维_Proxy分布式_12
39-Zabbix实现SNMP网络设备监控及分布式Proxy代理实现和自动化运维_网络自动发现_13
39-Zabbix实现SNMP网络设备监控及分布式Proxy代理实现和自动化运维_Proxy分布式_14
39-Zabbix实现SNMP网络设备监控及分布式Proxy代理实现和自动化运维_Proxy分布式_15

验证结果 - 稍过一会儿,再观察可以看到下面显示添加主机成功

39-Zabbix实现SNMP网络设备监控及分布式Proxy代理实现和自动化运维_网络自动发现_16

基于 Ansible 实现批量的自动注册的话会更方便。


Zabbix API 实现自动化运维 - 最推荐

官方参考文档:
https://www.zabbix.com/documentation/6.0/zh/manual/api
https://www.zabbix.com/documentation/6.0/zh/manual/api/reference

Zabbix 支持各种语言的开发库
https://zabbix.org/wiki/Docs/api/libraries

Zabbix 常用API
user.login #用户登录
host.get(create|delete|update) #主机操作
hostgroup.get(create|delete|update) #主机组操作
item.get(create|delete|update) #监控项目操作
history.get #历史数据查询
event.get #事件查询
trigger.get #触发器查询

案例:批量创建新主机
*API添加主机前,需要预先知道要添加的主机IP、此主机预先安装并配置好zabbix agent、预先知道要关联的模板ID/组ID等信息,然后同API提交请求添加
ZABBIX_SERVER=10.0.0.100
TOKEN=$(./zabbix-api-token.sh| awk -F'"' '{print $8}')
HOST=10.0.0.106
curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "'web-api-$HOST'", #创建主机名称
"name": "'web-api-$HOST'", #可见的名称
"interfaces": [
{
"type": 1, #类型为1表示agent,2是SNMP,3是IPMI,4是JMX
"main": 1, #主要接口
"useip": 1, #0是使用DNS,1是使用IP地址
"ip": "'$HOST'", #添加的zabbix agent的IP地址
"dns": "",
"port": "10050" #agent使用的端口
}
],
"groups": [
{
"groupid": "2" #添加到的组的ID
}
],
"templates": [
{
"templateid": "10001" #关联的模板的ID
}
]
},
"id": 1,
"auth": "'$TOKEN'"
}' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php | python3 -m json.tool
[root@zabbix-server ~]#./zabbix-api-addhost.sh
{
"jsonrpc": "2.0",
"result": {
"hostids": [
"10273"
]
},
"id": 1
}
[root@zabbix-server ~]#./zabbix-api-gethostlist.sh
{
"jsonrpc": "2.0",
"result": [
{
"hostid": "10084",
"host": "Zabbix server"
},
{
"hostid": "10270",
"host": "10.0.0.105"
},
{
"hostid": "10273",
"host": "10.0.0.106"
}
],
"id": 1
}

我是moore,大家一起加油!累了.......


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK