随着大于 16TB 的卷变得越来越普遍,人们认识到用于报告 SNMP 中标准“HOST-RESOURCES”MIB 中的磁盘大小和使用情况的 32 位值不足以报告正确的磁盘大小。
Net-SNMP 似乎通过简单地操纵“AllocationUnits”的值来解决这个问题,以维护一个 32 位的磁盘利用率值(因为总磁盘大小/使用量等于 32 位空间值乘以分配单元),以允许用于计算大于 8/16TB 的卷。假设您对分配单元没有任何报告兴趣,并且可以接受少量的不准确。这似乎是一个优雅的解决方案。
https://bugzilla.redhat.com/show_bug.cgi?id=654384
然而,Window 的内置 SNMP 服务似乎继续受到此错误的影响,只是报告已使用/分配的磁盘空间的模数,导致磁盘大小报告不准确。
有没有办法让 Windows 正确报告超过 16TB 的卷的磁盘使用情况?我们试图简单地安装 Net-SNMP 5.5 x64 并完全禁用 Windows SNMP 服务,但不幸的是这并没有解决我们的问题。
使用 NetSNMP 扩展时,我们为感兴趣的特定磁盘收集的信息如下:

无论我们使用的是 vanilla Windows SNMP 服务还是 NetSNMP,这些结果都是相同的。
我看到 Cacti 社区中的人提到简单地编写解决方案。不幸的是,我们使用 Observium 进行快速和基本的系统监控。如果无法在 Window 一侧纠正问题,是否可以让 Observium 报告自定义 MIB?
--更新--
查看错误报告提到将“realStorageUnits”添加到 snmpd.conf 文件时,我们在设置该指令时遇到了以下问题:

