一般来说,当我们使用Zabbix工具通过snmp监控Linux系统时,默认的snmp只支持系统内核、cpu、内存、分区、网卡这5个方面的监控数据,而无法获取到linux的发行版本信息以及进程信息;相对于zabbix agent来说,snmp所能获取的监控指标比较少,指标拓展比较依赖个人的技术知识水平和操作能力。
本文教你如何通过自定义oid,实现想要的监控效果,可以执行命令、命令行、脚本输出符合预期效果的数据,达到期望的监控效果,给大家提供一个监控拓展思路参考方向。
前提操作:Linux操作系统支持snmp。首先需要在linux上检查是否安装了snmp,然后配置上团体名Community,重启snmpd服务生效。
(1)在Debian/Ubuntu上使用apt-get安装:
检查是否已安装snmp:
apt-get list --installed | grep
安装snmp命令:
apt-get install snmp snmpd
(2)在CentOS/RHEL上使用yum安装:
检查是否已安装snmp:
rpm qa|grep snmp
安装snmp命令:
yum install net-snmp net-snmp-utils
安装完成SNMP软件包后,我们需要配置SNMP代理以允许本机提供远程管理和监控。在Linux中,SNMP代理的配置文件通常位于/etc/snmp/snmpd.conf。
vi /etc/snmp/snmpd.conf #编辑配置文件
#修改以下标红的位置
# sec.name source community com2sec notConfigUser default public #团体名,可以默认也可以自定义 # Second, map the security name into a group name: # groupName securityModel securityName group notConfigGroup v1 notConfigUser group notConfigGroup v2c notConfigUser access notconfigGroup any noauth #增加这行,允许远程访问 # Third, create a view for us to let the group have rights to: # Make at least snmpwalk -v 1 localhost -c public system fast again. # name incl/excl subtree mask(optional) view systemview included .1.3.6.1.2.1.1 view systemview included .1.3.6.1.2.1.25.1.1 view systemview included .1 #增加这行,允许读取系统的所有oid节点
#### # Finally, grant the group read-only access to the systemview view.
# group context sec.model sec.level prefix read write notif access notConfigGroup "" any noauth exact systemview none none
#############下面的需要往下翻一翻###################### syslocation LongJiangOffice #设置linux地点 syscontact Admin #设置联系人 # Example output of snmpwalk: # % snmpwalk -v 1 localhost -c public system # system.sysDescr.0 = "SunOS name sun4c" # system.sysObjectID.0 = OID: enterprises.ucdavis.ucdSnmpAgent.sunos4 # system.sysUpTime.0 = Timeticks: (595637548) 68 days, 22:32:55 # system.sysContact.0 = "Me <me@somewhere.org>" # system.sysName.0 = "name" # system.sysLocation.0 = "Right here, right now." # system.sysServices.0 = 72 ############################################################################### # Logging # # We do not want annoying "Connection from UDP: " messages in syslog. # If the following option is commented out, snmpd will print each incoming # connection, which can be useful for debugging. dontLogTCPWrappersConnects yes
#以下在末尾添加,用于获取linux发行版本、前top20 cpu、内存进程排行 ############################################################################### # Further Information # # See the snmpd.conf manual page, and the output of "snmpd -H". extend .1.3.6.1.6.2021.16 osversion /bin/cat /etc/system-release extend .1.3.6.1.6.2021.17 cputop20 '/bin/bash -c \'ps aux |head -n 1 && ps hauxc |sort -k3,3nr 2>/dev/null |head -n 20\'' extend .1.3.6.1.6.2021.18 memtop20 '/bin/bash -c \'ps aux |head -n 1 && ps hauxc |sort -k4,4nr 2>/dev/null |head -n 20 \'' |
自定义的oid需要放到snmpd.conf最后面,格式为
extend oid 命令绝对路径 文件绝对路径
比如:检查mysql端口存活,1表示有端口,0表示没有端口。
然后创建脚本vim /home/itops/check_mysql.sh,把命令行复制进去
脚本授权执行 chmod +x /home/itops/check_mysql.sh
脚本输出:
最后,写到snmpd.conf就是:
extend .1.3.6.1.6.2021.19 check_mysql /bin/bash /home/itops/check_mysql.sh
最后oid节点不能和已有的重复!
可以把脚本完善一下,改成匹配到1是存活,否则没有运行。
结果,可以使用红框的oid做为监控项。
设置snmp自启和启动snmpd服务
systemctl enable snmpd && systemctl restart snmpd
启动后,可以在本机测试snmp是否配置成功,返回如图下示例说明snmp正常:
snmpwalk -v 2c -c public 127.0.0.1 mem #获取内存运行数据
获取系统发行版本信息
snmpwalk -v 2c -c public 127.0.0.1 .1.3.6.1.6.2021.16
通过多次验证,发现oid:
SNMPv2-SMI::snmpV2.2021.16.4.1.2.9.111.115.118.101.114.115.105.111.110.1
最后输出的值都是系统发行版本号,所以在zabbix可以把这个oid填入监控项
获取CPU排行前20个进程
snmpwalk -v 2c -c public 127.0.0.1 .1.3.6.1.6.2021.18
通过上图发现,以下的oid可以正常输出我们需要的数据,因此监控项的oid就填这个,信息类型选择文本。
SNMPv2-SMI::snmpV2.2021.18.3.1.2.8.109.101.109.116.111.112.50.48
同理,找到内存前20的oid创建监控项即可。
linux发行版本
前20CPU进程
前20内存进程
以上就是Linux SNMP监控教程的全部内容。
大家好,我是乐乐,专注运维技术研究与分享,关注我学习更多Zabbix等使用技巧,更多运维问题还可以到乐维社区留言提问。乐维社区是运维监控领域的垂直社区,专注打造Zabbix等技术栈的线上交流与共享平台,每周三下午,社区关联答疑群(如下图)还提供免费专家在线答疑,欢迎小伙伴们加入。
错误信息