赞
踩
今天主要介绍一下怎么用zabbix去自动发现linux磁盘并监控磁盘IO,下面一起来看看吧~
磁盘性能的数据来源主要是/proc/diskstats,先了解一下这和目录下数据的含义:
diskstats各字段的含义:
官方解释:https://www.kernel.org/doc/Documentation/iostats.txt
A B C 1 2 3 4 5 6 7 8 9 10 11 8 16 sdb 113686 7710 7704472 65448 225772 188612 184042704 298452 0 51952 363852
说明:
A:主设备号
B:次设备号
C:设备名称
1:读完成次数 ----- 读磁盘的次数,成功完成读的总次数。
2:合并读完成次数,第6个域:合并写完成次数。为了效率可能会合并相邻的读和写。从而两次4K的读在它最终被处理到磁盘上之前可能会变成一次8K的读,才被计数(和排队),因此只有一次I/O操作。这个域使你知道这样的操作有多频繁。
3:读扇区的次数,成功读过的扇区总次数。
4:读花费的毫秒数,这是所有读操作所花费的毫秒数(用__make_request()到end_that_request_last()测量)
5:写完成次数 ----写完成的次数,成功写完成的总次数。
6:合并写完成次数 -----合并写次数
7:写扇区次数 ---- 写扇区的次数,成功写扇区总次数。
8:写操作花费的毫秒数 --- 写花费的毫秒数,这是所有写操作所花费的毫秒数(用__make_request()到end_that_request_last()测量)
9:正在处理的输入/输出请求数 -- -I/O的当前进度,只有这个域应该是0。当请求被交给适当的request_queue_t时增加和请求完成时减小
10:输入/输出操作花费的毫秒数 ----花在I/O操作上的毫秒数,这个域会增长只要field 9不为0。
11:输入/输出操作花费的加权毫秒数 ----- 加权, 花在I/O操作上的毫秒数,在每次I/O开始,I/O结束,I/O合并时这个域都会增加。这可以给I/O完成时间和存储那些可以累积的提供一个便利的测量标准。
1、修改zabbix-agent端的配置文件
# vi /etc/zabbix/zabbix_agentd.conf=============================================================================================UnsafeUserParameters=1# 把这个值改为1,因为自动发现的脚本中有一些特殊字符,被认为是不安全的因素,1表示允许这些字符存在# 如果不改,后期在Server端就会报错,原因就在这里=============================================================================================# vi /etc/zabbix/zabbix_agentd.d/DiskIO.conf=============================================================================================# 第一行是自动发现脚本的路径UserParameter=disk.discovery,/etc/zabbix/zabbix_agentd.d/disk_discovery.sh# 第二行是检测磁盘IO的脚本路径UserParameter=disk.status[*],/etc/zabbix/zabbix_agentd.d/disk_status.sh $1 $2=============================================================================================
2、配置脚本
2.1、磁盘自动发现脚本
vim /etc/zabbix/zabbix_agentd.d/disk_discovery.sh
#!/bin/bashdiskarray=(`cat /proc/diskstats |grep -E "bsd[abcdefg]b|bxvd[abcdefg]b"|grep -i "b$1b"|awk '{print $3}'|sort|uniq 2>/dev/null`)length=${#diskarray[@]}printf "{"printf ''""data":["for ((i=0;i
2.2、检测磁盘状态的脚本
vim /etc/zabbix/zabbix_agentd.d/disk_status.sh
#/bin/shdevice=$1DISK=$2case $DISK in read.ops) /bin/cat /proc/diskstats | grep "b$deviceb" | head -1 | awk '{print $4}' #//磁盘读的次数 ;; read.merged) /bin/cat /proc/diskstats | grep "b$deviceb" | head -1 | awk '{print $5}' #//合并读完成次数 ;; read.sectors) /bin/cat /proc/diskstats | grep "b$deviceb" | head -1 | awk '{print $6}' #//读扇区的次数(一个扇区的等于512B) ;; read.ms) /bin/cat /proc/diskstats | grep "b$deviceb" | head -1 | awk '{print $7}' #//磁盘读的毫秒数 ;; write.ops) /bin/cat /proc/diskstats | grep "b$deviceb" | head -1 | awk '{print $8}' #//磁盘写的次数 ;; write.merged) /bin/cat /proc/diskstats | grep "b$deviceb" | head -1 | awk '{print $9}' #//合并写完成次数 ;; write.sectors) /bin/cat /proc/diskstats | grep "b$deviceb" | head -1 | awk '{print $10}' #//写扇区的次数(一个扇区的等于512B) ;; write.ms) /bin/cat /proc/diskstats | grep "b$deviceb" | head -1 | awk '{print $11}' #//磁盘写的毫秒数 ;; io.active) /bin/cat /proc/diskstats | grep "b$deviceb" | head -1 | awk '{print $12}' #//I/O的当前进度, ;; io.ms) /bin/cat /proc/diskstats | grep "b$deviceb" | head -1 | awk '{print $13}' #//花费在IO操作上的毫秒数 ;;esac
3、授权后重启agent服务:
chown -R zabbix:zabbix /etc/zabbix/systemctl restart zabbix-agent
4、在服务端测试获取数据
# zabbix_get -s 服务器IP -p 10050 -k disk.discovery# zabbix_get -s 服务器IP -p 10050 -k disk.status[sda,read.ops]
1、创建模板
配置--模板--创建模板
2、配置自动发现规则
2.1、创建发现规则
配置-模板-创建发现规则
2.2、创建监控项原型
在自动发现规则里选创建监控原型。
注意,这是在模板的自动发现规则里面的监控项原型定义的监控项 并不是 模板里面的监控项 两者是不同的,当你把监控项原型定义之后,会自动发现里面的规则,然后自动在监控项里面添加
名称: {#DISK_NAME}I/0请求时间键值: disk.status[{#DISK_NAME},io.ms]单位: ms进程: 每秒更改名称: {#DISK_NAME}I/0请求数键值: disk.status[{#DISK_NAME},io.active]单位: ops/second进程: 每秒更改名称: {#DISK_NAME}合并写完成的次数键值: disk.status[{#DISK_NAME},write.merged]单位: ops/second进程: 每秒更改 名称: {#DISK_NAME}合并读完成的次数键值: disk.status[{#DISK_NAME},read.merged]单位: ops/second进程: 每秒更改 名称: {#DISK_NAME}磁盘写扇区的次数键值: disk.status[{#DISK_NAME},write.sectors]单位: B/sec使用自定义倍数: 512进程: 每秒更改 名称: {#DISK_NAME}磁盘写的次数键值: disk.status[{#DISK_NAME},write.ops]单位: ops/second进程: 每秒更改 名称: {#DISK_NAME}磁盘写的毫秒数键值: disk.status[{#DISK_NAME},write.ms]单位: ms进程: 每秒更改 名称: {#DISK_NAME}磁盘读扇区的次数键值: disk.status[{#DISK_NAME},read.sectors]单位: B/sec使用自定义倍数: 512进程: 每秒更改 名称: {#DISK_NAME}磁盘读的次数键值: disk.status[{#DISK_NAME},read.ops]单位: ops/second进程: 每秒更改名称: {#DISK_NAME}磁盘读的毫秒数键值: disk.status[{#DISK_NAME},read.ms]单位: ms进程: 每秒更改
2.3、最终的监控项原型
3、模板关联主机
4、测试
4.1、查看监控项
在配置-主机-监控项,可以看到我们定义的动态的key已经生成,失效的key到期会自动删除
4.2、查看最新数据
在监测-最新数据,也可以看到已经获取到数据
4.3、查看图形
在监测-图形,可以查看磁盘IO图形
觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。