我是一名初级系统管理员,从事 IT 监控领域的工作。我有一个问题check_snmp_storage.pl该脚本显示某些分区 (/var) 磁盘使用情况比 df 命令在同一服务器上显示的情况低一些百分比。
我这样调用 check_snmp_storage.pl :
perl check_snmp_storage.pl -2 -C public <IP_ADDRESS> -m /var -w 80 -c 90 -G
输出如下:
Alarm at 15
SNMP v2c login
Filter : /var
OID : 1.3.6.1.2.1.25.2.3.1.3.8, Desc : Shared memory
OID : 1.3.6.1.2.1.25.2.3.1.3.56, Desc : /dev/shm
OID : 1.3.6.1.2.1.25.2.3.1.3.31, Desc : /var
Name : /var, Index : 31
OID : 1.3.6.1.2.1.25.2.3.1.3.6, Desc : Memory buffers
OID : 1.3.6.1.2.1.25.2.3.1.3.10, Desc : Swap space
OID : 1.3.6.1.2.1.25.2.3.1.3.40, Desc : /sys/fs/cgroup
OID : 1.3.6.1.2.1.25.2.3.1.3.7, Desc : Cached memory
OID : 1.3.6.1.2.1.25.2.3.1.3.3, Desc : Virtual memory
OID : 1.3.6.1.2.1.25.2.3.1.3.36, Desc : /run
OID : 1.3.6.1.2.1.25.2.3.1.3.32, Desc : /
OID : 1.3.6.1.2.1.25.2.3.1.3.1, Desc : Physical memory
storages selected : 1
1.3.6.1.2.1.25.2.3.1.6.31 : 320923825
1.3.6.1.2.1.25.2.3.1.4.31 : 4096
1.3.6.1.2.1.25.2.3.1.5.31 : 428831117
Descr : /var
Size : 428831117
Used : 320923825
Alloc : 4096
Perf data : /var=1224GB;
/var: 75%used(1224GB/1636GB) (<80%) : OK
相反,在同一服务器上调用的 df 命令显示磁盘使用情况,如下所示:
Filesystem Size Used Avail Use% Mounted on
/dev/md3 1.8T 1.4T 354G 79% /var
对于我的监控集群来说,差异太大,无法作为有关我们系统运行状况的良好信息源。
我试图找出两者之间的真正区别是什么,但我找不到任何解释。我假设 df “增加了一些东西”到磁盘使用量,但我不知道是什么,也不知道如何使这两个值相同(或非常接近,如 1% 差异)。
答案1
查看磁盘系统预留和提供的 snmp 信息。这篇文章解释了这两个结果之间的差异:
可以看到,net-snmp只返回Used和Size,但不返回available。这使得监控软件可以在没有所有相关数据(尤其是 df 的可用列中可用的值)的情况下执行计算:
可用空间实际上以两种不同的方式拉取 - bfree 和 bavail
df.c:
input_units = fsu.fsu_blocksize;
output_units = output_block_size;
total = fsu.fsu_blocks;
available = fsu.fsu_bavail;
negate_available = (fsu.fsu_bavail_top_bit_set
& (available != UINTMAX_MAX));
available_to_root = fsu.fsu_bfree;
[..]
used = total - available_to_root;
df 以著名的 5% 磁盘系统预留空间返回可用磁盘空间,而 snmp 返回可用空间,而不考虑该预留空间。