Zabbix技术分享——一文教你玩转Linux SNMP监控

本文教你如何通过自定义oid,实现想要的监控效果,可以执行命令、命令行、脚本输出符合预期效果的数据,达到期望的监控效果,给大家提供一个监控拓展思路参考方向。

前言:

一般来说,当我们使用Zabbix工具通过snmp监控Linux系统时,默认的snmp只支持系统内核、cpu、内存、分区、网卡这5个方面的监控数据,而无法获取到linux的发行版本信息以及进程信息;相对于zabbix agent来说,snmp所能获取的监控指标比较少,指标拓展比较依赖个人的技术知识水平和操作能力。

本文教你如何通过自定义oid,实现想要的监控效果,可以执行命令、命令行、脚本输出符合预期效果的数据,达到期望的监控效果,给大家提供一个监控拓展思路参考方向。

 

前提操作:Linux操作系统支持snmp。首先需要在linux上检查是否安装了snmp,然后配置上团体名Community,重启snmpd服务生效。


1.安装和检查snmp

(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


2. 配置snmp

安装完成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 \''


i8cXO9qY653f826e2efed.png

2q5xu7iP653f8274b3c53.png

QIkDkZOR653f827b2bbe1.png

2.1 自定义oid示例

自定义的oid需要放到snmpd.conf最后面,格式为

extend oid 命令绝对路径 文件绝对路径

比如:检查mysql端口存活,1表示有端口,0表示没有端口。

kIXOsFBZ653f82813e1ce.png 然后创建脚本vim /home/itops/check_mysql.sh,把命令行复制进去

Hud0arW5653f8289697a7.png

脚本授权执行 chmod +x /home/itops/check_mysql.sh

脚本输出:

DJwyTohq653f828f5204c.png

最后,写到snmpd.conf就是:

extend .1.3.6.1.6.2021.19 check_mysql /bin/bash /home/itops/check_mysql.sh

最后oid节点不能和已有的重复!

可以把脚本完善一下,改成匹配到1是存活,否则没有运行。

kEWlCLNc653f829466a4e.png

结果,可以使用红框的oid做为监控项。

YaeFxduk653f829c04e5a.png

3. snmp测试和监控项

设置snmp自启和启动snmpd服务

systemctl enable snmpd && systemctl restart snmpd

启动后,可以在本机测试snmp是否配置成功,返回如图下示例说明snmp正常:

snmpwalk -v 2c -c public 127.0.0.1 mem  #获取内存运行数据

qfhjLcQn653f82ab0c2be.png

获取系统发行版本信息

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填入监控项

FivOKLHs653f82b51fd2a.png

yKznnxUc653f82bc81d91.png

获取CPU排行前20个进程

snmpwalk -v 2c -c public 127.0.0.1 .1.3.6.1.6.2021.18

Ez6X84cL653f82c39043a.png

通过上图发现,以下的oid可以正常输出我们需要的数据,因此监控项的oid就填这个,信息类型选择文本。

SNMPv2-SMI::snmpV2.2021.18.3.1.2.8.109.101.109.116.111.112.50.48

eZsDowiK653f82cae27f9.png

zkLsLi8m653f82d66e63d.png

同理,找到内存前20的oid创建监控项即可。


4.监控效果

linux发行版本

EgT25yzK653f8307107fb.png

前20CPU进程

xJwN6nt5653f82f3c85bf.png

前20内存进程

bAl2sr34653f82ecd328c.png


以上就是Linux SNMP监控教程的全部内容。

大家好,我是乐乐,专注运维技术研究与分享,关注我学习更多Zabbix等使用技巧,更多运维问题还可以到乐维社区留言提问。乐维社区是运维监控领域的垂直社区,专注打造Zabbix等技术栈的线上交流与共享平台,每周三下午,社区关联答疑群(如下图)还提供免费专家在线答疑,欢迎小伙伴们加入。


9GHrqm4i65274adbb35a8.png

 

0 条评论

请先 登录 后评论
乐维君
乐维君

397 篇文章

作家榜 »

  1. 乐维君 397 文章
  2. YOHOHO 14 文章
  3. 机灵小和尚 13 文章
  4. 我是一只小菜鸡 12 文章
  5. 细雨闲花 11 文章
  6. 。。。 9 文章
  7. 御前侍卫张五哥 9 文章
  8. 小黄人 8 文章