snmp

SNMP

本机手动安装支持SNMP

https://blog.csdn.net/lyyybz/article/details/82284270

 

简单网络管理协议(SNMP) 是专门设计用于在 IP 网络管理网络节点服务器工作站路由器交换机及HUBS等)的一种标准协议,它是一种应用层协议。 对于支持SNMP的设备进行集中网络管理。

远程多服务器监控协议。

 

网络管理:

1、带内管理  一个设备,例如计算机,有一个正常的网线接口,链接使用,依赖于网络系统。系统故障,无法连接。

2、带外管理   还有个特殊接口,独立于网络之外,即使电脑死机,cpu过载等异常情况,也可以通过此接口与网络连接。可以知道设备的故障。不出现故障,也可以当作一般的接口使用。

 

 SNMP 使网络管理员能够管理网络效能,发现并解决网络问题以及规划网络增长。通过 SNMP 接收随机消息(及事件报告)网络管理系统获知网络出现问题。

 

利用SNMP协议自动帮助管理员收集网络运行状况,  坐在自己的位置上,就可以了解全公司的网络设备的运行情况。

 

一些关键网络设备:集线器,路由器,交换机,服务器,工作站,防火墙,ASA,入侵检测预防与设备 等通过SNMP代理管理。

 

组件

1、被管理设备

2、Snmp代理agrent:被管理设备要支持snmp

3、NMS 网管系统

Aent接收到NMS的请求信息后,完成查询或修改操作,并把操作结果发送给NMS,完成响应。同时,当设备发生故障或者其他事件的时候,Agent会主动发送Trap信息给NMS,通知设备当前的状态变化。

 

SNMP的消息构成

版本标识符:确保snmp代理使用相同的协议版本

团体名(community name):用于snmp代理和网管之间的认证。

private :网管可对被管理设备读写(小心使用)

public :网管对被管理设备只有读的权限

 

协议数据单元PDU:报文,指明snmp消息类型和相关参数。

 

OID

每个管理对象都有自己的OID(Object Identifier),管理对象通过树状结构进行组织,OID由树上的一系列整数组成,整数之间用点( . )分隔开,树的叶子节点才是真正能够被管理的对象

 

Snmp v1、Snmp v2 几乎没有安全性,明文传输。(可以被抓包)

Snmp v3的安全性是完整的。提供认证、ssl加密,用户组等。

用户组级别:

一级:鉴权加加密

二级:只鉴权

三级:不鉴权不加密

 

特点

1、基于tcp/ip  传输层一般使用UDP

2、通过SNMP对网络节点进行 检索信息,修改信息,发现故障,故障诊断,规划和生成报告。

3、报文类型少,格式简单,方便解析,易于实现。

4、有超时和重传机制。

5、屏蔽不同设备物理差异,snmp只提供最基本的功能集。

 

Ipmi机制(协议):通过硬件管理接口实现对主机进行管理。服务器上有带外管理接口才支持。不同厂商的带外管理接口不同。

Dell:iDRAC

Hp:ILO

Ibm:IMM

 

安装:yum install net-snmp net-snmp-libs

 

MIB  (manager infornation Base)对象命名树。倒树状结构 数据库    管理信息库   可以接收agent设置和查询的信息。在MIB库中认定网路管理必须保存的数据项目、类型,以及允许的操作。

Agent:trap  

 

通过oid来获取具体的监控指标,iod:各个监控项的编号的组合。

通过snmp  MIB把oid发给 Agent,查找 例如1-101-2-103  查取cpu状态利用率。

  

主要:主动拉取系统信息  出故障推送过来。

五种消息类型,分别是Get-Request、Get-Response、Get-Next-Request、Set-Request、Trap。

 

 七大操作:四大类功能

查询:Get :manager 发  从agent提取一个或多个参数值 (网关拉取数据:轮询) NMS发送的目的端口=》 161  被管理设备监听的udp端口

GetNext:按照字典顺序提取下一个

GetBulk:信息群查询 效率高

设置:Set :manager 发 ,通过agent设置一个或多个参数值 161

告警:Trap:agent推出去消息,告知NMS被管理设备的情况(主动打报告:中断)  目的端口==》   162   NMS网管 监听的端口

Inform:类似与trap,需要接收确认,占用更多的资源。

