Linux小知识---利用Snmp远程获取CPU,内存和磁盘使用率_如何获取主机的cpu 内存 snmp oid

最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

资料预览

给大家整理的视频资料:

给大家整理的电子书资料:

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

| .1.3.6.1.2.1.1.4.0 | 系统联系人 | sysContact | GET |
| .1.3.6.1.2.1.1.5.0 | 获取机器名 | SysName | GET |
| .1.3.6.1.2.1.1.6.0 | 机器坐在位置 | SysLocation | GET |
| .1.3.6.1.2.1.1.7.0 | 机器提供的服务 | SysService | GET |
| .1.3.6.1.2.1.25.4.2.1.2 | 系统运行的进程列表 | hrSWRunName | WALK |
| .1.3.6.1.2.1.25.6.3.1.2 | 系统安装的软件列表 | hrSWInstalledName | WALK |

网络接口(1.3.6.1.2.1.2)

OID描述备注请求方式
.1.3.6.1.2.1.2.1.0网络接口的数目IfNumberGET
.1.3.6.1.2.1.2.2.1.2网络接口信息描述IfDescrWALK
.1.3.6.1.2.1.2.2.1.3网络接口类型IfTypeWALK
.1.3.6.1.2.1.2.2.1.4接口发送和接收的最大IP数据报[BYTE]IfMTUWALK
.1.3.6.1.2.1.2.2.1.5接口当前带宽[bps]IfSpeedWALK
.1.3.6.1.2.1.2.2.1.6接口的物理地址IfPhysAddressWALK
.1.3.6.1.2.1.2.2.1.8接口当前操作状态[updown]IfOperStatus
.1.3.6.1.2.1.2.2.1.10接口收到的字节数IfInOctetWALK
.1.3.6.1.2.1.2.2.1.16接口发送的字节数IfOutOctetWALK
.1.3.6.1.2.1.2.2.1.11接口收到的数据包个数IfInUcastPktsWALK
.1.3.6.1.2.1.2.2.1.17接口发送的数据包个数IfOutUcastPktsWALK

CPU及负载

OID描述备注请求方式
.1.3.6.1.4.1.2021.11.9.0用户CPU百分比ssCpuUserGET
.1.3.6.1.4.1.2021.11.10.0系统CPU百分比ssCpuSystemGET
.1.3.6.1.4.1.2021.11.11.0空闲CPU百分比ssCpuIdleGET
.1.3.6.1.4.1.2021.11.50.0原始用户CPU使用时间ssCpuRawUserGET
.1.3.6.1.4.1.2021.11.51.0原始nice占用时间ssCpuRawNiceGET
.1.3.6.1.4.1.2021.11.52.0原始系统CPU使用时间ssCpuRawSystem.GET
.1.3.6.1.4.1.2021.11.53.0原始CPU空闲时间ssCpuRawIdleGET
.1.3.6.1.2.1.25.3.3.1.2CPU的当前负载,N个核就有N个负载hrProcessorLoadWALK
. 1.3.6.1.4.1.2021.11.3.0ssSwapInGET
. 1.3.6.1.4.1.2021.11.4.0SsSwapOutGET
. 1.3.6.1.4.1.2021.11.5.0ssIOSentGET
. 1.3.6.1.4.1.2021.11.6.0ssIOReceiveGET
. 1.3.6.1.4.1.2021.11.7.0ssSysInterruptsGET
. 1.3.6.1.4.1.2021.11.8.0ssSysContextGET
. 1.3.6.1.4.1.2021.11.54.0ssCpuRawWaitGET
. 1.3.6.1.4.1.2021.11.56.0ssCpuRawInterruptGET
. 1.3.6.1.4.1.2021.11.57.0ssIORawSentGET
. 1.3.6.1.4.1.2021.11.58.0ssIORawReceivedGET
. 1.3.6.1.4.1.2021.11.59.0ssRawInterruptsGET
. 1.3.6.1.4.1.2021.11.60.0ssRawContextsGET
. 1.3.6.1.4.1.2021.11.61.0ssCpuRawSoftIRQGET
. 1.3.6.1.4.1.2021.11.62.0ssRawSwapIn.GET
. 1.3.6.1.4.1.2021.11.63.0ssRawSwapOutGET
.1.3.6.1.4.1.2021.10.1.3.1Load5GET
.1.3.6.1.4.1.2021.10.1.3.2Load10GET
.1.3.6.1.4.1.2021.10.1.3.3Load15GET