--更新 2 --
好吧,经过多次修改,它看起来不像任何 Windows 版本的 Net-SNMP,如“realStorageUnits”指令。包含该指令会在启动 SNMP 时产生警告。我们尝试了 5.5、5.6 和 5.7 版本。这里有没有人想过如何让 SNMP 在 Windows 上报告超过 16 TB 的卷?
我想在我的网络中找到所有启用了 snmp 的设备,我得到了它在代理和管理器架构中的工作方式。
我得到了 net-snmp 库来创建一个简单的应用程序来从远程设备获取 snmp 数据。我必须编写一个程序来做到这一点,我想要设备的 mac 地址和更多信息。
我得到了从远程节点获取数据的程序,但我有一个疑问,如何获取系统的 mac 地址以及获取设备 mac 的 oid 是什么,
是否有任何通用 oids 不是供应商特定的。我必须获取所有设备的数据。
一些更新:
现在使用 snmp 工具 snmpwalk 我得到了可能的信息,但其中我想要一些系统信息,mac,os 名称(如果可用),但是我如何使用 net-snmp 进行编程以获取这些信息,因为我不知道哪个系统的通用 oid名字会来。我想写一个程序,我必须得到一些必需的信息,所以我需要 oid,我必须把这个 oid 给 net-Snmp 的函数,以便它会给我相应的结果。
我必须使用像 sysName 这样的字符串名称来获取系统名称,如果是这样,那么在 mac 地址的情况下写“ifPhysAddress.2”然后提到 mac(在 snmpwalk 的结果中)。那么 oid 是什么获取 mac,因为它对所有设备都不同。
当我使用 snmpwalk 时,我得到一行如下
SNMPv2-SMI::mib-2.25.3.2.1.3.1 = 字符串:“HP LaserJet Professional P1606dn”
这是打印机的名称。意思是这个oid用于获取打印机的名称(mib-2.25.3.2.1.3.1)。这对所有设备来说都是真的吗?如果我查询这个 oid,我将获得相应 IP 的设备名称,无论设备可能是什么。这是否正确。
请给出一些想法。
谢谢
我在配置snmptt以正确转换 snmp 陷阱时遇到了一些麻烦。
下面是一个问题:
/etc/snmp/snmptt.conf 反映:
EVENT fgFmTrapIfChange .1.3.6.1.4.1.12356.101.6.0.1004 "Status Events" Critical
FORMAT $*
EXEC /usr/local/nagios/libexec/eventhandlers/submit_check_result $r "snmp_traps" 2 "$O: $+*" "$*"
SDESC
Trap is sent to the managing FortiManager if an interface IP is changed
Variables:
1: fnSysSerial
2: ifName
3: fgManIfIp
4: fgManIfMask
EDESC
Run Code Online (Sandbox Code Playgroud)
当收到陷阱时,/var/log/messages 反映:
Sep 6 12:07:32 SNMPMANAGERHOST snmptrapd[15385]:
2012-09-06 12:07:32 <UNKNOWN>
[UDP:
[192.168.100.2]:162->[192.168.100.31]]:
#012.1.3.6.1.2.1.1.3.0 = Timeticks: (707253943) 81 days, 20:35:39.43
#011.1.3.6.1.6.3.1.1.4.1.0 = OID: .1.3.6.1.4.1.12356.101.6.0.1004
#011.1.3.6.1.4.1.12356.100.1.1.1.0 = STRING: FGTNNNNNNNNN
#011.1.3.6.1.2.1.31.1.1.1.1.10 = STRING: internal4
#011.1.3.6.1.4.1.12356.101.6.2.1.0 …Run Code Online (Sandbox Code Playgroud) 在阅读了 SNMP 和这里的一些问题之后,我认为将代理角色理解为设备的 SNMP 服务(像 SQL 一样,它是存储的 API)。
当您执行 SQL 查询时,SQL 引擎会完成所有工作并返回结果 - 您无需了解存储方式和存储位置。
但是 MIB 不是实际存储,那么我的代理的作用是什么?
如果代理只像我在本教程中一样注册 MIB ,那么它根本不用作处理程序,这意味着有一个 pyhiscal 存储,您可以设置并到达那里而无需绕过处理程序。在本教程中,您可以这样做:
netsnmp_register_int_instance("my example int variable",
my_registration_oid,
OID_LENGTH(my_registration_oid),
&example1, NULL);
Run Code Online (Sandbox Code Playgroud)
不需要处理程序来处理调用。
假设我想监控我的应用程序的待处理请求队列,所以我想要一个代理,所有对 application_pending_request 的 SNMP 请求都将被触发,它会返回队列深度。当我需要轮询我的应用程序队列以获得结果时,为什么我需要一个实际的 MIB?
SNMP ifInOctets = 2145342796 - 大约 2GB。
ifconfig : RX 字节:174302710687 (174.3 GB)
有趣的是,发送的字节几乎完全一致:
ifOutOctets : 1002415050 - 大约 1GB
ifconfig : TX 字节:1002418728 (1.0 GB)
这不是 SNMP 中断:
snmpwalk -v2c -c public localhost 1.3.6.1.2.1.31.1.1.1.19
iso.3.6.1.2.1.31.1.1.1.19.1 = Timeticks: (0) 0:00:00.00
iso.3.6.1.2.1.31.1.1.1.19.2 = Timeticks: (0) 0:00:00.00
iso.3.6.1.2.1.31.1.1.1.19.3 = Timeticks: (0) 0:00:00.00
Run Code Online (Sandbox Code Playgroud)
任何人都对发送的数据编号中的这种不连续性有所了解?非常感谢!
(net-snmp, Ubuntu Linux, 12.04 LTS)
当我从 systemd 启动 Net-SNMP 时,没有错误消息但守护进程没有运行:
% sudo systemctl start snmpd
%
Run Code Online (Sandbox Code Playgroud)
当我从命令行启动它时,它运行:
% sudo /usr/sbin/snmpd
Run Code Online (Sandbox Code Playgroud)
以及对 SNMP 查询的回答。
如果我添加调试标志 (-LSdd),我会看到 systemd 启动的守护进程在以下之后立即被杀死:
Apr 7 15:37:50 localhost snmpd[1298]: NET-SNMP version 5.7.2
Apr 7 15:37:50 localhost snmpd[1298]: Received TERM or STOP signal... shutting down...
Run Code Online (Sandbox Code Playgroud)
服务文件是 Arch Linux 软件包的默认文件之一:
[Unit]
Description=Simple Network Management Protocol (SNMP) Daemon
After=syslog.target network.target
[Service]
Type=forking
ExecStart=/usr/sbin/snmpd
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
如果我在服务文件中添加 RemainAfterExit=yes,snmpd 工作但机器不再正常启动(例如没有 DHCP 客户端)
系统为最新的 Arch Linux,软件包版本为:
Name : net-snmp
Version : 5.7.2-3
Run Code Online (Sandbox Code Playgroud)
对于这个错误,显然有一个旧的 Arch Linux …
我有一个运行多个虚拟机的 ESXi 主机。我使用 snmp 查询该主机的信息。我需要查找某个虚拟机上是否安装了 VMware Tools。那可能吗?如果是,它是哪个 OID?
在文档中有一些条目说的是
报告配置的虚拟硬件 MAC 地址。如果 VMware Tools 未运行,则该值为零或为空。
但是我找不到任何可以明确查询某个 VM 上是否安装了 VMware 工具的内容。
使用 ubuntu 和 net-snmp snmp 工作但在 sys.log 中我看到很多关于 snmpd.conf 的错误
snmpd.conf :
rwcommunity community 10.0.0.1
rwcommunity community 10.0.0.2
agentAddress udp:10.0.0.1:161
view systemonly included .1.3.6.1.2.1.1
view systemonly included .1.3.6.1.2.1.25.1
# Default access to basic system info
rocommunity public default -V systemonly
rouser authOnlyUser
sysLocation Sitting on the Dock of the Bay
sysContact Me <me@example.org>
sysServices 72
proc mountd
proc ntalkd 4
proc sendmail 10 1
disk / 10000
disk /var 5%
includeAllDisks 10%
load 12 10 5
trapsink localhost public
iquerySecName …Run Code Online (Sandbox Code Playgroud) 我将我的一个 freebsd 盒子更新为 9-stable(全新安装)并安装 net-snmp 进行监控。
uname -r
9.1-PRERELEASE
pkg_info net-snmp-5.7.1_7
Information for net-snmp-5.7.1_7:
Comment:
An extendable SNMP implementation
....
cat /var/db/ports/net-snmp/options
# This file is auto-generated by 'make config'.
# Options for net-snmp-5.7.1_7
_OPTIONS_READ=net-snmp-5.7.1_7
_FILE_COMPLETE_OPTIONS_LIST= IPV6 MFD_REWRITES PERL PERL_EMBEDDED PYTHON DUMMY TKMIB DMALLOC MYSQL AX_SOCKONLY UNPRIVILEGED
OPTIONS_FILE_UNSET+=IPV6
OPTIONS_FILE_UNSET+=MFD_REWRITES
OPTIONS_FILE_SET+=PERL
OPTIONS_FILE_SET+=PERL_EMBEDDED
OPTIONS_FILE_UNSET+=PYTHON
OPTIONS_FILE_SET+=DUMMY
OPTIONS_FILE_UNSET+=TKMIB
OPTIONS_FILE_SET+=DMALLOC
OPTIONS_FILE_UNSET+=MYSQL
OPTIONS_FILE_UNSET+=AX_SOCKONLY
OPTIONS_FILE_UNSET+=UNPRIVILEGED
Run Code Online (Sandbox Code Playgroud)
我在这台机器上有大约 500 个 vlan,并通过 snmpd 收集有关接口的信息到 2 个不同的软件,zabbix 和 cacti。
他们都用空白字段绘制图形。

