注意,我还没有提到MIB!MIB的重要性被大大地夸大了。刚开始时,MIB显得非常复杂,但是它们其实非常简单。OID是数字的和全局的键值对。一个OID看起来和一个IPv6的地址很象(比如:1.3.6.1.2.1),并且不同的厂商有不同的前缀等信息。OID都非常长,使得人们难以记住,或者对他非常感冒。因此,人们就设计了一种将数字OID翻译为人们可读的格式。这种翻译映射被保存在一个被称为 “管理信息基础"(Management Infomation Base) 或MIB的、可传递的无格式文本文件(管理信息���)里。
使用SNMP或者向SNMP设备查询,你不需要使用MIB,但是,如果没有MIB,你就得猜测你正在查看的数据是什么。某些情况下,不使用MIB也非常简单,例如查看主机名、磁盘使用率数字,或者端口状态信息。其他情况下,就非常困难了,这个时候使用MIB就非常有帮助。对于准备编写的应用程序来说,为了让用户避免妥当安装MIB带来的麻烦,而严格使用数字OID是并不是很少见的。
安装一个MIB的动作,只是将他放置到你的SNMP客户端应用软件能够搜索到并进行上述翻译映射工作的某个位置而已。
5、IETF规定的管理信息库MIB(由中定义了可访问的网络设备及其属性,由对象识别符(OID:Object Identifier)唯一指定。MIB是一个树形结构,SNMP协议消息通过遍历SNMP MIB树形目录中的节点来访问网络中的设备。
总结一下:我们可以通过NMS发送指令查询Agent的相关信息,可是怎么获得想要的信息呢,比如我想查询cpu,而不是磁盘,那要怎么标识呢?我的理解就是MIB里面的OID就是唯一标识,如果MIB里面没有这个OID那么NMS也就无法查到相关信息。即被监控主机上提供了怎样的MIB库就能对库里定义的信息进行监控,要是库中不包含就无法获取信息,因为无法解析请求。
同样MID也记录了映射关系,我们要找一个人通常是知道这个人的名字而不是他的身份证号码(对应OID)
MIB也可以自行添加,关于自定义MIB的参考:
0x05 SNMP基本使用要使用SNMP就要安装net-snmp 和net-snmp-utils 两个工具
打开/etc/snmp/snmpd.conf配置文件,发现除了四行步骤说明和下面几行,后面的都是注释,注释内容就是个使用步骤了,这里注意community(密码)。
1、snmpwalk
snmpwalk是一个SNMP小程序,它使用SNMP的GETNEXT(获取一个设备下所有子节点的信息)请求查询指定OID(SNMP协议中的对象标识)入口的所有OID树信息,并显示给用户
snmpwalk -v 1或2(代表SNMP版本) -c SNMP读密码 IP地址 OID(对象标示符)
(1) -v: 指定snmp的版本, 1或者2(2c);
(2) -c: 指定连接设备SNMP读密码;
(3) IP: 指定要walk的设备的IP地址;
(4) Oid:代表要获取设备的指标oid;
用法举例:
[root@localhost22 ~]# snmpwalk -v 2c -c public localhost .1.3.6.1.2.1.1.1
SNMPv2-MIB::sysDescr.0 = STRING: Linux localhost22 3.10.0-123.el7.x86_64 #1 SMP Mon Jun 30 12:09:22 UTC 2014 x86_64
注意:
(1)配置文件中的view定义了可以查看MIB库的哪些资源,如果发现查看不了就在配置文件添加view/,或者是community不对。
(2)返回一个OID时会包括一个数据类型,数据类型后的值有些会自动被解释。如上面的sysDescr.0
2、snmpget
snmpget是取具体的OID的值。(适用于OID值是一个叶子节点的情况,即没有子节点)
snmpwalk是针对该节点下面还有子节点的情况
3、snmptranslate
snmptranslate [OPTIONS] OID [OID]
将一个或者多个 SNMP OID 从文字名称格式转换为数字格式的程序[oid] 可以是数字格式或者文字格式。
注意!snmptranslate 可以直接将数字格式的 oid 转换为名称格式,但要把名称格式的 oid 转换为数字格式的 oid ,需要 -I 选项的配合。
[root@localhost22 ~]# snmptranslate tcp //直接使用名称的情况
tcp: Unknown Object Identifier (Sub-id not found: (top) -> tcp)