内存及磁盘(1.3.6.1.2.1.25)

OID描述备注请求方式
.1.3.6.1.2.1.25.2.2.0 获取内存大小hrMemorySizeGET
.1.3.6.1.2.1.25.2.3.1.1存储设备编号hrStorageIndexWALK
.1.3.6.1.2.1.25.2.3.1.2存储设备类型hrStorageType[OID]WALK
.1.3.6.1.2.1.25.2.3.1.3存储设备描述hrStorageDescrWALK
.1.3.6.1.2.1.25.2.3.1.4簇的大小hrStorageAllocationUnitsWALK
.1.3.6.1.2.1.25.2.3.1.5簇的的数目hrStorageSizeWALK
.1.3.6.1.2.1.25.2.3.1.6使用多少,跟总容量相除就是占用率hrStorageUsedWALK
.1.3.6.1.4.1.2021.4.3.0Total Swap Size(虚拟内存)memTotalSwapGET
.1.3.6.1.4.1.2021.4.4.0Available Swap SpacememAvailSwapGET
.1.3.6.1.4.1.2021.4.5.0Total RAM in machinememTotalRealGET
.1.3.6.1.4.1.2021.4.6.0Total RAM usedmemAvailRealGET
.1.3.6.1.4.1.2021.4.11.0Total RAM FreememTotalFreeGET
.1.3.6.1.4.1.2021.4.13.0Total RAM SharedmemSharedGET
.1.3.6.1.4.1.2021.4.14.0Total RAM BufferedmemBufferGET
.1.3.6.1.4.1.2021.4.15.0Total Cached MemorymemCachedGET
.1.3.6.1.4.1.2021.9.1.2Path where the disk is mounteddskPathWALK
.1.3.6.1.4.1.2021.9.1.3Path of the device for the partitiondskDeviceWALK
.1.3.6.1.4.1.2021.9.1.6Total size of the disk/partion (kBytes)dskTotalWALK
.1.3.6.1.4.1.2021.9.1.7Available space on the diskdskAvailWALK
.1.3.6.1.4.1.2021.9.1.8Used space on the diskdskUsedWALK
.1.3.6.1.4.1.2021.9.1.9Percentage of space used on diskdskPercentWALK
.1.3.6.1.4.1.2021.9.1.10Percentage of inodes used on diskdskPercentNodeWALK

还有很多,也可以自定义,不过以上这些够运维使用了。
在这里插入图片描述

命令分析

读取用到的命令是snmpget和snmpwalk,参数就不细说了,举两个例子就可以了,按照前面的OID,来获取一下空闲的CPU

[root@localhost 41src_2in1]# snmpget -v 2c -c public 127.0.0.1 .1.3.6.1.4.1.2021.11.11.0 
UCD-SNMP-MIB::ssCpuIdle.0 = INTEGER: 95

可以看到CPU空闲95%,那么学习过数学的我们,一下子就能算出来使用率了。
在这里插入图片描述

获取CPU使用率

那将前面的写法封装成shell的函数即可

cpuu()
{
	cpufree=$(snmpget -v $version -c $public $ipaddr .1.3.6.1.4.1.2021.11.11.0 |cut -d ' ' -f4 )
	cpuused=$[100-cpufree]
	
	if [ $cpufree -gt 0 ];	then 
		echo $cpuused"%"
	else 
		echo ""
	fi
}

