zabbix之磁盘IO之IOSTAT

1. 发现硬盘 disk_discovery.sh
#!/bin/bash
diskarray=(`cat /proc/diskstats |grep -E "\bsd[a-z]\b|\bxvd[a-z]\b|\bvd[a-z]\b"|awk ‘{print $3}‘|sort|uniq  2>/dev/null`)
length=${#diskarray[@]}
printf "{\n"
printf  ‘\t‘"\"data\":["
for ((i=0;i<$length;i++))
do
        printf ‘\n\t\t{‘
        printf "\"{#DISK_NAME}\":\"${diskarray[$i]}\"}"
        if [ $i -lt $[$length-1] ];then
                printf ‘,‘
        fi
done
printf  "\n\t]\n"

printf "}\n"

Python版本disk_discovery.py
#/usr/bin/python
#This script is used to discovery disk on the server
import subprocess
import json
args="cat /proc/diskstats |grep -E ‘\ssd[a-z]\s|\sxvd[a-z]\s|\svd[a-z]\s‘|awk ‘{print $3}‘|sort|uniq 2>/dev/null"
t=subprocess.Popen(args,shell=True,stdout=subprocess.PIPE).communicate()[0]
disks=[]
for disk in t.split(‘\n‘):
    if len(disk) != 0:
      disks.append({‘{#DISK_NAME}‘:disk})
print json.dumps({‘data‘:disks},indent=4,separators=(‘,‘,‘:‘))

2. 使用iostat收集磁盘I/O信息
#!/bin/sh
device=$1
item=$2
/usr/bin/iostat -dxkt 1 5 > /tmp/iostat_output 2>/dev/null
case $item in
        rrqm)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b"|tail -1|awk ‘{print $2}‘
            ;;
        wrqm)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b"|tail -1|awk ‘{print $3}‘
            ;;
          rps)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b"|tail -1|awk ‘{print $4}‘
            ;;
          wps)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk ‘{print $5}‘
            ;;
        rKBps)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk ‘{print $6}‘
            ;;
        wKBps)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk ‘{print $7}‘
            ;;
    avgrq-sz)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk ‘{print $8}‘
            ;;
    avgqu-sz)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk ‘{print $9}‘
            ;;
        await)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk ‘{print $10}‘
            ;;
        svctm)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk ‘{print $11}‘
            ;;
        util)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk ‘{print $12}‘
            ;;
esac

3. 修改Zabbix agent配置文件,添加disk_status.conf
Timeout=10
### Option: UserParameter
#      User-defined parameter to monitor. There can be several user-defined parameters.
#      Format: UserParameter=<key>,<shell command>
#      See ‘zabbix_agentd‘ directory for examples.
#
# Mandatory: no
# Default:
# UserParameter=
UserParameter=disk.discovery,/usr/bin/python /usr/local/zabbix/bin/disk_discovery.py
UserParameter=disk.status[*],/usr/local/zabbix/bin/disk_status.sh $1 $2

这里需要注意,Zabbix agent默认的Timeout值为3秒,由于这里使用iostat -ydxkt 1 3,每隔1秒刷新一次,刷新3次,所以如果获取磁盘信息Timeout设置时间短了的话会出现ZBX_NOTSUPPORTED这样的错误
然后重新加载zabbix agent

4. 通过在zabbix server或zabbix proxy端使用zabbix_get获取磁盘信息
/usr/local/zabbix/bin/zabbix_get -s 192.168.1.190 -p 10055 -k "disk.discovery"
/usr/local/zabbix/bin/zabbix_get -s 192.168.1.190 -p 10055 -k "disk.status[xvda,wps]"10.00

时间: 2024-08-08 22:36:47

zabbix之磁盘IO之IOSTAT的相关文章

zabbix监控磁盘IO

监控磁盘IO的基本原理:通过分析/proc/diskstats文件,来对IO的性能进行监控. ++++++++++++++++++++++++对/proc/diskstats的解释++++++++++++++++++++++++++++++ # cat /proc/diskstats |grep sda |head -1    8    0     sda 2280 1445 76478 11956 249 188 3490 932 0 9913 12805 解释说明: 第一至第三个域,分别是主

