zabbix监控磁盘_Zabbix 监控 Linux 磁盘性能

653e865c9587d68b398ef78317893906.png

前提环境
perl和python,以及zabbix-agent已是可用状态。
需要主要监控的指标
1:每秒IO数,即iops或tps2:吞吐率3:平均IO尺寸,avgrq-sz4:IO等待队列长度,avgqu-sz5:磁盘活动时间百分比,util
安装iostat工具
yum install sysstat -y    #centos7安装iostat工具,centos6之前自带
在agent端创建用于存放执行脚本的目录,并修改权限
mkdir /usr/lib/zabbix/alertscripts/ -pchown 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 namesub 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/bashdev=$1type=$2#enable debug modedebug=0if [[ -z "$dev" ]]; then  echo "error: wrong input value (device)"  exit 1fiif [[ -z "$type" ]]; then  echo "error: wrong input value (type)"  exit 1ficolumns=`iostat -xN |egrep -o "^Device.*"`columnsarray=($columns)column_id=1for 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]doneif [ -z "$iostats" ]; then    echo "error: \"device\" or \"type\" not found (${dev},${type})"    exit 3fiiostats_lines=`wc -l "$iostats"`if [ $iostats_lines -ne 1 ]; then    echo "error: wrong output value (${iostats_lines})"    exit 2fiecho $iostatsif [[ $debug -eq 1 ]]; then    echo "- - - - - - - - - -"    echo $columns    iostats_debug=`iostat -xN |egrep -o "^${dev}[[:space:]]+.*"`    echo $iostats_debug    echo "- - - - - - - - - -"fiexit 0
为刚才创建的两个文件赋予执行权限
chmod +x /usr/lib/zabbix/alertscripts/*
在zabbix-agent的配置文件上添加如下内容
vim /etc/zabbix/zabbix_agentd.conf# diskio discoveryUserParameter=discovery.disks.iostats,/usr/lib/zabbix/alertscripts/discover_disk.plUserParameter=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关于linux磁盘的模板文件下载下来并导入
wget https://qiniu.wsfnk.com/Template_Linux_Disk_IO_Stats.xml
按如图要求导入模板Template_Linux_Disk_IO_Stats.xml

3677575c3ca1ece9db1a47609649bd6c.png40a13f53cf5941fc643fecd1e6b8fe93.png

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

5d3d405078cf586b3808304bc04efa8d.png

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

9a48a79a4c7fea82c57a38429638474d.png

将主机链接到该模板上

af39715eff990b294d270a6574c8585b.png

查看图形

aad2ae29a34b6af70a8eee885cce9588.png


本公众号全部博文已整理成一个目录,请在公众号里回复「m」获取!

推荐阅读:

让你提高效率的 Linux 技巧 搜索神器 EveryThing,你把它的潜力用到极致了吗? 史上程序员被黑得最惨的一次?

5T技术资源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,单片机,树莓派,等等。在公众号内回复「1024」,即可免费获取!!

87b604e5e3dc845901f4c024167d7c8b.png

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值