Zabbix-3.0监测服务器硬盘IO状态

一、环境准备

被监控主机已安装zabbix-agent,且zabbix-server能正常监控到zabbix-agent相关数据。

系统环境:

Zabbix-server:192.168.1.142

Zabbix-agent:192.168.1.156

Zabbix-agent安装目录在/opt/zabbix

二、解决思路

1、先在zabbix-agent上面通过zabbix的low-discovery功能自动发现服务器硬盘的名称。

2、通过脚本,利用iostat收集服务器硬盘的相关数据,保存到指定目录,并创建crontab,定时收集服务器硬盘IO数据,便于zabbix-web端绘图。

3、修改zabbix相关配置文件,使zabbix-agent能通过自定义的low-discovery获取硬盘的名称,同时zabbix-server能通过zabbix-get程序去zabbix-agent上面收集iostat脚本采集的zabbix-agent的硬盘IO数据。

4、到zabbix-web上面创建硬盘IO检测模板,并观察绘图数据,创建触发器。

三、详细步骤

1、Zabbix-agent端:

[root@mysql-slave ~]# cd /opt/zabbix/

[root@mysql-slave zabbix]# mkdir scripts   #存放diskname_discovery脚本目录

[root@mysql-slave zabbix]# mkdir cron     #存放采集硬盘IO数据的脚本目录

[root@mysql-slave zabbix]# mkdir data     #存放脚本采集的硬盘IO数据目录

注:data目录在脚本中会自动创建,此处可以不手动创建。

ll查看zabbix目录下面都有哪些子目录。

[root@mysql-slave zabbix]# cd scripts/

[root@mysql-slave scripts]# vim diskname_discovery.sh  #获取硬盘名称

[root@mysql-slave scripts]# bash diskname_discovery.sh

{

"data":[

{"{#DISK_NAME}":"xvda"}

]

}

#执行脚本已经能够获取硬盘名称,便于zabbix中进行宏调用。

#下面贴出脚本具体内容:

#!/bin/bash

# function:monitor diskstatus from zabbix

# License: GPL

# author: shaon

# version:1.0 date:2016-04-01

diskarray=($(grep '\b[a-z][a-z][a-z]\+\b'  /proc/diskstats|awk '{print $3}'))

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"

2、创建收集硬盘IO数据脚本

[root@mysql-slave scripts]# cd ../cron/

[root@mysql-slave cron]# vim iostat_cron.sh

下面贴出脚本具体信息:

#!/bin/bash

##################################

# zabbix monitoring script

#auther: shaonbean

# info:

#  - cron job to gather iostat data

#  - can not do real time as iostat data gathering will exceed

#    zabbix agent timeout

##################################

# changelog:

#  20160519    vv    initial creation

##################################

iostat_bin="/usr/bin/iostat"

frequency="10 2"

# source data file

zabbix_base_dir=/opt/zabbix

[ -d $zabbix_base_dir/data ] || mkdir -p $zabbix_base_dir/data

dest_data=$zabbix_base_dir/data/iostat_data

tmp_data=$zabbix_base_dir/data/iostat_data.tmp

#script_conf=$zabbix_base_dir/conf/iostat_check.conf    #iostat_check.conf为自定义的iostat 检测的频率,可自定义,此处可注释。

#[ -e "$script_conf" ] && source $script_conf

#

# gather data in temp file first, then move to final location

# it avoids zabbix-agent to gather data from a half written source file

#

# iostat -kx 10 2 - will display 2 lines :

#  - 1st: statistics since boot -- useless

#  - 2nd: statistics over the last 10 sec

#

$iostat_bin -dxm $frequency > $tmp_data

mv $tmp_data $dest_data

3、把刚刚创建的脚本加到crontab中。

[root@mysql-slave conf]# crontab -e

#  zabbix cronjob for application

*/1 * * * * /bin/bash /opt/zabbix/cron/iostat_cron.sh

4、修改zabbix-agnet的相关配置文件

[root@mysql-slave conf]# cd /opt/zabbix/etc/

[root@mysql-slave etc]# egrep -v "^#|^$" zabbix_agentd.conf

PidFile=/opt/zabbix/pid/zabbix_agentd.pid

LogFile=/var/log/zabbix/zabbix_agentd.log

Server=127.0.0.1,192.168.1.142          #被动模式,server为zabbix-server ip

ServerActive=192.168.1.142:10051       #主动模式

Hostname=mysql-slave                #使用主动模式收集数据并发送到zabbix-server时开启,被动模式不需要这个参数,注释掉。

Timeout=5

Include=/opt/zabbix/etc/zabbix_agentd.conf.d/ #存放zabbix-server需要使用的配置文件目录

UnsafeUserParameters=1     #开启之后,可以使用自定义的脚本收集zabbix-agent的数据。

### Option: UnsafeUserParameters

#       Allow all characters to be passed in arguments to user-defined parameters.

#       The following characters are not allowed:

#       \ ' " ` * ? [ ] { } ~ $ ! & ; ( ) < > | # @

