赞
踩
思路:首先创建Discovery rules,在agent端配置对应的UserParameter,调用编写好的shell脚本,动态查找出已经挂载的磁盘分区;然后创建Item prototypes,使用vfs.dev.read[device,,]和vfs.dev.write[device,,]来监控磁盘分区的IO,包括磁盘读写速率、每秒读写扇区数、每秒读写操作数;然后创建Graph prototypes,生成磁盘IO图表。
具体监控步骤如下:
一、编写脚本查找已挂载的磁盘分区
1)在zabbix客户端创建查找磁盘分区的脚本mount_disk_discovery.sh放到/etc/zabbix/monitor_scripts目录下,内容如下:
vim mount_disk_discovery.sh
#!/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 '{'
printf '"data":[ '
while read line;do
# 磁盘分区名称
DEV_NAME=$(echo $line | awk '{print $1}')
# 文件系统名称,即磁盘分区的挂载点
FS_NAME=$(echo $line | awk '{print $2}')
# blockdev命令获取扇区大小,用于计算磁盘读写速率
SEC_SIZE=$(sudo /sbin/blockdev --getss $DEV_NAME 2>/dev/null)
printf '{'
printf ""{#DEV_NAME}":"${DEV_NAME}","
printf ""{#FS_NAME}":"${FS_NAME}","
printf ""{#SEC_SIZE}":"${SEC_SIZE}"}"
((num--))
[ "$num" == 0 ] && break
printf ","
done < "$tmpfile"
printf ']'
printf '}'
}
case "$1" in
mount_disk_discovery)
"$1"
;;
*)
echo "Bad Parameter."
echo "Usage: $0 mount_disk_discovery"
exit 1
;;
esac
脚本首先过滤/proc/mounts中的磁盘类型,然后输出包含磁盘名称、文件系统名称和扇区大小的Json数据。
2)设置相关文件权限
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
3)测试一下
[root@localhost ~]# /etc/zabbix/monitor_scripts/mount_disk_discovery.sh mount_disk_discovery
{
"data":[
{"{#DEV_NAME}":"/dev/sda3","{#FS_NAME}":"/","{#SEC_SIZE}":"512"},
{"{#DEV_NAME}":"/dev/sda1","{#FS_NAME}":"/boot","{#SEC_SIZE}":"512"}
]
}
上面的数据表示,磁盘分区/dev/sda3挂载到了根目录,扇区大小为512B;/dev/sda1挂载到了/boot目录,扇区大小为512B。
二、zabbix客户端配置
1)编辑zabbix agent配置文件,设置Include目录
Include=/etc/zabbix/zabbix_agentd.d/*.conf
agent启动时会自动加载Include目录下的配置文件
2)在/etc/zabbix/zabbix_agentd.d/目录下建立disk_lld.conf,内容如下:
UserParameter=mount_disk_discovery,/bin/bash /etc/zabbix/monitor_scripts/mount_disk_discovery.sh mount_disk_discovery
表示:建立用户自定义参数mount_disk_discovery,当zabbix server向agent请求这个item key时,agent会调用/etc/zabbix/monitor_scripts/mount_disk_discovery.sh脚本,返回json数据。
3)由于zabbix agent的启动用户是zabbix,所以要授权zabbix用户无密码运行/sbin/blockdev命令,使用visudo命令,在/etc/sudoers里注释掉Defaults requiretty:
#Defaults requiretty
并在最后面加上:
zabbix ALL=(ALL) NOPASSWD: /sbin/blockdev
这样在脚本里执行类似“sudo /sbin/blockdev --getss /dev/sda1”这样的指令就没问题了
4)最后重启zabbix agent
/etc/init.d/zabbix-agent restart
5)测试一下:
我们从zabbix server上远程get一下mount_disk_discovery
三、配置zabbix前台
1)登录zabbix前台,选择Configuration->Templates->Import,导入“Template Linux DiskIO”模板(见附件)。
2)进入主机配置界面,链接“Template Linux DiskIO”模板
至此,全部配置结束了,耐心等待监控数据的出现,最多等待五分钟左右。
备注:diskio导入模板: diskio.xml (模板文件过大,就不上传了,需要的留言,私发)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。