简单网络管理协议(SNMP) 是专门设计用于在 IP 网络管理网络节点(服务器、工作站、路由器、交换机及HUBS等)的一种标准协议,它是一种应用层协议。
snmpwalk是SNMP的一个工具,它使用SNMP的GETNEXT请求查询指定OID(SNMP协议中的对象标识)入口的所有OID树信息,并显示给用户。
通过snmpwalk也可以查看支持SNMP协议(简单网络管理协议)的设备的一些其他信息,比如交换机或路由器IP地址、内存使用率等,也可用来协助开发SNMP功能。
在日常监控中,经常会用到snmp服务,而snmpwalk命令则是采集系统各种信息最有效的方法。
1、客户端安装net-snmp
[root@db01 ~]# yum install -y net-snmp
2、修改配置文件
[root@db01 ~]# vim /etc/snmp/snmpd.conf
# 注释 com2sec notConfigUser default public
#社区名称定义为zabbix
com2sec notConfigUser default zabbix
#添加一个采集项.1,意味着可以采集到所有mib tree的信息
view systemview included .1
3、启动服务
[root@db01 ~]# systemctl start snmpd.service
4、查看snmp端口
如果没有安装netstat ,则执行命令:
[root@db01 ~]# yum install net-tools
查看snmp端口
[root@db01 ~]# netstat -lntup|grep 161
udp 0 0 0.0.0.0:161 0.0.0.0:* 59093/snmpd
5、在zabbix server上查询snmp监控的指标总数量
安装snmpwalk工具测试
[root@zabbix ~]# yum install -y net-snmp-utils
查询snmp监控的指标总数量
[root@zabbix ~]# snmpwalk -v 2c -c zabbix 192.168.16.136|wc -l
3724 #这里取到了3724项
6、在zabbix server上导出snmp监控的指标到文件
[root@zabbix ~]# snmpwalk -v 2c -c zabbix 192.168.16.136 > list.txt
查看文档:
[root@zabbix ~]# vi list.txt
[root@zabbix ~]# snmpget -v 2c -c zabbix -On 192.168.16.136 HOST-RESOURCES-MIB::hrSWRunName.1
8、根据OID查看获取系统基本信息
[root@zabbix ~]# snmpget -v 2c -c zabbix 192.168.16.136 .1.3.6.1.2.1.1.1.0
9、查询zabbix可以使用的OID
[root@zabbix ~]# snmpget -v 2c -c zabbix -On 192.168.16.136 HOST-RESOURCES-MIB::hrSWRunName.1
10、zabbix的web界面添加主机
参考zabbix官方文档:
https://www.zabbix.com/documentation/4.0/zh/manual/config/items/itemtypes/snmp
我用的zabbix版本是Zabbix 4.2.6,OID一定不能填错。
添加主机
为添加的主机链接zabbix自带的Template OS Linux SNMPv2模板
填写主机的宏名称
添加监控项
查看最新数据
网上有很多常用的OID,写的也很详细,我这里只是讲下注意事项
使用下面的命令可以更加准确的查询你自己需要的OID:
[root@zabbix ~]# snmpget -v 2c -c zabbix -On 192.168.16.136 HOST-RESOURCES-MIB::hrSWRunName.1
网上有很多常用的OID,写的也很详细,我就不在这里重复列举了,如:
参照:https://www.cnblogs.com/aspx-net/p/3554044.html
请求方式是get的OID可以直接拿到具体的值。但是请求方式是WALK的,拿到的值是一个list列表,需要在OID后面加上.1或者其他的序号。
get请求方式就是使用snmpget命令,walk请求方式就是使用snmpwalk命令
snmpget命令代表这个指标是特定的一个具体的值,snmpwalk命令代表这个指标是一个集合,如系统运行的进程列表,包括多个进程。
概述
虽然你可能会在SNMP OID中找到所需的索引号(例如网络接口),但有时你不能完全依赖不变的索引号。
索引号可能是动态的 - 它们可能会随时间而改变,因此你的监控项可能会停止工作。
为了避免这种情况,可以定义一个考虑到索引号改变的可能性的OID。
例如,如果需要检索索引值以匹配Cisco设备上的 GigabitEthernet0/1 接口的 ifInOctets ,请使用以下OID:
ifInOctets["index","ifDescr","GigabitEthernet0/1"]
语法
使用OID的特殊语法:
["index"," ",""]
示例
获取 apache 进程的内存使用率。
如果使用这种OID语法:
HOST-RESOURCES-MIB::hrSWRunPerfMem["index","HOST-RESOURCES-MIB::hrSWRunPath", "/usr/sbin/apache2"]
索引号将在这里查找:
...
HOST-RESOURCES-MIB::hrSWRunPath.5376 = STRING: "/sbin/getty"
HOST-RESOURCES-MIB::hrSWRunPath.5377 = STRING: "/sbin/getty"
HOST-RESOURCES-MIB::hrSWRunPath.5388 = STRING: "/usr/sbin/apache2"
HOST-RESOURCES-MIB::hrSWRunPath.5389 = STRING: "/sbin/sshd"
...
现在我们有索引5388.索引将附加到此数据OID,以便接收我们感兴趣的值:
HOST-RESOURCES-MIB::hrSWRunPerfMem.5388 = INTEGER: 31468 KBytes
索引查找缓存
当请求动态索引项时,Zabbix检索并缓存base OID下的整个SNMP表用于索引(即使早发现了匹配)。这是为了在另一个监控项稍后引用相同的base OID - Zabbix将在缓存中查找索引,而不是再次查询被监视的主机。请注意,每个轮询器进程使用单独的缓存。
在所有随后的值检索操作中,仅验证找到的索引。如果没有改变将请求结果值;如果已更改,则会重建高速缓存 - 遇到已更改索引的每个轮询器再次建立SNMP索引表。
zabbix界面操作
SNMP OID(apache 进程的内存使用率)
后面的 /usr/lib/systemd/systemd ,根据自己的apache 进程目录修改。
方式一:
HOST-RESOURCES-MIB::hrSWRunPerfMem["index","HOST-RESOURCES-MIB::hrSWRunPath","/usr/lib/systemd/systemd"]
方式二:
.1 代表第几个apache 进程,和方式一目的一样,都是获取具体的进程索引。
HOST-RESOURCES-MIB::hrSWRunPerfMem.1