响应:Response:响应消息:agent对get、set的操作响应消息  NmS对inform的响应消息。

 

SNMP消息全部通过UDP端口161接收,只有Trap信息采用UDP端口162。

所有报文(除了trap外)使用161端口

Trap报文:使用162端口

 

三种用于控制MIB对象的基本操作命令。它们是:Get、Set 和 Trap

Trap: 代理者主动向管理站通报重要事件。

 

网管软件:

Sitecope  HP惠普   跨平台

Netview  IBM     跨平台,网络管理

Mrtg  绘图软件 开源  snmp协议

Cacti 开源,监控图形分析工具

Solarwinds、whatsup  中小

 

SNMP4J重要的类和接口介绍

2.1、Snmp类

  Snmp类:该类是SNMP4J中最为核心的类。负责SNMP报文的接受和发送。它提供了发送和接收PDU的方法,所有的PDU类型都可以采用同步或者异步的方式被发送

 

2.2、PDU类和ScopedPDU类

  该类是SNMP报文单元的抽象,其中PDU类适用于SNMPv1和SNMPv2c。ScopedPDU类继承于PDU类,适用于SNMPv3。

 

2.3、Target接口和CommunityTarget类以及UserTarget类

  对应于SNMP代理的地址信息,包括IP地址和端口号(161)。其中Target接口适用于SNMPv1和SNMPv2c。CommunityTarget类实现了Target接口,用于SNMPv1和SNMPv2c这两个版本,UserTarget类实现了Target接口,适用于SNMPv3。

 

2.4、TransportMapping接口

  该接口代表了SNMP4J所使用的传输层协议。这也是SNMP4J一大特色的地方。按照RFC的规定,SNMP是只使用UDP作为传输层协议的。而SNMP4J支持管理端和代理端使用UDP或者TCP进行传输。该接口有两个子接口。

 

2.5、Snmp、Target、PDU三者的关系

  Target代表远程设备或者远程实体、PDU代表管理端同Target通信的数据,Snmp就代表管理者管理功能(其实就是数据的收发)的具体执行者。

 

 

同步发送模式和异步发送模式

 

使用SNMP4J实现管理端的编程实现

  ①、设定远程实体

 

    snmp4j中,用CommunityTarget对象来表示远程实体(要进行snmp消息通信的远程主机,使用snmp的v2版本)

 

  ②、指定远程实体的地址

 

    snmp4j中使用Address接口对象来表示,Address对象需要通过实现该接口的类的对象向上转型来实例化

 

  ③、通过CommunityTarget以及其父接口中提供的setXX方法来设定远程实体的属性,如设定远程实体的snmp共同体属性、远程实体的地址、超时时间、重传次数、snmp版本等

 

  ④、设定使用的传输协议

 

    snmp4j中,用TransportMapping接口的对象来表示传输协议(tcp/udp)

 

  ⑤、调用TransportMapping中的listen()方法,启动监听进程,接收消息,由于该监听进程是守护进程,最后应调用close()方法来释放该进程

 

  ⑥、创建SNMP对象,用于发送请求PDU  协议数据单元PDU

 

       a、创建请求pdu,即创建PDU类的对象,调用PDU类中的add()方法绑定要查询的OID,调用PDU中的setType()方法来确定该pdu的类型(与snmp中五种操作想对应)

 

       b、通过PDU的构造方法  public SNMP(TransportMapping transportingMapping),或者其他构造方法来生成pdu,之后调用 ResopnseEvent send(PDU pdu,Target target)发送pdu,该方法返回一个ResponseEvent对象

 

  ⑦、通过ResponseEvent对象来获得SNMP请求的应答pdu,方法:public PDU getResponse()

 

  ⑧、通过应答pdu获得mib信息(之前绑定的OID的值),方法:VaribleBinding get(int index)

 

 

 

虚拟机上  snmp采集命令。

1、snmpwalk -v 2c -c public 10.103.33.1 .1.3.6.1.2.1.25.1    得到取得windows端的系统进程用户数等  

其中-v是指版本,-c 是指密钥,也就是客户端snmp.conf里面所设置的,下面类同.   

2、snmpwalk -v 2c -c public 10.103.33.1 .1.3.6.1.2.1.25.2.2  取得系统总内存  

3、snmpwalk -v 2c -c public 10.103.33.1 hrSystemNumUsers  取得系统用户数   