这里就涉及到了shell中的数学计算,通过$[x-y]这种写法,就可以计算一个变量的加减乘除,不过仅限于整数操作。小数的写法下面再介绍
在这里插入图片描述

获取内存使用率

思路很简单,先得到空闲内存数,然后得到总的内存数,然后

总内存-空闲内存/总内存

即可得到内存使用率。
这里就涉及到了小数的计算,而且这个数据,必然是小于1的,
先上函数

memu()
{
	memfree=$(snmpget -v $version -c $public $ipaddr .1.3.6.1.4.1.2021.4.6.0|cut -d ' ' -f4)
	memtotal=$(snmpget -v $version -c $public $ipaddr .1.3.6.1.4.1.2021.4.5.0|cut -d ' ' -f4)
	memused=$[memtotal-memfree]

	memusage=$(echo "scale=2; $memused / $memtotal" | bc|cut -d '.' -f2)
	if [ $memusage -gt 0 ];	then 
		echo $memusage"%"
	else 
		echo ""
	fi
}

这里就用到了小数除法的计算,表达方式就是

结果=$(echo "scale=2; $A/ $B" | bc)

其实就是用了bc这个命令,系统中没有的话,需要安装

yum install bc

应该留是通过文件内容,计算结果。感兴趣的可以研究一下
在这里插入图片描述

获取硬盘使用率

这里怕是全网独创了一种写法,因为有时候有了一种思路,就不想再去变通了,为了实现这个思路,可谓是想尽办法。
首先这里试着读了一下总的硬盘大小,失败了

[root@localhost 41src_2in1]# snmpwalk -v 2c -c public 127.0.0.1 .1.3.6.1.4.1.2021.9.1.6
UCD-SNMP-MIB::dskTotal = No Such Instance currently exists at this OID

然后也没有成功解决这个问题,后来又发现了可以读去簇的数目和使用簇的多少

[root@localhost 41src_2in1]# snmpwalk -v 2c -c public 127.0.0.1 .1.3.6.1.2.1.25.2.3.1.6 
HOST-RESOURCES-MIB::hrStorageUsed.1 = INTEGER: 24010176
HOST-RESOURCES-MIB::hrStorageUsed.3 = INTEGER: 24010176
HOST-RESOURCES-MIB::hrStorageUsed.6 = INTEGER: 5264
HOST-RESOURCES-MIB::hrStorageUsed.7 = INTEGER: 6568376
HOST-RESOURCES-MIB::hrStorageUsed.8 = INTEGER: 733540
HOST-RESOURCES-MIB::hrStorageUsed.10 = INTEGER: 0
HOST-RESOURCES-MIB::hrStorageUsed.35 = INTEGER: 0
HOST-RESOURCES-MIB::hrStorageUsed.37 = INTEGER: 92573
HOST-RESOURCES-MIB::hrStorageUsed.38 = INTEGER: 0
HOST-RESOURCES-MIB::hrStorageUsed.55 = INTEGER: 7819037
HOST-RESOURCES-MIB::hrStorageUsed.60 = INTEGER: 49671
HOST-RESOURCES-MIB::hrStorageUsed.61 = INTEGER: 9096739
HOST-RESOURCES-MIB::hrStorageUsed.65 = INTEGER: 0
[root@localhost 41src_2in1]# snmpwalk -v 2c -c public 127.0.0.1 .1.3.6.1.2.1.25.2.3.1.5 
HOST-RESOURCES-MIB::hrStorageSize.1 = INTEGER: 65400996
HOST-RESOURCES-MIB::hrStorageSize.3 = INTEGER: 98267296
HOST-RESOURCES-MIB::hrStorageSize.6 = INTEGER: 65400996
HOST-RESOURCES-MIB::hrStorageSize.7 = INTEGER: 6568376
HOST-RESOURCES-MIB::hrStorageSize.8 = INTEGER: 733540
HOST-RESOURCES-MIB::hrStorageSize.10 = INTEGER: 32866300
HOST-RESOURCES-MIB::hrStorageSize.35 = INTEGER: 8175124
HOST-RESOURCES-MIB::hrStorageSize.37 = INTEGER: 8175124
HOST-RESOURCES-MIB::hrStorageSize.38 = INTEGER: 8175124
HOST-RESOURCES-MIB::hrStorageSize.55 = INTEGER: 18341120
HOST-RESOURCES-MIB::hrStorageSize.60 = INTEGER: 257536
HOST-RESOURCES-MIB::hrStorageSize.61 = INTEGER: 949451776
HOST-RESOURCES-MIB::hrStorageSize.65 = INTEGER: 1635024

