当前位置:   article > 正文

zabbix 测试shell_zabbix监控系列之监控项(5、磁盘IO)

zabbix 磁盘io是哪一项

思路:首先创建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”模板

137c70d4201be038634ff648e8cff5c4.png

至此,全部配置结束了,耐心等待监控数据的出现,最多等待五分钟左右。

f42bfa1f84271c98e1e928c66793af2d.png

备注:diskio导入模板: diskio.xml (模板文件过大,就不上传了,需要的留言,私发)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/160934
推荐阅读
相关标签
  

闽ICP备14008679号