linux磁盘性能监视,zabbix如何监控linux磁盘性能

前提环境:

perl和python,以及zabbix-agent已是可用状态

需要主要监控的指标:

1:每秒IO数,即iops或tps

2:吞吐率

3:平均IO尺寸,avgrq-sz

4:IO等待队列长度,avgqu-sz

5:磁盘活动时间百分比,util

第一:安装iostat工具

yum install sysstat -y #centos7安装iostat工具,centos6之前自带

第二:在agent端创建用于存放执行脚本的目录,并修改权限

mkdir /usr/lib/zabbix/alertscripts/ -p

chown zabbix:zabbix /usr/lib/zabbix/ -R

第三:在/usr/lib/zabbix/alertscripts/目录下创建磁盘发现脚本

cd /usr/lib/zabbix/alertscripts/

vim discover_disk.pl

#!/usr/bin/perl

# give disk dmname, returns Proxmox VM name

sub get_vmname_by_id

{

$vmname=`cat /etc/qemu-server/$_[0].conf | grep name | cut -d \: -f 2`;

$vmname =~ s/^\s+//; #remove leading spaces

$vmname =~ s/\s+$//; #remove trailing spaces

return $vmname

}

$first = 1;

print "{\n";

print "\t\"data\":[\n\n";

for (`cat /proc/diskstats`)

{

($major,$minor,$disk) = m/^\s*([0-9]+)\s+([0-9]+)\s+(\S+)\s.*$/;

$dmnamefile = "/sys/dev/block/$major:$minor/dm/name";

$vmid= "";

$vmname = "";

$dmname = $disk;

$diskdev = "/dev/$disk";

# DM name

if (-e $dmnamefile) {

$dmname = `cat $dmnamefile`;

$dmname =~ s/\n$//; #remove trailing \n

$diskdev = "/dev/mapper/$dmname";

# VM name and ID

if ($dmname =~ m/^.*--([0-9]+)--.*$/) {

$vmid = $1;

#$vmname = get_vmname_by_id($vmid);

}

}

#print("$major $minor $disk $diskdev $dmname $vmid $vmname \n");

print "\t,\n" if not $first;

$first = 0;

print "\t{\n";

print "\t\t\"{#DISK}\":\"$disk\",\n";

print "\t\t\"{#DMNAME}\":\"$dmname\",\n";

print "\t\t\"{#VMNAME}\":\"$vmname\",\n";

print "\t\t\"{#VMID}\":\"$vmid\"\n";

print "\t}\n";

}

print "\n\t]\n";

print "}\n";

第四:在/usr/lib/zabbix/alertscripts/目录下创建定义key需要的文件,用于获取io监控值

vim zbx_parse_iostat_values.sh

#!/bin/bash

dev=$1

type=$2

#enable debug mode

debug=0

if [[ -z "$dev" ]]; then

echo "error: wrong input value (device)"

exit 1

fi

if [[ -z "$type" ]]; then

echo "error: wrong input value (type)"

exit 1

fi

columns=`iostat -xN |egrep -o "^Device.*"`

columnsarray=($columns)

column_id=1

for i in "${columnsarray[@]}"

do

#echo "column: $i"

if [[ "$i" = "$type" ]]; then

if [[ $debug -eq 1 ]]; then

echo "right column (${i}) found...column_id: $column_id "

fi

id="$"

column_id_id=$id$column_id

iostats=`iostat -xN |egrep -o "^${dev}[[:space:]]+.*" |awk "{print ${column_id_id}}"`

fi

column_id=$[column_id + 1]

done

if [ -z "$iostats" ]; then

echo "error: \"device\" or \"type\" not found (${dev},${type})"

exit 3

fi

iostats_lines=`wc -l <<< "$iostats"`

if [ $iostats_lines -ne 1 ]; then

echo "error: wrong output value (${iostats_lines})"

exit 2

fi

echo $iostats

if [[ $debug -eq 1 ]]; then

echo "- - - - - - - - - -"

echo $columns

iostats_debug=`iostat -xN |egrep -o "^${dev}[[:space:]]+.*"`

echo $iostats_debug

echo "- - - - - - - - - -"

fi

exit 0

第五:为刚才创建的两个文件赋予执行权限

chmod +x /usr/lib/zabbix/alertscripts/*

第六:在zabbix-agent的配置文件上添加如下内容

vim /etc/zabbix/zabbix_agentd.conf

# diskio discovery

UserParameter=discovery.disks.iostats,/usr/lib/zabbix/alertscripts/discover_disk.pl

UserParameter=custom.vfs.dev.iostats.rrqm[*],/usr/lib/zabbix/alertscripts/zbx_parse_iostat_values.sh $1 "rrqm/s"

UserParameter=custom.vfs.dev.iostats.wrqm[*],/usr/lib/zabbix/alertscripts/zbx_parse_iostat_values.sh $1 "wrqm/s"

UserParameter=custom.vfs.dev.iostats.rps[*],/usr/lib/zabbix/alertscripts/zbx_parse_iostat_values.sh $1 "r/s"

UserParameter=custom.vfs.dev.iostats.wps[*],/usr/lib/zabbix/alertscripts/zbx_parse_iostat_values.sh $1 "w/s"

UserParameter=custom.vfs.dev.iostats.avgrq[*],/usr/lib/zabbix/alertscripts/zbx_parse_iostat_values.sh $1 "avgrq-sz"

UserParameter=custom.vfs.dev.iostats.avgqu[*],/usr/lib/zabbix/alertscripts/zbx_parse_iostat_values.sh $1 "avgqu-sz"

UserParameter=custom.vfs.dev.iostats.await[*],/usr/lib/zabbix/alertscripts/zbx_parse_iostat_values.sh $1 "await"

UserParameter=custom.vfs.dev.iostats.svctm[*],/usr/lib/zabbix/alertscripts/zbx_parse_iostat_values.sh $1 "svctm"

UserParameter=custom.vfs.dev.iostats.util[*],/usr/lib/zabbix/alertscripts/zbx_parse_iostat_values.sh $1 "%util"

UserParameter=custom.vfs.dev.iostats.rkB[*],/usr/lib/zabbix/alertscripts/zbx_parse_iostat_values.sh $1 "rkB/s"

UserParameter=custom.vfs.dev.iostats.wkB[*],/usr/lib/zabbix/alertscripts/zbx_parse_iostat_values.sh $1 "wkB/s"

第七:重启zabbix-agent端

systemctl restart zabbix-agent.service

下面是在zabbix的web界面下操作

将zabbix关于linux磁盘的模板文件下载下来并导入

wget https://qiniu.wsfnk.com/Template_Linux_Disk_IO_Stats.xml

第一:按如图要求导入模板Template_Linux_Disk_IO_Stats.xml

b187f651a637461634de2977ec5b6d41.gif

b187f651a637461634de2977ec5b6d41.gif

第二:创建发现磁盘的正则表达式,模板需要使用它

b187f651a637461634de2977ec5b6d41.gif

#这里的名称一定要是它,建议复制粘贴 "Linux disks for autodiscovery"

b187f651a637461634de2977ec5b6d41.gif

第三:将主机链接到该模板上

b187f651a637461634de2977ec5b6d41.gif

第四:查看图形

b187f651a637461634de2977ec5b6d41.gif

如果文章对你有帮助,欢迎点击上方按钮打赏作者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值