在SNMP协议中,网络管理系统是如何与代理进行通信的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在SNMP协议中,网络管理系统是如何与代理进行通信的?相关的知识,希望对你有一定的参考价值。

参考技术A snmp协议是网络管理系统和代理之间的异步请求和响应协议,网络管理系统可以发出3种类型的请求报文GET、GETNEXT、SET,代理可以发出两种报文RESPONSE、TRAP、网管系统对网络设备监控主要通过查询代理MIB中相应的对象值来完成的。 参考技术B 可对网络中的设备,如路由器和交换机等进行管理;
可以实时检测交换机的每个接口的流量状况,修改相关配置参数;
可以查看路由器相关信息,修改相关配置参数;
在交换机和路由器上启用snmp,可以设置网络管理员所关心的重要trap事件.

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

监控网络设备 SNMP

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代理实现和自动化运维_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: net-snmp-coders@lists.sourceforge.net
[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

1227 19:03:43 ubuntu2204.wang.org systemd[1]: snmpd.service: Deactivated successfully.
1227 19:03:43 ubuntu2204.wang.org systemd[1]: Stopped Simple Network Management Protocol (SNMP) Daemon..
1227 19:03:43 ubuntu2204.wang.org systemd[1]: Starting Simple Network Management Protocol (SNMP) Daemon....
1227 19:03:43 ubuntu2204.wang.org snmpd[17074]: /etc/snmp/snmp.conf: line 11: Warning: Unknown token: agentaddress.
1227 19:03:43 ubuntu2204.wang.org snmpd[17074]: /etc/snmp/snmp.conf: line 12: Warning: Unknown token: view.
1227 19:03:43 ubuntu2204.wang.org snmpd[17074]: /etc/snmp/snmp.conf: line 13: Warning: Unknown token: view.
1227 19:03:43 ubuntu2204.wang.org snmpd[17074]: /etc/snmp/snmp.conf: line 14: Warning: Unknown token: view.
1227 19:03:43 ubuntu2204.wang.org snmpd[17074]: /etc/snmp/snmp.conf: line 16: Warning: Unknown token: rocommunity.
1227 19:03:43 ubuntu2204.wang.org snmpd[17074]: /etc/snmp/snmp.conf: line 17: Warning: Unknown token: rocommunity6.
1227 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代理实现和自动化运维_ZabbixAPI_03

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

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


Zabbix 分布式实现 Proxy

39-Zabbix实现SNMP网络设备监控及分布式Proxy代理实现和自动化运维_Proxy分布式_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代理实现和自动化运维_Zabbix_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代理实现和自动化运维_网络自动发现_09

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

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

39-Zabbix实现SNMP网络设备监控及分布式Proxy代理实现和自动化运维_自动注册_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代理实现和自动化运维_网络自动发现_14

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

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

39-Zabbix实现SNMP网络设备监控及分布式Proxy代理实现和自动化运维_Zabbix_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,大家一起加油!累了.......

以上是关于在SNMP协议中,网络管理系统是如何与代理进行通信的?的主要内容,如果未能解决你的问题,请参考以下文章

安全的计算机网络在snmp v2,v3中是如何实现的

网络管理之SNMP协议

SNMP 协议

计算机网络管理 运行snmputil命令,测试SNMP服务与代理系统的通信

SNMP(简单网络管理协议)

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