分布式监控系统Zabbix是一款强大的网络监控工具,特别适用于管理和监控IT基础设施的运行状态。在Zabbix 3.2版本中,虽然预置的"Template OS Linux"模板能够自动发现并监控服务器磁盘的空间利用率,但它并不包含磁盘输入/输出(I/O)的监控功能。为了实现对磁盘I/O的全面监控,我们需要手动创建模板并配置自动发现规则。
我们需要创建一个自定义的监控项,即"disk.discovery",这个监控项将通过在`zabbix_agent.conf`配置文件中添加`UserParameter`来实现。`UserParameter`允许我们定义自定义的命令来收集数据,例如,这里我们将使用一个名为`disk_discovery.sh`的shell脚本,该脚本会读取`/proc/diskstats`文件,过滤出指定类型的磁盘(如sda、sdb等),并返回一个JSON列表,包含所有找到的磁盘名称。
接下来,我们要设置自动发现规则。在Zabbix模板中,定义一个自动发现规则,使用上述shell脚本作为数据源。这样,每当Zabbix代理运行时,它就会执行这个脚本,获取磁盘列表,并自动添加新的磁盘到监控列表中,实现动态扩展监控范围。
一旦自动发现配置完成,我们需要添加一系列监控项来跟踪磁盘I/O的关键指标。这些监控项包括磁盘读写操作次数、读写操作的毫秒数以及读写扇区的次数。例如,我们可以通过以下键值对来监控:
- `disk.status[{#DISK_NAME},read.ops]`:磁盘读操作次数,单位ops/second,存储值为差量(每秒速率)
- `disk.status[{#DISK_NAME},write.ops]`:磁盘写操作次数,单位ops/second,存储值为差量(每秒速率)
- `disk.status[{#DISK_NAME},read.ms]`:磁盘读操作的毫秒数,单位ms,存储值为差量(每秒速率)
- `disk.status[{#DISK_NAME},write.ms]`:磁盘写操作的毫秒数,单位ms,存储值为差量(每秒速率)
- `disk.status[{#DISK_NAME},read.sectors]`:磁盘读扇区次数,单位B/sec,乘以512转换为字节,存储值为差量(每秒速率)
- `disk.status[{#DISK_NAME},write.sectors]`:磁盘写扇区次数,单位B/sec,乘以512转换为字节,存储值为差量(每秒速率)
这些监控项的值将由另一个shell脚本`disk_status.sh`生成。该脚本接收磁盘名称和指标类型作为参数,根据传入的类型(如read.ops、read.ms等)从`/proc/diskstats`文件中提取相应的值。
通过这样的配置,Zabbix不仅可以实时监测磁盘空间使用情况,还能全面监控磁盘I/O性能,帮助运维人员及时发现潜在的性能瓶颈和故障,提升系统的稳定性和可靠性。这种自动化监控策略对于大规模的分布式系统尤其重要,因为它可以大大减少手动配置的工作量,确保监控覆盖所有关键硬件资源。