4、snmpwalk -v 2c -c public 10.103.33.1 .1.3.6.1.2.1.4.20    取得IP信息   

5、snmpwalk -v 2c -c public 10.103.33.1 system   查看系统信息   

6、snmpwalk -v 2c -c public 10.103.33.1 ifDescr 获取网卡信息

 

1、snmpwalk -c public -v 1 -m ALL 192.168.30.49 .1.3.6.1.2.1.25.1    得到取得windows端的系统进程用户数等  

2、snmpwalk -c public -v 1 -m ALL 192.168.30.49 .1.3.6.1.2.1.25.2.2  取得系统总内存  

3、snmpwalk -c public -v 1 -m ALL 192.168.30.49 hrSystemNumUsers  

4、snmpwalk -c public -v 1 -m ALL 192.168.30.49 .1.3.6.1.2.1.4.20    取得IP信息  

5、snmpwalk -v 2c -c public 192.168.30.49 system   查看系统信息  

 

 

变量绑定(variable-bindings)

指明一个或多个变量的名和对应的值。在get或get-next报文中,变量的值应忽略。

 

 

SNMP运行过程

被管设备上的AGENT从UDP端口161接受来自网管站的串行化报文===》解码,团体验证、分析得到管理变量----对应的MIB树中的节点====》从对应模块获得管理变量的值,形成响应报文===》编码发送回网管站,网管站得到响应 报文,经过同样的处理,显示结果。

 

 

 

1、内存相关的关键OID

使用SNMP采集物理机的内存使用率,需要知道内存相关的几个重要的OID。

       memTotal:1.3.6.1.4.1.2021.4.5

memAvailable:1.3.6.1.4.1.2021.4.6

   memShared:1.3.6.1.4.1.2021.4.13

     memBuffer:1.3.6.1.4.1.2021.4.14

  memCached:1.3.6.1.4.1.2021.4.15

 

2、内存使用率算法

1)当 memShared + memBuffer + memCached > memTotal 时,

     内存使用率 memUsage = (memTotal - memAvailable - memBuffer - memCached + memShared )/memTotal * 100

2) 当 memShared + memBuffer + memCached <= memTotal 时,

   内存使用率 memUsage = (memTotal - memAvailable - memBuffer - memCached )/memTotal * 100

–h:显示帮助。

–v:指定snmp的版本, 1或者2c或者3。

–c:指定连接设备SNMP密码。

–V:显示当前snmpwalk命令行版本。

–r:指定重试次数,默认为0次。

–t:指定每次请求的等待超时时间,单为秒,默认为3秒。

–l:指定安全级别:noAuthNoPriv|authNoPriv|authPriv。

–a:验证协议:MD5|SHA。只有-l指定为authNoPriv或authPriv时才需要。

–A:验证字符串。只有-l指定为authNoPriv或authPriv时才需要。

–x:加密协议:DES。只有-l指定为authPriv时才需要。

–X:加密字符串。只有-l指定为authPriv时才需要。

 

 

 

 

hrStorageRam 表示内存,

hrStorageFixedDisk 表示硬盘,

hrStorageVirtualMemory表示虚拟内存,

hrStorageCompactDisc 表示光盘

 

hrStorageTypes :1.3.6.1.2.1.25.2.1
hrStorageOther 1.3.6.1.2.1.25.2.1.1
hrStorageRam  1.3.6.1.2.1.25.2.1.2
hrStorageVirtualMemory 1.3.6.1.2.1.25.2.1.3
hrStorageFixedDisk 1.3.6.1.2.1.25.2.1.4
hrStorageRemovableDisk 1.3.6.1.2.1.25.2.1.5
hrStorageFloppyDisk 1.3.6.1.2.1.25.2.1.6
hrStorageCompactDisc 1.3.6.1.2.1.25.2.1.7
hrStorageRamDisk 1.3.6.1.2.1.25.2.1.8

 

 

 

 

 

 

 

 

 

 

 

windows主机资源Snmp OIDs CPU, Memory, Disk等

Windows OID' for CPU, Memory, Disk Utilization2007-10-31 11:03Windows CPU Utilization: 

