概述

今天主要介绍一下怎么用zabbix去自动发现linux磁盘并监控磁盘IO,下面一起来看看吧~

一、监控原理

磁盘性能的数据来源主要是/proc/diskstats,先了解一下这和目录下数据的含义:

diskstats各字段的含义:

官方解释:

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完成时间和存储那些可以累积的提供一个便利的测量标准。

二、配置zabbix-agent

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
=============================================================================================

linux中磁盘配额_linux磁盘_linux用户磁盘配额

2、配置脚本

2.1、磁盘自动发现脚本

vim /etc/zabbix/zabbix_agentd.d/disk_discovery.sh

#!/bin/bash
diskarray=(`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 "{n"
printf  't'""data":["
for ((i=0;i<$length;i++))
do
        printf 'ntt{'
        printf ""{#DISK_NAME}":"${diskarray[$i]}"}"
        if [ $i -lt $[$length-1] ];then
                printf ','
        fi
done
printf  "nt]n"
printf "}n"

2.2、检测磁盘状态的脚本

vim /etc/zabbix/zabbix_agentd.d/disk_status.sh

#/bin/sh
device=$1
DISK=$2
case $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]

linux中磁盘配额_linux用户磁盘配额_linux磁盘

三、zabbix-server的web端操作

1、创建模板

配置–模板–创建模板

linux中磁盘配额_linux磁盘_linux用户磁盘配额

linux磁盘_linux用户磁盘配额_linux中磁盘配额

2、配置自动发现规则

2.1、创建发现规则

配置-模板-创建发现规则

linux中磁盘配额_linux用户磁盘配额_linux磁盘

linux中磁盘配额_linux用户磁盘配额_linux磁盘

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
进程: 每秒更改

linux磁盘_linux用户磁盘配额_linux中磁盘配额

linux磁盘_linux中磁盘配额_linux用户磁盘配额

linux用户磁盘配额_linux中磁盘配额_linux磁盘

2.3、最终的监控项原型

linux中磁盘配额_linux磁盘_linux用户磁盘配额

3、模板关联主机

linux磁盘_linux用户磁盘配额_linux中磁盘配额

4、测试

4.1、查看监控项

在配置-主机-监控项,可以看到我们定义的动态的key已经生成,失效的key到期会自动删除

linux用户磁盘配额_linux中磁盘配额_linux磁盘

4.2、查看最新数据

在监测-最新数据,也可以看到已经获取到数据

linux中磁盘配额_linux磁盘_linux用户磁盘配额

4.3、查看图形

在监测-图形,可以查看磁盘IO图形

限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: lzxmw777

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注