我想监控磁盘 I/O 活动,以防出现需要大量 I/O 的情况。这Nagios 插件看起来简单,他给出了以下示例
Example: Tps, read and write thresholds:
./check_diskstat.sh -d sda -w 200,100000,100000 -c 300,200000,200000
Example: Average queue length threshold:
./check_diskstat.sh -d sda -W 50 -C 100
问题
由于不同的主机有不同的空闲 I/O 活动,我如何才能找到合适的起始值?
我想问同样问题的另一种方式是:iostat
在每个主机上应该使用哪些参数来查看其“良好状态”磁盘 I/O 是什么?
答案1
底层计数器记录在https://www.kernel.org/doc/Documentation/block/stat.txt
根据从块设备读取或写入块设备的 IOP 和扇区的绝对数量(小写 -w
和-c
选项)设置有意义的阈值需要事先了解该特定块设备的实际功能(例如通过对它们进行基准测试)。
使用队列长度(大写字母 -W
和-C
选项)似乎更通用一些。当您获得一个糟糕的 IO 队列时,无论底层存储有多快,您都会推送超出其支持能力的读取/写入,并且您的应用程序会变慢。
但我不知道记录的 50 和 100 毫秒是否合理或完全任意的值。
对于我的虚拟服务器来说,使用绝对数字相对容易,它们配置为具体限制 我只需要将警告/严重级别分别设置为指定限值的 80% 或 95%。
例如,具有 600 IOPS 和 10 MB/s 的规格:
将分配的扇区disk_read_bytes_sec
除以disk_write_bytes_sec
512(扇区大小),即可得到虚拟磁盘支持的扇区限制。19531 (10 MB = 10000000 bytes) / 512 = 19531
* 80% = 15624 和 600 * 80% = 480
19531 * 95% = 18749 和 600 * 95% = 570
./check_diskstat.sh -d vda -w 480,15624,15624 -c 570,18749,18749