OID:.1.3.6.1.2.1.25.3.3.1.2 (.iso.org.dod.internet.mgmt.mib-2.host.hrDevice.hrProcessorTable.hrProcessorEntry.hrProcessorLoad) in HOST-RESOURCES-MIB 

1.3.6.1.2.1.25.3.3.1.2.2 And 1.3.6.1.2.1.25.3.3.1.2.3 

Windows Memory Utilization: 

Total : OID: 1.3.6.1.2.1.25.2.2.0 单位(KB)--Windows 2003 

1.3.6.1.2.1.25.2.2.0 = 2096304 [Integer] 

Memory Usage 的处理和 HDD total, HDD usage一致 

Windows Disk Utilization: 

Total OID: 

Usage OID: 

1. Disk type OID (hrStrogeType): 

hrStorageTypes 
1.3.6.1.2.1.25.2.1 
OBJECT IDENTIFIER 

hrStorageOther 
1.3.6.1.2.1.25.2.1.1 
OBJECT IDENTIFIER 

hrStorageRam 
1.3.6.1.2.1.25.2.1.2 
OBJECT IDENTIFIER 

hrStorageVirtualMemory 
1.3.6.1.2.1.25.2.1.3 
OBJECT IDENTIFIER 

hrStorageFixedDisk 
1.3.6.1.2.1.25.2.1.4 
OBJECT IDENTIFIER 

hrStorageRemovableDisk 
1.3.6.1.2.1.25.2.1.5 
OBJECT IDENTIFIER 

hrStorageFloppyDisk 
1.3.6.1.2.1.25.2.1.6 
OBJECT IDENTIFIER 

hrStorageCompactDisc 
1.3.6.1.2.1.25.2.1.7 
OBJECT IDENTIFIER 

hrStorageRamDisk 
1.3.6.1.2.1.25.2.1.8 
OBJECT IDENTIFIER 



hrStorageRam 表示内存, hrStorageFixedDisk 表示硬盘, hrStorageVirtualMemory 表示虚拟内存, hrStorageCompactDisc 表示光盘 

2. 区分各个磁盘/分区的类型 

1.3.6.1.2.1.25.2.3.1.2.1 = 1.3.6.1.2.1.25.2.1.4 [ObjectIdentifier] //硬盘 
1.3.6.1.2.1.25.2.3.1.2.2 = 1.3.6.1.2.1.25.2.1.4 [ObjectIdentifier] //硬盘 
1.3.6.1.2.1.25.2.3.1.2.3 = 1.3.6.1.2.1.25.2.1.4 [ObjectIdentifier] //硬盘 
1.3.6.1.2.1.25.2.3.1.2.4 = 1.3.6.1.2.1.25.2.1.4 [ObjectIdentifier] //硬盘 
1.3.6.1.2.1.25.2.3.1.2.5 = 1.3.6.1.2.1.25.2.1.7 [ObjectIdentifier] //光盘 
1.3.6.1.2.1.25.2.3.1.2.6 = 1.3.6.1.2.1.25.2.1.7 [ObjectIdentifier] //光盘 
1.3.6.1.2.1.25.2.3.1.2.7 = 1.3.6.1.2.1.25.2.1.3 [ObjectIdentifier] //虚拟内存 
1.3.6.1.2.1.25.2.3.1.2.8 = 1.3.6.1.2.1.25.2.1.2 [ObjectIdentifier] //物理内存 


3. Disk/分区 Information OID: 

1.3.6.1.2.1.25.2.3.1.3.1 = "C:\ Label: Serial Number dc26ea33" [Octets] 
1.3.6.1.2.1.25.2.3.1.3.2 = "D:\ Label:test Serial Number 9629f314" [Octets] 
1.3.6.1.2.1.25.2.3.1.3.3 = "E:\ Label:test_backup Serial Number 94389268" [Octets] 
1.3.6.1.2.1.25.2.3.1.3.4 = "F:\ Label:others Serial Number 5c4002e8" [Octets] 
1.3.6.1.2.1.25.2.3.1.3.5 = "G:" [Octets] 
1.3.6.1.2.1.25.2.3.1.3.6 = "H:\ Label:Oracle10g Serial Number b1c04dbe" [Octets] 
1.3.6.1.2.1.25.2.3.1.3.7 = "Virtual Memory" [Octets] 
1.3.6.1.2.1.25.2.3.1.3.8 = "Physical Memory" [Octets] 