#       Additionally, newline characters are not allowed.

#       0 - do not allow

#       1 - allow

#

# Mandatory: no

# Range: 0-1

# Default:

#UnsafeUserParameters=0

5、新建自定义的配置文件

[root@mysql-slave etc]# cd /opt/zabbix/etc/zabbix_agentd.conf.d/

下面贴出配置文件内容:

#diskname discovery

UserParameter=disk.name.discovery[*],/opt/zabbix/scripts/diskname_discovery.sh $1

#gather iostat value

UserParameter=io.rrqmps[*],/usr/bin/tail /opt/zabbix/data/iostat_data |grep "\b$1\b"|tail -1|awk '{print $$3}'

UserParameter=io.wrqmps[*],/usr/bin/tail /opt/zabbix/data/iostat_data |grep "\b$1\b"|tail -1|awk '{print $$3}'

UserParameter=io.rps[*],/usr/bin/tail /opt/zabbix/data/iostat_data |grep "\b$1\b"|tail -1|awk '{print $$4}'

UserParameter=io.wps[*],/usr/bin/tail /opt/zabbix/data/iostat_data |grep "\b$1\b" |tail -1|awk '{print $$5}'

UserParameter=io.rMBps[*],/usr/bin/tail /opt/zabbix/data/iostat_data |grep "\b$1\b" |tail -1|awk '{print $$6}'

UserParameter=io.wMBps[*],/usr/bin/tail /opt/zabbix/data/iostat_data |grep "\b$1\b" |tail -1|awk '{print $$7}'

UserParameter=io.avgrq-sz[*],/usr/bin/tail /opt/zabbix/data/iostat_data |grep "\b$1\b" |tail -1|awk '{print $$8}'

UserParameter=io.avgqu-sz[*],/usr/bin/tail /opt/zabbix/data/iostat_data |grep "\b$1\b" |tail -1|awk '{print $$9}'

UserParameter=io.await[*],/usr/bin/tail /opt/zabbix/data/iostat_data |grep "\b$1\b" |tail -1|awk '{print $$10}'

UserParameter=io.svctm[*],/usr/bin/tail /opt/zabbix/data/iostat_data |grep "\b$1\b" |tail -1|awk '{print $$11}'

UserParameter=io.util[*],/usr/bin/tail /opt/zabbix/data/iostat_data |grep "\b$1\b" |tail -1|awk '{print $$12}'

################

#rrqm/S: merge number of read operations per second. Delta(rmerge)/s

#wrqm/S: per second operation number and write merge. Delta(wmerge)/s

#r/Read the I/O device s: completion times per second. Delta(rio)/s

#w/S: finished writing I/O times per second. Delta(wio)/s

#rsec/S: read the number of sectors per second. Delta(rsect)/s

#wsec/S: write the number of sectors per second. Delta(wsect)/s

#rkB/S: read K bytes per second. Is rsect/Half of the s, because each sector size of 512 bytes. (calculated)

#wkB/S: write K bytes per second. Is wsect/Half s. (calculated)

#avgrqAverage -sz: per I/O device data size (sector). delta(rsect+wsect)/delta(rio+wio)

#avgqu-sz: I/O average queue length. Delta(aveq)/s/1000 (because the aveq milliseconds).

#Average await: per device I/The waiting time of O operation (MS). Delta(ruse+wuse)/delta(rio+wio)

#Average svctm: per device I/The O operation business hours (MS). Delta(use)/delta(rio+wio)

6、本地测试相关功能

[root@mysql-slave etc]# cd /opt/zabbix/bin/

[root@mysql-slave bin]# ./zabbix_get -s 127.0.0.1 -p 10050 -k disk.name.discovery

下面能看到我们自定义的key已经能够使用

然后根据/opt/zabbix/etc/zabbix_agentd.conf.d目录下面的配置文件测试具体key的使用:

[root@mysql-slave bin]# ./zabbix_get -s 127.0.0.1 -p 10050 -k io.util[xvda]

可以看到,通过自定义的key可以正常取值。

分步取值:

查看脚本收集到的硬盘IO状态详细数据,如下图:

然后通过下面命令获取具体硬盘IO各项参数的数值:

[root@mysql-slave ~]# /usr/bin/tail /opt/zabbix/data/iostat_data | grep "\bxvda\b" | tail -1 | awk '{print $12}'

这里取得是util的数据,$1代表自动发现的硬盘名称。其他参数取值参考util即可。

Zabbix-server:服务端

/opt/zabbix/bin/zabbix_get -s 192.168.1.156 -p 10050 -k io.util[xvda]

能够看出在zabbix-server已经能够通过自定义的key及发现函数,实现zabbix-agent硬盘IO状态的数据采集,

四、zabbix-web前端设置

创建硬盘IO状态检测模板,自定义,不多说

下一步,创建发现规则:

创建完成,然后添加监控项以及触发器,并创建相关图形,便于查看,

添加完成如图:

设置触发器;

添加图形显示;

查看硬盘IO的状态变化图:

下面导出检测模板,可以根据不同的需求自定义相关参数。

由于模板格式问题,所以相关模板及脚本到

https://github.com/wh211212/vdevops-zabbix   下载

Zabbix-3.0.X 监测服务器硬盘IO状态相关推荐

  1. Linux iostat监测IO状态

    Linux iostat监测IO状态 - 一个故事@MySQL DBA Linux iostat监测IO状态 2010-03-1  |  13:13分类:Linux,技术细节  |  标签:Linux ...

  2. Zabbix 3.0 从入门到精通(zabbix使用详解)

    第1章 zabbix监控 1.1 为什么要监控 在需要的时刻,提前提醒我们服务器出问题了 当出问题之后,可以找到问题的根源   网站/服务器 的可用性 1.1.1 网站可用性 在软件系统的高可靠性(也 ...

  3. zabbix自动发现实现批量监控docker状态

    最近在搞zabbix监控docker以及docker内部应用状态信息,网上找的资料好少,只找到了一个大神的一篇文章,用的是python实现监控docker容器的基本状态,我在他给的脚本基础上进行修改, ...

  4. Zabbix 4.0.0 新功能介绍

    改进仪表板 仪表板在新版本中有了进一步的改进,使其更有吸引力,更灵活,更能满足用户的需要. 为实现新的外观和功能,已取得以下进展: 一种新的更通用的基于SVG的图形小部件已经添加,而经典的设计图小部件 ...

  5. zabbix如何监控linux磁盘性能IO

    前提环境: perl和python,以及zabbix-agent已是可用状态 需要主要监控的指标: 1:每秒IO数,即iops或tps2:吞吐率3:平均IO尺寸,avgrq-sz4:IO等待队列长度, ...

  6. CentOS-7部署安装Zabbix 3.0

    文章目录 **实验目的:** 部署安装Zabbix 3.0: 配置"主机名和hosts解析" 安装MySQL(CentOS-7中更名为 mariadb ) 使用官方yum源安装Za ...

  7. 深入浅出Zabbix 3.0 -- 第十五章 Zabbix 协议与API

    第十五章 Zabbix 协议与API 本章将介绍和开发相关的Zabbix协议和API的内容,通过对Zabbix协议和API的深入了解,你可以利用Zabbix协议编写客户端程序并将其嵌入的产品或系统中, ...

  8. 查看linux服务器硬盘IO读写负载

    最近一台linux服务器出现异常,系统反映很慢,相应的应用程序也无法反映,而且还出现死机的情况,经过几天的观察了解,发现服务器压力很大,主要的压力来自硬盘的IO访问已经达到100% 为了方便各位和自己 ...

  9. Zabbix 3.0 基础介绍 [一]

    zabbix 简介 Zabbix 是一个高度集成的网络监控解决方案,可以提供企业级的开源分布式监控解决方案,由一个国外的团队持续维护更新,软件可以自由下载使用,运作团队靠提供收费的技术支持赢利zabb ...

最新文章

  1. 如何在MyEclipse中将项目部署Tomcat
  2. vs 服务容器中已存在服务_容器中某Go服务GC停顿经常超过100ms排查
  3. MyBatis-动态SQL
  4. 需求分析中应该注意的问题
  5. 为什么字节跳动选择使用 Go 语言?
  6. 使用git管理github项目
  7. android 自定义横向堆积柱形图,MPAndroidChart项目实战(八)——自定义分段堆积柱状图...
  8. bzoj4569 [Scoi2016]萌萌哒 并查集+st表
  9. POJ-1001 求高精度幂
  10. (转)MFC消息机制
  11. linux 监控软件介绍,Linux中系统整体性能监控工具详细介绍
  12. 自动回复html模板邮件,outlook休假自动回复
  13. anaconda中的python在pycharm中用不了_pycharm与anaconda的使用
  14. matlab中syms x是什么意思,matlab中怎样定义未知数,如x,syms是什么意思?
  15. SLCP验厂辅导,SLCP数据收集和验证工具整合成在线格式的托管平台来完成
  16. 数据科学中的计量经济学技术
  17. 哈希切割+布隆过滤器
  18. git的了解和开发安装 以及分支合集
  19. web 机动车车牌录入组件
  20. 向上转型与向下转型(超详细)

热门文章

  1. SVN冲突 One or more files are in a conflicted state
  2. php 中文 无法写入 mysql_php数据库不能存入中文
  3. CentOS 7输入startx无法启动图形化界面
  4. linux文件系统与磁盘(三)LVM逻辑卷管理
  5. java五子棋网络版源码_网络版五子棋的java源代码.pdf
  6. GDB基本命令(整合)
  7. Lucky Kat LAND — NFT 系列发售
  8. 一路狂奔的“幸运咖”,再造下一个“蜜雪冰城”?
  9. 计算机网络复习(部分)
  10. [Luogu P3975] [TJOI2015]弦论