我尝试将 zabbix 中的轮询时间从 15 秒更改为 30、60、90、120、10。无论如何,我有空白字段。
snmpd.conf 是空的——只有一个访问控制。
此配置在 freebsd 8 …
比较这个
#免费-m
缓存的已用空闲共享缓冲区总数
电话:72363 68035 4328 0 522 66294
-/+ 缓冲区/缓存:1218 71145
交换:12291 0 12291
和这个:
# snmpwalk -c public -v 2c localhost .1.3.6.1.4.1.2021.4 UCD-SNMP-MIB::memIndex.0 = 整数:0 UCD-SNMP-MIB::memErrorName.0 = STRING:交换 UCD-SNMP-MIB::memTotalSwap.0 = 整数:12586888 kB UCD-SNMP-MIB::memAvailSwap.0 = 整数:12586784 kB UCD-SNMP-MIB::memTotalReal.0 = 整数:74100516 kB UCD-SNMP-MIB::memAvailReal.0 = 整数:4429580 kB UCD-SNMP-MIB::memTotalFree.0 = 整数:17016364 kB UCD-SNMP-MIB::memMinimumSwap.0 = 整数:16000 kB UCD-SNMP-MIB::memBuffer.0 = 整数:534804 kB UCD-SNMP-MIB::memCached.0 = 整数:44238560 kB UCD-SNMP-MIB::memSwapError.0 = INTEGER: noError(0) UCD-SNMP-MIB::memSwapErrorMsg.0 = 字符串:
为什么免费为“缓存”显示 66294MB 而snmp 为“memCached”显示大约 44238MB?不应该是一样的吗?
查看 MIB,我看到“memCached”是用于缓存的“物理或虚拟”内存。(不要告诉我它会将磁盘缓存放入交换区)^^
目标是free通过snmp找出真正的空闲物理内存(即此处为 71145,如 …
net-snmp ×10
snmp ×7
linux ×3
networking ×2
snmpd ×2
arch-linux ×1
cacti ×1
freebsd ×1
memory-usage ×1
monitoring ×1
systemd ×1
vmware-esx ×1
vmware-esxi ×1
windows ×1
zabbix ×1