4. StorageAllocationUnits OID:也叫每个箸/块的大小 

1.3.6.1.2.1.25.2.3.1.4.1 = 512 [Integer] 
1.3.6.1.2.1.25.2.3.1.4.2 = 4096 [Integer] 
1.3.6.1.2.1.25.2.3.1.4.3 = 4096 [Integer] 
1.3.6.1.2.1.25.2.3.1.4.4 = 4096 [Integer] 
1.3.6.1.2.1.25.2.3.1.4.5 = 0 [Integer] 
1.3.6.1.2.1.25.2.3.1.4.6 = 2048 [Integer] 
1.3.6.1.2.1.25.2.3.1.4.7 = 65536 [Integer] 
1.3.6.1.2.1.25.2.3.1.4.8 = 65536 [Integer] 


5.StorageSize OID:一个磁盘分为多少块/箸, 总大小 

1.3.6.1.2.1.25.2.3.1.5.1 = 25157789 [Integer] 
1.3.6.1.2.1.25.2.3.1.5.2 = 2815383 [Integer] 
1.3.6.1.2.1.25.2.3.1.5.3 = 4096567 [Integer] 
1.3.6.1.2.1.25.2.3.1.5.4 = 11006525 [Integer] 
1.3.6.1.2.1.25.2.3.1.5.5 = 0 [Integer] 
1.3.6.1.2.1.25.2.3.1.5.6 = 317298 [Integer] 
1.3.6.1.2.1.25.2.3.1.5.7 = 63101 [Integer] 
1.3.6.1.2.1.25.2.3.1.5.8 = 32754 [Integer] 


6. StorageUsed OID://已经使用的块/箸 

1.3.6.1.2.1.25.2.3.1.6.1 = 7427924 [Integer] 
1.3.6.1.2.1.25.2.3.1.6.2 = 861039 [Integer] 
1.3.6.1.2.1.25.2.3.1.6.3 = 16820 [Integer] 
1.3.6.1.2.1.25.2.3.1.6.4 = 5788717 [Integer] 
1.3.6.1.2.1.25.2.3.1.6.5 = 0 [Integer] 
1.3.6.1.2.1.25.2.3.1.6.6 = 317298 [Integer] 
1.3.6.1.2.1.25.2.3.1.6.7 = 12172 [Integer] 
1.3.6.1.2.1.25.2.3.1.6.8 = 13270 [Integer] 

7. StorageAllocationFailures OID://分配失败的块/箸 

1.3.6.1.2.1.25.2.3.1.7.1 = 0 [Counter32] 
1.3.6.1.2.1.25.2.3.1.7.2 = 0 [Counter32] 
1.3.6.1.2.1.25.2.3.1.7.3 = 0 [Counter32] 
1.3.6.1.2.1.25.2.3.1.7.4 = 0 [Counter32] 
1.3.6.1.2.1.25.2.3.1.7.5 = 0 [Counter32] 
1.3.6.1.2.1.25.2.3.1.7.6 = 0 [Counter32] 
1.3.6.1.2.1.25.2.3.1.7.7 = 0 [Counter32] 
1.3.6.1.2.1.25.2.3.1.7.8 = 0 [Counter32] 

8. 在这个例子中 
可以看到的盘符是C: D: E: F:; 同时可以得到虚拟内存信息,物理内存的信息 

C: 盘大小为512× 25157789= 12880787968bytes or 12GB 

C: 盘以用空间512×7427924= 3803097088bytes or 3.54GB 

C:盘使用率为3.54/12*100% = 29.5% 

C: 盘空间分配错误512×0 = 0 bytes 

硬盘总的大小为512*25157789 + 4096*2815383 + 4096*4096567+ 4096*11006525 = about 80G 

磁盘使用大小为512*7427924 + 4096*861039 + 4096*16820 + 4096*5788717 = about 29G 

整个硬盘的使用率 29/80 *100% = 36.2% 


物理内存 

Total RAM 65536*32754 = 2096256 KB, 2047.125M about 2G 这个数字和1.3.6.1.2.1.25.2.2.0结果差不多 

Used RAM 65536*13270 = 829M 

内存使用率 829/2048 * 100% = 40.4%

 

上一篇:window snmp服务开启及测试


下一篇:zabbix+snmp+Granfana监控打印机