眼前一亮,这不就可以通过加法,计算出来使用比例了吗,我真是太聪明了
在这里插入图片描述
这里还用到了一种列相加的办法,例如一个文件中,有一列数字,那么就可以通过以下的shell方式计算出来

awk '{sum += $1};END {print sum}' /tmp/x.txt

然后总结了写法

snmpwalk -v $version -c $public $ipaddr .1.3.6.1.2.1.25.2.3.1.6 |cut -d ' ' -f4 > /tmp/used.txt  
snmpwalk -v $version -c $public $ipaddr .1.3.6.1.2.1.25.2.3.1.5 |cut -d ' ' -f4 > /tmp/all.txt  
hdused=$(awk '{sum += $1};END {print sum}' /tmp/used.txt) 
hdtotal=$(awk '{sum += $1};END {print sum}' /tmp/all.txt)
hdusage=$(echo "scale=2; $hdused / $hdtotal" | bc|cut -d '.' -f2)
hdusage\_new=$(echo -e $hdusage | sed -r 's/0\*([0-9])/\1/')
if [ $hdusage\_new -gt 0 ];	then 
	echo $hdusage\_new"%"
else 
	echo ""
fi

满怀欣喜的结算之后,发现不太对,然后就又发现,原来每个簇的大小不一样。

[root@localhost 41src_2in1]# snmpwalk -v 2c -c public 127.0.0.1 .1.3.6.1.2.1.25.2.3.1.4
HOST-RESOURCES-MIB::hrStorageAllocationUnits.1 = INTEGER: 1024 Bytes
HOST-RESOURCES-MIB::hrStorageAllocationUnits.3 = INTEGER: 1024 Bytes
HOST-RESOURCES-MIB::hrStorageAllocationUnits.6 = INTEGER: 1024 Bytes
HOST-RESOURCES-MIB::hrStorageAllocationUnits.7 = INTEGER: 1024 Bytes
HOST-RESOURCES-MIB::hrStorageAllocationUnits.8 = INTEGER: 1024 Bytes
HOST-RESOURCES-MIB::hrStorageAllocationUnits.10 = INTEGER: 1024 Bytes
HOST-RESOURCES-MIB::hrStorageAllocationUnits.35 = INTEGER: 4096 Bytes
HOST-RESOURCES-MIB::hrStorageAllocationUnits.37 = INTEGER: 4096 Bytes
HOST-RESOURCES-MIB::hrStorageAllocationUnits.38 = INTEGER: 4096 Bytes
HOST-RESOURCES-MIB::hrStorageAllocationUnits.55 = INTEGER: 4096 Bytes
HOST-RESOURCES-MIB::hrStorageAllocationUnits.60 = INTEGER: 4096 Bytes
HOST-RESOURCES-MIB::hrStorageAllocationUnits.61 = INTEGER: 4096 Bytes
HOST-RESOURCES-MIB::hrStorageAllocationUnits.65 = INTEGER: 4096 Bytes

在这里插入图片描述

最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

资料预览

给大家整理的视频资料:

给大家整理的电子书资料:

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

给大家整理的电子书资料:

[外链图片转存中…(img-djwFne5M-1715804270283)]

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值