zabbix监控磁盘 IO

磁盘IO:  单位时间内读写数据量  单位时间内读写次数 取值脚本: #!/use/bin/env python #coding:utf-8 # Description:for zabbix discovery disk partition on linux machine import os import re,json cmd = """cat /proc/diskstats |grep -E '\ssd[a-z]\s|\sxvd[a-z]\s|\svd[a-z]\s'|

zabbix监控磁盘IO(二)

1.磁盘发现脚本 vim disk_io.sh  #!/bin/bash  diskarray=(`cat /proc/diskstats |grep -E "\bsd[a-z]\b|\bxvd[a-z]\b|\bvd[a-z]\b"|awk '{print $3}'|sort|uniq   2>/dev/null`)    length=${#diskarray[@]} printf "{\n" printf  '\t'"\"data\&

Zabbix 监控磁盘IO状态

一.监控原理 基本原理:通过分析/proc/diskstats文件,来对IO的性能进行监控.解释如下: +++++++++++++++++++++++++++对/proc/diskstats的解释++++++++++++++++++++++++++ # cat /proc/diskstats | grep sda | head -1 8 0 sda 73840 10263 3178156 91219 1110085 4192562 42423152 1275861 0 447798 136637

ZABBIX之磁盘IO监控

1,配置文件 cat /usr/local/zabbix/conf/zabbix_agentd/diskstats.conf UserParameter=disk.discovery,python /usr/local/zabbix/bin/disk_discovery.py UserParameter=diskstats[*],/usr/local/zabbix/bin/diskstats.sh $1 $2 2,DISK 自动发现脚本 cat /usr/local/zabbix/bin/dis

Linux下java获取CPU、内存、磁盘IO、网络带宽使用率

一.CPU 使用proc文件系统,"proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文件系统的方式为访问系统内核数据的操作提供接口.用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数." 从/proc文件系统获取cpu使用情况:    cat /proc/stat 在Linux的内核中,有一个全 局变量:Jiffies. Jiffies代表时间.它的单位随硬件平台的不同而不同.系统里定义了一个常数HZ,代表每秒种最小时间间隔的数目.这样ji

zabbix自动发现规则之磁盘IO监控

本文章介绍zabbix自动发现规则之磁盘IO监控的案例实践. 主机名:mysql-slave 首先在zabbix_agent下定义一个获取磁盘IO信息的脚本: cat /etc/zabbix/scripts/disk_io.sh #!/bin/bash Disk=$1 Option=$2 case $Option in rrqm) iostat -dxk 1 2|grep "\b$Disk\b" |tail -1|awk '{print $2}' ;; wrqm) iostat -dx

Linux运维 第三阶段(8) 磁盘IO性能监控 iostat

Linux下的iostat命令 #iostat -d -k -t 2 -d:显示系统中的设备 -k:表示以每秒kb的形式显示 -t:打印出时间信息 2:表示每2秒统计一次 每次输出都会打印时间信息, 接下来显示磁盘IO情况列表. Device: 显示磁盘名称tps: 表示每秒钟输出到物理磁盘的传输次数.一次传输就是一个对物理磁盘的 I/O 请求.多个逻辑请求可被并为对磁盘的一个单一 I/O 请求.传输具有中等的大小.kB_read/s: 每秒从磁盘读取的数据量,单位为KB.kB_wrtn/s:

zabbix应用之Low-level discovery监控磁盘IO

zabbix自带的"Template OS Linux"模板支持监控已挂载的磁盘空间利用率,是利用LLD(Low-level discovery)实现的,却没有对磁盘IO监控.本篇文章就介绍利用zabbix LLD功能监控磁盘IO的方法. 思路:首先创建Discovery rules,在agent端配置对应的UserParameter,调用编写好的shell脚本,动态查找出已经挂载的磁盘分区:然后创建Item prototypes,使用vfs.dev.read[device,<t