SNMP 简介
SNMP 是英文"Simple Network Management Protocol"的缩写,中文意思是“简单网络管理协议"。SNMP 是一种简单网络管理协议,它属于 TCP/IP 五层协议中的应用层协议,用于网络管理的协议,SNMP 主要用于网络设备的理。
SNMP 的基本思想:为不同种类的设备、不同厂家生产的设备、不同型号的设备,定义为一个统一的接口和协议,使得管理员可以是使用统一的外观面对这些需要管理的网络设备进行管理。通过网络,管理员可以管理位于不同物理空间的设备,从而大大提高网络管理的效率,简化网络管理员的工作。
SNMP 协议是 TCP/IP 协议簇的一个应用层协议,在 1988 年被制定,并被 Internet 体系结构委员会(IAB)采纳作为一个短期的网络管理解决方案,由于 SNMP 的简单性,在Internet 时代得到了蓬勃的发展,1992 年发布了 SNMPv2 版本,以增强 SNMPv1 的安全性和功能,SNMP 的协议版本目前有 SNMP v1、SNMP v2c 和 SNMP v3 三种版本,其具体差别如下:
-
SNMP v1采用团体名(Community Name)认证,团体名用来定义SNMP NMS和SNMP Agent的关系,如果SNMP
报文携带的团体名没有得到设备的认可,该报文将被丢弃,团体名起到了类似于密码的作用,用来限制 SNMP
NMS对SNMP Agent的访问。
-
SNMP v2c也采用团体名认证,它在兼容SNMP v1的同时又扩充了SNMP v1的功能,它提供了更多的操作类型
(GetBulk和InformRequest)、支持更多的数据类型(Counter64等)、提供了更丰富的错误代码且能够更细
致地区分错误。
-
SNMP v3提供了基于用户的安全模型(USM,User-Based Security Model)的认证机制,用户可以设置认证
和加密功能,认证用于验证报文发送方的合法性,避免非法用户的访问,加密则是对NMS和Agent之间的传输报文
进行加密,以免被窃听。通过有无认证和有无加密等功能组合,可以为SNMP NMS和SNMP Agent之间的通信提供
更高的安全性。
使用SNMP监控硬件设备
通过Zabbix 自带的snmp接口即可实现snmp监控硬件,具体实现流程如下
- 梳理资产设备型号,便于根据产品查询对应的oid参数指标
- 使用snmpwalk测试数据是否符合使用场景
- zabbix配置模板监控项触发项
- zabbix配置告警通知
snmp数据交互
snmp管理进程与代理进程之前为了交互信息,定义了5种报文:
1
2
3
4
5
|
get-request操作:从代理进程处提取一个或多个参数值
get-response操作:返回一个或多个参数值,这个操作是由代理进程发出的。
trap操作:代理进程主动发出的报文,通知管理进程有某些事情发生。
get-next-request操作:从代理进程处提取一个或多个参数的下一个参数值。
set-request操作:设置代理进程的一个或多个参数值。
|
snmp mib
所谓(MIB)管理信息库,就是所有代理进程包含的、并且能够被管理进程进行查询和设置的信息的集合。MIB 是基于对象标识树的,对象标识是一个整数序列,中间以".“分割,这些整数构成一个树型结构,类似于 DNS 或 Unix 的文件系统,MIB 被划分为若干个组,如 system、 interfaces、 at(地址转换)和 ip 组等。.iso .org .dod.internet .private .enterprises(1.3.6.1.4.1)这个标识,是给厂家自定义而预留的,比如华为的为 1.3.6.1.4.1.2011,华三的为 1.3.6.1.4.1.25506。
SNMP 的管理信息库采用和域名系统 DNS 相似的树型结构,它的根在最上面(iso 上面无名字)。下图画的是管理信息库的一部分,它又称为对象命名树(objectnamingtree):
snmp 实现
在具体实现上,SNMP 为管理员提供了一个网管平台(NMS),负责网管命令的发出、数据存储、及数据分析。被监管的设备上运行一个 SNMP 代理(Agent),代理实现设备与管理站的 SNMP 通信。
管理站与代理端通过 MIB 进行接口统一,MIB 定义了设备中的被管理对象。管理站和代理都实现了相应的 MIB 对象,使得双方可以识别对方的数据,实现通信。管理站向代理申请 MIB 中定义的数据,代理识别后,将管理设备提供的相关状态或参数等数据转换为 MIB 定义的格式,应答给管理站,完成一次管理操作。
snmpwalk获取信息命令
- 安全级别为authPriv时,snmpwalk获取信息方式:
1
|
snmpwalk -v 3 -u admin -l authPriv -a sha -A mypass123 -x aes -X myaes123 192.168.0.80 ".1.3.6.1.2.1"
|
- 安全级别为authNoPriv时,snmpwalk获取信息方式:
1
2
|
snmpwalk -v 3 -u admin -l authNoPriv -a sha -A mypass123 192.168.0.80 ".1.3.6.1.2.1"
```
|
- 安全级别为noAuthNoPriv时,snmpwalk获取信息方式:
1
|
snmpwalk -v 3 -u admin -l noAuthNoPriv 192.168.0.80 ".1.3.6.1.2.1"
|
基于CentOS 的snmp
安装snmp
1
|
yum install -y net-snmp
|
修改配置
1
2
3
4
|
# 修改团体名
com2sec notConfigUser default yfgj
# 自定义授权
view systemview included .1.
|
重启snmp
1
2
|
systemctl enable snmpd
systemctl restaert snmpd
|
snmp oid
使用 snmpwalk 工具测试 OID。snmpwalk 是使用 SNMP 协议的工具,它使用 SNMP 的 GET 请求查询指定 OID(SNMP 协议中的对象标识)入口的所有OID 树信息,并显示给用户。通过 snmpwalk 也可以查看支持 SNMP 协议(可网管)的设备的一些其他信息,比如 cisco 交换机或路由器 IP 地址、内存使用率等,也可用来协助开发 SNMP 功能。要使用 snmpwalk 需要先安装 net-snmp-utils 软件包。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
# 安装snmpwalk
yum install -y net-snmp-utils
# 使用帮助
snmpwalk -h
USAGE: snmpwalk [OPTIONS] AGENT [OID]
Version: 5.7.2
Web: http://www.net-snmp.org/
Email: net-snmp-coders@lists.sourceforge.net
OPTIONS:
-h, --help display this help message
-H display configuration file directives understood
-v 1|2c|3 specifies SNMP version to use
-V, --version display package version number
SNMP Version 1 or 2c specific
-c COMMUNITY set the community string
SNMP Version 3 specific
-a PROTOCOL set authentication protocol (MD5|SHA)
-A PASSPHRASE set authentication protocol pass phrase
-e ENGINE-ID set security engine ID (e.g. 800000020109840301)
-E ENGINE-ID set context engine ID (e.g. 800000020109840301)
-l LEVEL set security level (noAuthNoPriv|authNoPriv|authPriv)
-n CONTEXT set context name (e.g. bridge1)
-u USER-NAME set security name (e.g. bert)
-x PROTOCOL set privacy protocol (DES|AES)
-X PASSPHRASE set privacy protocol pass phrase
-Z BOOTS,TIME set destination engine boots/time
|
CentOS可用的snmp oid的值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
CPU 负载:
1 minute Load: .1.3.6.1.4.1.2021.10.1.3.1
5 minute Load: .1.3.6.1.4.1.2021.10.1.3.2
15 minute Load: .1.3.6.1.4.1.2021.10.1.3.3
内存使用:
Total Swap Size: .1.3.6.1.4.1.2021.4.3.0
Available Swap Space: .1.3.6.1.4.1.2021.4.4.0
Total RAM in machine: .1.3.6.1.4.1.2021.4.5.0
Total RAM used: .1.3.6.1.4.1.2021.4.6.0
Total RAM Free: .1.3.6.1.4.1.2021.4.11.0
Total RAM Shared: .1.3.6.1.4.1.2021.4.13.0
Total RAM Buffered: .1.3.6.1.4.1.2021.4.14.0
Total Cached Memory: .1.3.6.1.4.1.2021.4.15.0
硬盘使用:
Path where the disk is mounted: .1.3.6.1.4.1.2021.9.1.2.1
Path of the device for the partition: .1.3.6.1.4.1.2021.9.1.3.1
Total size of the disk/partion (kBytes): .1.3.6.1.4.1.2021.9.1.6.1
Available space on the disk: .1.3.6.1.4.1.2021.9.1.7.1
Used space on the disk: .1.3.6.1.4.1.2021.9.1.8.1
Percentage of space used on disk: .1.3.6.1.4.1.2021.9.1.9.1
Percentage of inodes used on disk: .1.3.6.1.4.1.2021.9.1.10.1
系统信息:
sysDescr 1.3.6.1.2.1.1.1
sysObjectID 1.3.6.1.2.1.1.2
sysUpTime 1.3.6.1.2.1.1.3
sysContact 1.3.6.1.2.1.1.4
sysName 1.3.6.1.2.1.1.5
CPU 信息:
percentage of user CPU time: .1.3.6.1.4.1.2021.11.9.0
raw user cpu time: .1.3.6.1.4.1.2021.11.50.0
percentages of system CPU time: .1.3.6.1.4.1.2021.11.10.0
raw system cpu time: .1.3.6.1.4.1.2021.11.52.0
percentages of idle CPU time: .1.3.6.1.4.1.2021.11.11.0
raw idle cpu time: .1.3.6.1.4.1.2021.11.53.0
raw nice cpu time: .1.3.6.1.4.1.2021.11.51.0
|
测试snmp采集数据
1
2
3
4
5
6
7
8
9
10
11
12
|
# 测试1分钟负载
snmpwalk -v 2c -c yfgj 192.168.100.209 .1.3.6.1.4.1.2021.10.1.3.1
UCD-SNMP-MIB::laLoad.1 = STRING: 0.23
# 测试5分钟负载
snmpwalk -v 2c -c yfgj 192.168.100.209 .1.3.6.1.4.1.2021.10.1.3.2
UCD-SNMP-MIB::laLoad.2 = STRING: 0.37
# 测试15分钟负载
snmpwalk -v 2c -c yfgj 192.168.100.209 .1.3.6.1.4.1.2021.10.1.3.3
UCD-SNMP-MIB::laLoad.3 = STRING: 0.25
# 获取系统信息
snmpwalk -v 2c -c yfgj 192.168.100.209 sysDescr
SNMPv2-MIB::sysDescr.0 = STRING: Linux localhost.localdomain 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64
|
zabbix 配置snmp监控
添加主机
配置snmp trap采集数据
- 拷贝zabbix源码中zabbix_trap_receiver.pl到/usr/bin目录下
关联模板
修改团体名,在配置文件中的团体名称为yfgj,但是默认SNMP的模板名称为public
主机中添加模板