无法使用SNMP获取Linux磁盘空间
docker安装snmp后可以获取内存等信息,但是磁盘信息无法获取
配置文件已开放磁盘信息查询
1、放开下列配置的注释
proc mountd
proc ntalkd 4
proc sendmail 10 1
disk / 10000
2、增加配置
includeAllDisks for all partitions and disks
tar -zxvf net-snmp-5.7.1.tar.gz
cd net-snmp-5.7.1
./configure --prefix=/home/Lifangping/Soft/snmp --with-mib-modules='ucd-snmp/diskio ip-mib/ipv4InterfaceTable'
### 回车会出现让你设置一部分设置的情况,直接回车就可以。
make
make install
注意:#mkdir etc
#cd etc
vi snmpd.conf
###文件内容如下:
rocommunity public
配置内容为:允许所有的计算机来监控,只要数据共同体名public。#/home/Lifangping/Soft/snmp/sbin/snmpd -c /home/Lifangping/Soft/snmp/etc/snmpd.conf
检查是否启动成功#ps -ef | grep snmp
# ./snmpget -v1 -cpublic localhost 1.3.6.1.2.1.6.9.0
#查看tcp的连接数首先,可以在命令行下使用 snmpwalk 命令来测试是否能够获取到磁盘空间信息。例如,使用以下命令可以测试是否能够获取到根目录的磁盘空间信息:
snmpwalk -v 2c -c public localhost .1.3.6.1.4.1.2021.9.1.7
如果能够获取到磁盘空间信息,但是在监控系统中无法获取,可以考虑以下几个步骤:
检查监控系统是否配置正确。在监控系统中需要添加一个对应的设备并配置好 SNMP 的认证信息。
检查 SNMP 的权限设置。在 SNMP 配置文件中,可能会设置对某些信息只读,而对一些特定信息需要读写权限。可以检查一下对于磁盘信息的读写权限是否设置正确。
检查 SELinux 的设置。SELinux可能会影响 SNMP 获取磁盘信息。可以通过设置 SELinux 来允许 SNMP 获取更多的系统信息。例如,可以通过以下命令设置 SNMP 允许访问 /sys 文件系统:
setsebool -P snmpd_read_sysfs 1
如果以上步骤都不能解决问题,可能需要深入排查 SNMP 配置的问题,或者考虑更换监控系统。
引用chatGPT作答,您无法通过SNMP获取Linux系统上的磁盘空间信息,可能有几个原因。以下是您可以检查的一些内容:
1.SNMP守护程序配置:确保您的SNMP守护程序配置允许访问磁盘空间信息。您可能需要修改“snmpd.conf”文件,以启用适当的SNMP模块以获取磁盘使用情况。
2.磁盘空间监视工具:检查您使用的磁盘空间监视工具是否与SNMP兼容。某些监视工具可能需要安装特定的MIB(管理信息库)才能检索磁盘使用信息。
3.权限:确保运行SNMP守护程序的用户帐户具有访问磁盘使用情况所需的权限。
4.防火墙:检查是否有防火墙规则阻止SNMP流量。您可能需要添加一个SNMP流量例外,以允许SNMP客户端和服务器之间的通信。
5.SNMP版本:验证正在使用的SNMP版本是否与您要监视的设备兼容。一些旧设备可能仅支持SNMPv1或SNMPv2c,而较新的设备可能需要SNMPv3。
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
首先需要确认一下SNMP Agent是否正常工作,可以通过命令行或者SNMP客户端工具测试。如果Agent正常工作并且可以获取其他信息,那么可能是OID配置有误,需要检查OID是否正确。另外,也可以尝试使用其他SNMP客户端工具来获取磁盘信息,比如snmpwalk。
如果以上方法无法解决问题,可以尝试修改SNMP Agent的配置文件,具体方法如下:
打开SNMP Agent配置文件,通常在/etc/snmp/snmpd.conf。
搜索关键词"disk",找到类似以下的一行配置:
disk / 10000
确认该行配置已经取消注释并且是正确的。
如果修改了配置文件,需要重启SNMP Agent使其生效。
测试SNMP客户端工具是否能够获取到磁盘信息。
以下是一个Python脚本示例,使用SNMP协议获取Linux系统的磁盘空间信息:
from pysnmp.hlapi import *
# 定义OID和目标主机信息
oid = ObjectIdentity('HOST-RESOURCES-MIB', 'hrStorageTable')
community = CommunityData('public')
target = UdpTransportTarget(('localhost', 161))
# 发送SNMP请求
errorIndication, errorStatus, errorIndex, varBinds = next(
getCmd(SnmpEngine(), community, target, ContextData(), ObjectType(oid))
)
# 解析结果
if errorIndication:
print(errorIndication)
else:
if errorStatus:
print('%s at %s' % (errorStatus.prettyPrint(), errorIndex and varBinds[int(errorIndex)-1] or '?'))
else:
for varBind in varBinds:
print(' = '.join([x.prettyPrint() for x in varBind]))
注意:需要安装pysnmp模块才能执行上述代码。可以通过pip安装,命令:pip install pysnmp
如果我的回答解决了您的问题,请采纳!
1、没有添加磁盘信息到SNMP配置文件:SNMP服务需要读取配置文件来获取磁盘信息,因此需要将磁盘信息添加到SNMP配置文件中。可以通过修改snmpd.conf文件来添加磁盘信息。
2、没有设置SNMP访问权限:SNMP服务有访问权限的限制,如果没有正确设置SNMP访问权限,可能无法获取磁盘信息。需要在SNMP配置文件中设置正确的访问权限。
3、没有配置正确的OID:SNMP使用OID来标识和获取特定的数据。如果没有配置正确的OID,可能无法获取磁盘信息。需要确保在SNMP配置文件中正确配置了磁盘信息的OID。
4、Docker容器没有挂载磁盘:如果Docker容器没有挂载磁盘,SNMP服务将无法获取磁盘信息。需要在Docker容器中挂载磁盘,并将磁盘信息添加到SNMP配置文件中。
试试看一下,是不是上面的原因
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
在Linux系统中,SNMP Agent默认不会返回磁盘信息,需要进行额外的配置才能获取磁盘空间等信息。因此,你需要进行以下操作来配置SNMP Agent:
disk / 100000
其中,disk表示要查询磁盘信息,/表示查询根目录,100000表示阈值,表示当磁盘使用量超过100000K时才会返回信息。可以根据实际情况进行调整。systemctl restart snmpd
netstat -tunlp | grep 161
snmpwalk -v 2c -c public localhost .1.3.6.1.2.1.25.2.3.1
其中,-v 2c表示使用SNMP v2c版本,-c public表示使用公共的SNMP Community字符串,localhost表示查询本地系统,.1.3.6.1.2.1.25.2.3.1表示查询磁盘信息。如果输出了磁盘信息,则表示SNMP Agent已经配置成功。
如果仍然无法获取磁盘信息,可以检查SNMP Agent的日志,通常位于/var/log/snmpd.log,查看是否有相关的错误信息。也可以尝试使用其他SNMP工具进行测试,例如snmpget、snmpwalk等。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