共计 12682 个字符,预计需要花费 32 分钟才能阅读完成。
# 软件介绍 iostat
# 使用 iostat 需先安装 sysstat 软件包, 系统包中有带
# 系统:CentOS,rh 6- 7 都可以
zabbix 版本:3.0 3.2 可以 其它版本没有试过
# iostat 用于输出 CPU 和磁盘 I / O 相关统计信息
# iostat 可以显示 CPU 和 I / O 系统的负载情况及分区状态信息.
直接执行 iostat 可以显示下面内容:
[wmt@template ~]$ iostat
Linux 2.6.32-358.el6.x86_64 (template.xx.xx) 07/14/2017 _x86_64_(32 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
2.93 0.00 0.20 0.04 0.00 96.83
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.66 6.60 14.79 462593198 1036802588
sdc 0.20 1.60 0.00 112173840 0
sdb 25.46 453.65 582.45 31805540026 40835922808
scd0 0.00 0.00 0.00 5012 0
dm-0 25.21 453.64 582.45 31805251514 40835922808
dm-1 1.89 6.35 14.55 445409130 1020026016
dm-2 0.06 0.24 0.24 17154880 16776296
# cpu 段配置说明
avg-cpu
%user:用户空间使用 CPU 百分比
%nice:nice 使用
%system:系统(kernel) 使用 cpu 百分比
%iowait:cpu 等待硬盘 I / O 时,所占用的百分比
%steal:系统偷出 CPU 的百分比 (不知道什么鬼, 求解释)
%idle:系统空闲百分比
# Device 磁盘段配置说明
tps: 每秒钟发送到 I / O 请求数
Blk_read/s: 每秒从磁盘读出的的数据量,单位 B
Blk_wrtn/s: 每秒从磁盘写入的的数据量,单位 B
Blk_read: 开机始从磁盘读出的数据总量
Blk_wrtn: 开机始从磁盘写入的数据总量
# 命令使用
iostat 1 # 每秒刷新一次
iostat -k # 以 KB 为单位 默认 B
iostat -m # 以 MB 为单位
iostat -v # 显示版本号
iostat -c # 仅显示 CPU
iostat -d # 仅显示磁盘
################## dm 设备监控大概思路 ##################################
# 查看 dm 对应设备号是哪一个
[root@template ~]# dmsetup ls
mpathb(253:0)
vg_sys-LogVol01(253:1)
vg_sys-LogVol00(253:2)
# 找到设备号对应信息
[root@template ~]# ll /dev/mapper/
total 0
crw-rw—-. 1 root root 10, 58 Apr 25 2015 control
lrwxrwxrwx. 1 root root 7 Apr 25 2015 mpathb -> ../dm-0
lrwxrwxrwx. 1 root root 7 Apr 25 2015 vg_sys-LogVol00 -> ../dm-2
lrwxrwxrwx. 1 root root 7 Apr 25 2015 vg_sys-LogVol01 -> ../dm-1
# 再检查设备挂载目录,比如 swap 就可不用监控,一般也不会往里写入数据
[root@template ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sat Apr 25 01:09:22 2015
#
/dev/mapper/vg_sys-LogVol01 / ext4 defaults 1 1
/dev/mapper/vg_sys-LogVol00 swap swap defaults 0 0
/dev/mapper/mpathb/homeext4defaults1 0
##################### zabbix 配置 #####################
############### 在需要监控的机器中增加这个脚本 #########################
# 计划脚本文件
1 <BR>
################ 配置配合 计划任务每 20 秒更新一次 ###################
#!/bin/bash
#
# Name:iostat 只升不降,取出 iostst 最新 io 写入写出
# Version Number:1.01
# Type: 服务启动脚本
# Language:bash shell
# Date:2017-07-17
# Author:xiong
# 每隔多少秒刷新一次 iostat, 默认的那个值只降不升
iostat -xdtk 5 3 > /tmp/iostst_temp.txt
# 取出现在时间
times=`date “+%Y” 年 0 ″%h%d” 日 ” %H” 时 ”%M” 分 ”%S” 秒 ””`
# 取出最后一次 iostat 更新的数据, 为最新数据, 将最新的数据更新至 /tmp/2.txt 不输出
grep “$times” -A 100 /tmp/iostst_temp.txt > /tmp/iostst_temp2.txt
# 时间格式:07/17/2017 03:03:06 PM
# times=`date “+%D %r”`
#
# 时间格式:2017 年 07 月 17 日 15 时 01 分 03 秒
# times=`date “+%Y” 年 0 ″%h%d” 日 ” %H” 时 ”%M” 分 ”%S” 秒 ””`
# 计划任务:每一分钟执行一次
*/1 * * * * /bin/bash /usr/local/zabbix/script/iostate.sh
# 内容导出如下
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
# 配置介绍
rrqm/s: 每秒进行 merge 的读操作数目。即 rmerge/s
wrqm/s: 每秒进行 merge 的写操作数目。即 wmerge/s
r/s: 每秒完成的读 I/O 设备次数。即 rio/s
w/s: 每秒完成的写 I/O 设备次数。即 wio/s
rsec/s: 每秒读扇区数。即 rsect/s
wsec/s: 每秒写扇区数。即 wsect/s
rkB/s: 每秒读 K 字节数。是 rsect/s 的一半,因为每扇区大小为 512 字节。
wkB/s: 每秒写 K 字节数。是 wsect/s 的一半。
avgrq-sz: 平均每次设备 I / O 操作的数据大小 (扇区)。
avgqu-sz: 平均 I / O 队列长度。
await: 平均每次设备 I / O 操作的等待时间 (毫秒)。
svctm: 平均每次设备 I / O 操作的服务时间 (毫秒)。
%util: 一秒中有百分之多少的时间用于 I/O 操作,即被 io 消耗的 cpu 百分比
# 在 zabbix_agent 中增加一个脚本
############################# zabbix 脚本 ###########################
#!/bin/bash
#
disk=$1
case $2 in
rrqm)
grep “$disk” /tmp/iostst_temp2.txt | awk ‘{print $2}’ ;;
wrqm)
grep “$disk” /tmp/iostst_temp2.txt | awk ‘{print $3}’ ;;
read)
grep “$disk” /tmp/iostst_temp2.txt | awk ‘{print $4}’ ;;
wirte)
grep “$disk” /tmp/iostst_temp2.txt | awk ‘{print $5}’ ;;
readin)
grep “$disk” /tmp/iostst_temp2.txt | awk ‘{print $6}’ ;;
wirtein)
grep “$disk” /tmp/iostst_temp2.txt | awk ‘{print $7}’ ;;
avgrqsz)
grep “$disk” /tmp/iostst_temp2.txt | awk ‘{print $8}’ ;;
avgqusz)
grep “$disk” /tmp/iostst_temp2.txt | awk ‘{print $9}’ ;;
await)
grep “$disk” /tmp/iostst_temp2.txt | awk ‘{print $10}’ ;;
rawait)
grep “$disk” /tmp/iostst_temp2.txt | awk ‘{print $11}’ ;;
wawait)
grep “$disk” /tmp/iostst_temp2.txt | awk ‘{print $12}’ ;;
svctm)
grep “$disk” /tmp/iostst_temp2.txt | awk ‘{print $13}’ ;;
util)
grep “$disk” /tmp/iostst_temp2.txt | awk ‘{print $14}’ ;;
*)
echo “ 使用方法 /bash disk_name $2”
exit 5 ;;
esac
# 最后需要配置文件中在 zabbix_agentd.conf 中增加这行
UserParameter=sys.io[*],/usr/local/zabbix/script/system_io.sh $1 $2
# 在服务器端测试是脚本是否可以
[root@zabbixd bin]# zabbix_get -s ipaddress -p port -k sys.io[sdb,wawait]
0.0
[root@zabbixd bin]# zabbix_get -s ipaddress -p port -k sys.io[sdb,wrtn]
0.0
# 可能会报权限错误,需要增加权限 chmod +x /bin/bash /usr/local/zabbix/script/iostate.sh
# 以及在增加属主属组权限 chown zabbix.zabbix !$
# 模板如下,自动发现需要定义 API,不太熟,练习中,有多个磁盘需要监控的话,直接将模板导出,然后将模板名称更换一下需要的,然后在导入就行了,模板如下:
# 模板请直接下载附件
# 最后在加上一个效果图
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-08/146447p2.htm
上篇写了一个 zabbix_系统 IO 监控,但每次都需要手动加,比较费劲,监控项跟图形都只能一个一个加
这次使用 zabbix_自动发现的模式来搞一次,
大概思路,
1、在 zabbix 客户端先配置 iostat 最新数据,
1.1、不能直接使用 iostat,因为它的数据一直会固定不动,使用 iostst -xdkt 5 3 (5 秒 3 次)
1.2、定义好脚本之后需要使用 crontab 配置每 1 分钟或者 30 秒更新一次数据,直接输送到文件就成
2、写一个自动发现的脚本,发现 iostat 有几个磁盘,格式必须为 JSON,key 值必须大写
2.1、小写会出现 这个 Cannot create item: item with the same key“custom.vfs.dev.read.ops [[xxxxxx]] already exists
2.2、避免出现坑,配置完成之后在 zabbix 服务端上运行,出现下图的结果说明脚本运行正常
2.3、在测试之前,必须在 zabbix 客户端的配置文件中加一行,io.dis 为自己定义的键
UserParameter=io.dis.status[*],/usr/local/zabbix/scripts/discovery_iostat_disk.sh
3、最后在弄一个脚本,配置你想要监控的项就成
rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
各项值的详解
rrqm/s: 每秒进行 merge 的读操作数目。即 rmerge/s
wrqm/s: 每秒进行 merge 的写操作数目。即 wmerge/s
r/s: 每秒完成的读 I/O 设备次数。即 rio/s
w/s: 每秒完成的写 I/O 设备次数。即 wio/s
rsec/s: 每秒读扇区数。即 rsect/s
wsec/s: 每秒写扇区数。即 wsect/s
rkB/s: 每秒读 K 字节数。是 rsect/s 的一半,因为每扇区大小为 512 字节。
wkB/s: 每秒写 K 字节数。是 wsect/s 的一半。
avgrq-sz: 平均每次设备 I / O 操作的数据大小 (扇区)。
avgqu-sz: 平均 I / O 队列长度。
await: 平均每次设备 I / O 操作的等待时间 (毫秒)。
svctm: 平均每次设备 I / O 操作的服务时间 (毫秒)。
%util: 一秒中有百分之多少的时间用于 I/O 操作,即被 io 消耗的 cpu 百分比
4、附上脚本一共四个 所有脚本都需要 7 的权限 rwx 使用 zabbix 用户
#!/bin/bash
#
# Name:service 取出 io 数据用于分析
# Version Number:1.01
# Type: 取出 I / O 数据
# Language:bash shell
# Date:2017-08-07
# Author:xiong
iostat -xdkt 5 3 > /tmp/io.txt
times=`date +%H”:”%M”:”%S`
# 取出最后一次 iostat 更新的数据, 为最新数据, 将最新的数据更新至 /tmp/2.txt 不输出
grep “$times” -A 100 /tmp/io.txt > /tmp/io2.txt
#!/bin/bash
#
# Name:service 自动发现 io_磁盘
# Version Number:1.01
# Type: 自动发现 io_磁盘
# Language:bash shell
# Date:2017-08-07
# Author:xiong
disk=(`awk ‘{print $1}’ /tmp/io2.txt | sed -e “1,2d”`)
length=${#disk[@]}
printf “{\n”
printf “\t\”data:\”[\n”
for ((i=0;i<$length;i++)); do
printf ‘\t\t{‘
printf “\”{#disk_name}\”:\”${disk[$i]}\”}”
if [$i -lt $[$length – 1] ];then
printf “,\n”
fi
done
printf “\n\t]\n”
printf “}\n”
############### 配置脚本
#!/bin/bash
#
# Name:service 自动发现 io_磁盘
# Version Number:1.01
# Type: 自动发现 io_磁盘
# Language:bash shell
# Date:2017-08-07
# Author:xiong
disk=$1
case $2 in
rrqm)
grep “$disk” /tmp/io2.txt | awk ‘{print $2}’ ;;
wrqm)
grep “$disk” /tmp/io2.txt | awk ‘{print $3}’ ;;
rs)
grep “$disk” /tmp/io2.txt | awk ‘{print $4}’ ;;
ws)
grep “$disk” /tmp/io2.txt | awk ‘{print $5}’ ;;
rkB)
grep “$disk” /tmp/io2.txt | awk ‘{print $6}’ ;;
wkB)
grep “$disk” /tmp/io2.txt | awk ‘{print $7}’ ;;
avgrqsz)
grep “$disk” /tmp/io2.txt | awk ‘{print $8}’ ;;
avgqusz)
grep “$disk” /tmp/io2.txt | awk ‘{print $9}’ ;;
await)
grep “$disk” /tmp/io2.txt | awk ‘{print $10}’ ;;
rawait)
grep “$disk” /tmp/io2.txt | awk ‘{print $11}’ ;;
wawait)
grep “$disk” /tmp/io2.txt | awk ‘{print $12}’ ;;
svctm)
grep “$disk” /tmp/io2.txt | awk ‘{print $13}’ ;;
util)
grep “$disk” /tmp/io2.txt | awk ‘{print $14}’ ;;
esac*)
echo “ 使用方法 /bash disk_name disk_type”
exit 5 ;;
esac
# 附上一个临时配置脚本文件,懒得写的 可以先运行一下这个脚本,然后再修改一下就成
#!/bin/bash
#
a=(`cat io2.txt |sed ‘1d’ | grep ‘^Device’`)
length=${#a[@]}
printf “#!/bin/bash\n”
printf “#\n”
printf “case \$1 in\n”
for ((i<0;i<length;i++));do
printf “${a[$i]})\n”
printf “\tgrep \”\$disk\” /tmp/io2.txt | awk \'{print $i}\’ ;;\n”
done
printf “esac\n”
5、配置计划任务,让 iostat.sh 脚本能够 1 分钟或者 30 秒执行一次,取最新的数据
crontab -e 中添加一行
0 */1 * * * /bin/bash /usr/local/zabbix/scripts/iostat.sh
6、zabbix 客户端配置
vim ../etc/zabbix_agentd.conf # 此处为自己配置的 zabbix 目录 使用绝对路径最为妥当
UserParameter=io.dis.status[*],/usr/local/zabbix/scripts/discovery_iostat_disk.sh
UserParameter=io.status[*],/usr/local/zabbix/scripts/zabbix_iostat_disk.sh $1 $2
7、效果图,所有的键值类型都是字符型
8、最后附上模板
太长不方便看,请附件中下载
可以到 Linux 公社资源站下载:
—————————————— 分割线 ——————————————
免费下载地址在 http://linux.linuxidc.com/
用户名与密码都是www.linuxidc.com
具体下载目录在 /2017 年资料 / 8 月 /23 日 /Zabbix 监控磁盘 IO 状态详解 /
下载方法见 http://www.linuxidc.com/Linux/2013-07/87684.htm
—————————————— 分割线 ——————————————
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-08/146447.htm
# 软件介绍 iostat
# 使用 iostat 需先安装 sysstat 软件包, 系统包中有带
# 系统:CentOS,rh 6- 7 都可以
zabbix 版本:3.0 3.2 可以 其它版本没有试过
# iostat 用于输出 CPU 和磁盘 I / O 相关统计信息
# iostat 可以显示 CPU 和 I / O 系统的负载情况及分区状态信息.
直接执行 iostat 可以显示下面内容:
[wmt@template ~]$ iostat
Linux 2.6.32-358.el6.x86_64 (template.xx.xx) 07/14/2017 _x86_64_(32 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
2.93 0.00 0.20 0.04 0.00 96.83
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.66 6.60 14.79 462593198 1036802588
sdc 0.20 1.60 0.00 112173840 0
sdb 25.46 453.65 582.45 31805540026 40835922808
scd0 0.00 0.00 0.00 5012 0
dm-0 25.21 453.64 582.45 31805251514 40835922808
dm-1 1.89 6.35 14.55 445409130 1020026016
dm-2 0.06 0.24 0.24 17154880 16776296
# cpu 段配置说明
avg-cpu
%user:用户空间使用 CPU 百分比
%nice:nice 使用
%system:系统(kernel) 使用 cpu 百分比
%iowait:cpu 等待硬盘 I / O 时,所占用的百分比
%steal:系统偷出 CPU 的百分比 (不知道什么鬼, 求解释)
%idle:系统空闲百分比
# Device 磁盘段配置说明
tps: 每秒钟发送到 I / O 请求数
Blk_read/s: 每秒从磁盘读出的的数据量,单位 B
Blk_wrtn/s: 每秒从磁盘写入的的数据量,单位 B
Blk_read: 开机始从磁盘读出的数据总量
Blk_wrtn: 开机始从磁盘写入的数据总量
# 命令使用
iostat 1 # 每秒刷新一次
iostat -k # 以 KB 为单位 默认 B
iostat -m # 以 MB 为单位
iostat -v # 显示版本号
iostat -c # 仅显示 CPU
iostat -d # 仅显示磁盘
################## dm 设备监控大概思路 ##################################
# 查看 dm 对应设备号是哪一个
[root@template ~]# dmsetup ls
mpathb(253:0)
vg_sys-LogVol01(253:1)
vg_sys-LogVol00(253:2)
# 找到设备号对应信息
[root@template ~]# ll /dev/mapper/
total 0
crw-rw—-. 1 root root 10, 58 Apr 25 2015 control
lrwxrwxrwx. 1 root root 7 Apr 25 2015 mpathb -> ../dm-0
lrwxrwxrwx. 1 root root 7 Apr 25 2015 vg_sys-LogVol00 -> ../dm-2
lrwxrwxrwx. 1 root root 7 Apr 25 2015 vg_sys-LogVol01 -> ../dm-1
# 再检查设备挂载目录,比如 swap 就可不用监控,一般也不会往里写入数据
[root@template ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sat Apr 25 01:09:22 2015
#
/dev/mapper/vg_sys-LogVol01 / ext4 defaults 1 1
/dev/mapper/vg_sys-LogVol00 swap swap defaults 0 0
/dev/mapper/mpathb/homeext4defaults1 0
##################### zabbix 配置 #####################
############### 在需要监控的机器中增加这个脚本 #########################
# 计划脚本文件
1 <BR>
################ 配置配合 计划任务每 20 秒更新一次 ###################
#!/bin/bash
#
# Name:iostat 只升不降,取出 iostst 最新 io 写入写出
# Version Number:1.01
# Type: 服务启动脚本
# Language:bash shell
# Date:2017-07-17
# Author:xiong
# 每隔多少秒刷新一次 iostat, 默认的那个值只降不升
iostat -xdtk 5 3 > /tmp/iostst_temp.txt
# 取出现在时间
times=`date “+%Y” 年 0 ″%h%d” 日 ” %H” 时 ”%M” 分 ”%S” 秒 ””`
# 取出最后一次 iostat 更新的数据, 为最新数据, 将最新的数据更新至 /tmp/2.txt 不输出
grep “$times” -A 100 /tmp/iostst_temp.txt > /tmp/iostst_temp2.txt
# 时间格式:07/17/2017 03:03:06 PM
# times=`date “+%D %r”`
#
# 时间格式:2017 年 07 月 17 日 15 时 01 分 03 秒
# times=`date “+%Y” 年 0 ″%h%d” 日 ” %H” 时 ”%M” 分 ”%S” 秒 ””`
# 计划任务:每一分钟执行一次
*/1 * * * * /bin/bash /usr/local/zabbix/script/iostate.sh
# 内容导出如下
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
# 配置介绍
rrqm/s: 每秒进行 merge 的读操作数目。即 rmerge/s
wrqm/s: 每秒进行 merge 的写操作数目。即 wmerge/s
r/s: 每秒完成的读 I/O 设备次数。即 rio/s
w/s: 每秒完成的写 I/O 设备次数。即 wio/s
rsec/s: 每秒读扇区数。即 rsect/s
wsec/s: 每秒写扇区数。即 wsect/s
rkB/s: 每秒读 K 字节数。是 rsect/s 的一半,因为每扇区大小为 512 字节。
wkB/s: 每秒写 K 字节数。是 wsect/s 的一半。
avgrq-sz: 平均每次设备 I / O 操作的数据大小 (扇区)。
avgqu-sz: 平均 I / O 队列长度。
await: 平均每次设备 I / O 操作的等待时间 (毫秒)。
svctm: 平均每次设备 I / O 操作的服务时间 (毫秒)。
%util: 一秒中有百分之多少的时间用于 I/O 操作,即被 io 消耗的 cpu 百分比
# 在 zabbix_agent 中增加一个脚本
############################# zabbix 脚本 ###########################
#!/bin/bash
#
disk=$1
case $2 in
rrqm)
grep “$disk” /tmp/iostst_temp2.txt | awk ‘{print $2}’ ;;
wrqm)
grep “$disk” /tmp/iostst_temp2.txt | awk ‘{print $3}’ ;;
read)
grep “$disk” /tmp/iostst_temp2.txt | awk ‘{print $4}’ ;;
wirte)
grep “$disk” /tmp/iostst_temp2.txt | awk ‘{print $5}’ ;;
readin)
grep “$disk” /tmp/iostst_temp2.txt | awk ‘{print $6}’ ;;
wirtein)
grep “$disk” /tmp/iostst_temp2.txt | awk ‘{print $7}’ ;;
avgrqsz)
grep “$disk” /tmp/iostst_temp2.txt | awk ‘{print $8}’ ;;
avgqusz)
grep “$disk” /tmp/iostst_temp2.txt | awk ‘{print $9}’ ;;
await)
grep “$disk” /tmp/iostst_temp2.txt | awk ‘{print $10}’ ;;
rawait)
grep “$disk” /tmp/iostst_temp2.txt | awk ‘{print $11}’ ;;
wawait)
grep “$disk” /tmp/iostst_temp2.txt | awk ‘{print $12}’ ;;
svctm)
grep “$disk” /tmp/iostst_temp2.txt | awk ‘{print $13}’ ;;
util)
grep “$disk” /tmp/iostst_temp2.txt | awk ‘{print $14}’ ;;
*)
echo “ 使用方法 /bash disk_name $2”
exit 5 ;;
esac
# 最后需要配置文件中在 zabbix_agentd.conf 中增加这行
UserParameter=sys.io[*],/usr/local/zabbix/script/system_io.sh $1 $2
# 在服务器端测试是脚本是否可以
[root@zabbixd bin]# zabbix_get -s ipaddress -p port -k sys.io[sdb,wawait]
0.0
[root@zabbixd bin]# zabbix_get -s ipaddress -p port -k sys.io[sdb,wrtn]
0.0
# 可能会报权限错误,需要增加权限 chmod +x /bin/bash /usr/local/zabbix/script/iostate.sh
# 以及在增加属主属组权限 chown zabbix.zabbix !$
# 模板如下,自动发现需要定义 API,不太熟,练习中,有多个磁盘需要监控的话,直接将模板导出,然后将模板名称更换一下需要的,然后在导入就行了,模板如下:
# 模板请直接下载附件
# 最后在加上一个效果图
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-08/146447p2.htm