zabbix自带的“Template OS Linux”模板支持监控已挂载的磁盘空间利用率,是利用LLD(Low-level discovery)实现的,却没有对磁盘IO监控。本篇文章就介绍利用zabbix LLD功能监控磁盘IO的方法。
思路:首先创建Discovery rules,在agent端配置对应的UserParameter,调用编写好的shell脚本,动态查找出已经挂载的磁盘分区;然后创建Item prototypes,使用vfs.dev.read[device,,]和vfs.dev.write[device,,]来监控磁盘分区的IO,包括磁盘读写速率、每秒读写扇区数、每秒读写操作数;然后创建Graph prototypes,生成磁盘IO图表。
配置zabbix前台
1)登录zabbix前台,选择Configuration->Templates->Import,导入“Template Linux DiskIO”模板(见附件)。
2)进入主机配置界面,链接“Template Linux DiskIO”模板
模板下载地址:http://www.xiaohuai.com/zabbix/Template Linux DiskIO.rar
3)配置完zabbix前台以后,需要修改zabbix_agentd使其支持获取磁盘IO相关数值,以下为一键脚本,是在安装了zabbix_agentd的前提下,再安装这个,不影响原来的agentd使用,只是修改其中配置。#!/bin/sh
#
# Filename: autoMonitorDiskIO.sh
# Date: 2014/01/05
# Author: 来源网络,做部分修改 xiaohuai
# Website: http://www.xiaohuai.com/
# Description: 部署zabbix low-level discovery 监控磁盘IO
# Notes: 在被监控客户端运行此脚本,前提条件已经安装好zabbix agent
# 注意:结尾部分的启动脚本与客户端zabbix agentd.conf配置文件的路径
ROOT_UID=0
if [ "$UID" -ne "$ROOT_UID" ];then
echo "Error: Please run this script as root user."
exit 1
fi
# 自行修改为你的zabbix agent配置文件路径
AGENT_CONF="/etc/zabbix/zabbix_agentd.conf"
mkdir -p /etc/zabbix/monitor_scripts
# 创建 low-level discovery mounted disk 脚本
cat > /etc/zabbix/monitor_scripts/mount_disk_discovery.sh << 'EOF' #!/bin/bash #Function: low-level discovery mounted disk #Script_name: mount_disk_discovery.sh mount_disk_discovery() { local regexp="\b(btrfs|ext2|ext3|ext4|jfs|reiser|xfs|ffs|ufs|jfs|jfs2|vxfs|hfs|ntfs|fat32|zfs)\b" local tmpfile="/tmp/mounts.tmp" :> "$tmpfile"
egrep "$regexp" /proc/mounts > "$tmpfile"
local num=$(cat "$tmpfile" | wc -l)
printf '{\n'
printf '\t"data":[ '
while read line;do
DEV_NAME=$(echo $line | awk '{print $1}')
FS_NAME=$(echo $line | awk '{print $2}')
SEC_SIZE=$(sudo /sbin/blockdev --getss $DEV_NAME 2>/dev/null)
printf '\n\t\t{'
printf "\"{#DEV_NAME}\":\"${DEV_NAME}\","
printf "\"{#FS_NAME}\":\"${FS_NAME}\","
printf "\"{#SEC_SIZE}\":\"${SEC_SIZE}\"}"
((num--))
[ "$num" == 0 ] && break
printf ","
done < "$tmpfile" printf '\n\t]\n' printf '}\n' } case "$1" in mount_disk_discovery) "$1" ;; *) echo "Bad Parameter." echo "Usage: $0 mount_disk_discovery" exit 1 ;; esac EOF touch /tmp/mounts.tmp chown zabbix:zabbix /tmp/mounts.tmp chown -R zabbix:zabbix /etc/zabbix/monitor_scripts chmod 755 /etc/zabbix/monitor_scripts/mount_disk_discovery.sh # 判断配置文件是否存在 [ -f "${AGENT_CONF}" ] || { echo "ERROR: File ${AGENT_CONF} does not exist.";exit 1;} include=`grep '^Include' ${AGENT_CONF} | cut -d'=' -f2` # 在配置文件中添加自定义参数 if [ -d "$include" ];then cat > $include/disk_lld.conf << 'EOF' UserParameter=mount_disk_discovery,/bin/bash /etc/zabbix/monitor_scripts/mount_disk_discovery.sh mount_disk_discovery EOF else grep -q '^UserParameter=mount_disk_discovery' ${AGENT_CONF} || cat >> ${AGENT_CONF} << 'EOF' UserParameter=mount_disk_discovery,/bin/bash /etc/zabbix/monitor_scripts/mount_disk_discovery.sh mount_disk_discovery EOF fi # 授权zabbix用户无密码运行/sbin/blockdev命令 chmod +w /etc/sudoers sed -i '/^Defaults\s\+requiretty/s/^/#/' /etc/sudoers grep -q '^zabbix ALL=(ALL).*blockdev' /etc/sudoers || echo 'zabbix ALL=(ALL) NOPASSWD: /sbin/blockdev' >> /etc/sudoers
chmod 440 /etc/sudoers
# 重启agent服务
[ -f '/etc/init.d/zabbix-agentd' ] && /etc/init.d/zabbix-agentd restart || echo "需手动重启zabbix agent服务."
来源于启程的Linux博客 http://qicheng0211.blog.51cto.com/3958621/1599776