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"ifnot$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)"
exit1
fi
if[[ -z"$type"]];then
echo"error: wrong input value (type)"
exit1
fi
columns=`iostat -xN |egrep -o"^Device.*"`
columnsarray=($columns)
column_id=1
foriin"$"
do
#echo "column: $i"
if[["$i"="$type"]];then
if[[$debug-eq 1 ]];then
echo"right column ($) found...column_id:$column_id"
fi
id="$"
column_id_id=$id$column_id
iostats=`iostat -xN |egrep -o"^$[[:space:]] .*"|awk"}"`
fi
column_id=$[column_id 1]
done
if[ -z"$iostats"];then
echo"error: \"device\" or \"type\" not found ($,$)"
exit3
fi
iostats_lines=`wc -l
if[$iostats_lines-ne 1 ];then
echo"error: wrong output value ($)"
exit2
fi
echo$iostats
if[[$debug-eq 1 ]];then
echo"- - - - - - - - - -"
echo$columns
iostats_debug=`iostat -xN |egrep -o"^$[[:space:]] .*"`
echo$iostats_debug
echo"- - - - - - - - - -"
fi
exit
※方舟編譯器8月正式開源!
※最小化安裝CentOS 7.6後的優化
TAG:Linux資訊速推 |