最近在看Linux I/O子系统相关的资料,需要监控每台服务器的磁盘I/O,特别是MongoDB数据库服务器的磁盘I/O,由于每台服务器的磁盘名称可能不一样,所以需要用到Zabbix的LLD功能来发现磁盘并监控I/O

参考文章

编写发现磁盘的脚步

shell版本disk_discovery.sh#!/bin/bash

diskarray=(`cat /proc/diskstats |grep -E "\bsd[a-z]\b|\bxvd[a-z]\b|\bvd[a-z]\b"|awk '{print $3}'|sort|uniq   2>/dev/null`)

length=${#diskarray[@]}

printf "{\n"

printf  '\t'"\"data\":["

for ((i=0;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"

$ sh disk_discovery.sh

{

"data":[

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

{"{#DISK_NAME}":"xvdb"}

]

}

python版本disk_discovery.py#/usr/bin/python

#This script is used to discovery disk on the server

import subprocess

import json

args="cat /proc/diskstats |grep -E '\ssd[a-z]\s|\sxvd[a-z]\s|\svd[a-z]\s'|awk '{print $3}'|sort|uniq 2>/dev/null"

t=subprocess.Popen(args,shell=True,stdout=subprocess.PIPE).communicate()[0]

disks=[]

for disk in t.split('\n'):

if len(disk) != 0:

disks.append({'{#DISK_NAME}':disk})

print json.dumps({'data':disks},indent=4,separators=(',',':'))

$ python disk_discovery.py

{

"data":[

{

"{#DISK_NAME}":"xvda"

},

{

"{#DISK_NAME}":"xvdb"

}

]

}

2.编写获取磁盘I/O信息的脚本

使用iostat收集磁盘I/O信息

nohup /usr/bin/iostat -dxkt 1  > /tmp/iostat_output 2>/dev/null &

#/bin/sh

device=$1

item=$2

case $item in

rrqm)

/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b"|tail -1|awk '{print $2}'

;;

wrqm)

/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b"|tail -1|awk '{print $3}'

;;

rps)

/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b"|tail -1|awk '{print $4}'

;;

wps)

/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $5}'

;;

rKBps)

/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $6}'

;;

wKBps)

/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $7}'

;;

avgrq-sz)

/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $8}'

;;

avgqu-sz)

/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $9}'

;;

await)

/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $10}'

;;

svctm)

/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $11}'

;;

util)

/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $12}'

;;

esac

3.修改Zabbix agent配置文件

添加disk_status.conf

### Option: UserParameter

#       User-defined parameter to monitor. There can be several user-defined parameters.

#       Format: UserParameter=,

#       See 'zabbix_agentd' directory for examples.

#

# Mandatory: no

# Default:

# UserParameter=

UserParameter=disk.discovery,/usr/bin/python /usr/local/zabbix/bin/disk_discovery.py

UserParameter=disk.status[*],/usr/local/zabbix/bin/disk_status.sh $1 $2

然后重新加载zabbix agent

4.通过在zabbix server或zabbix proxy端使用zabbix_get获取磁盘信息

$ /usr/local/zabbix/bin/zabbix_get -s 192.168.1.190 -p 10055 -k "disk.discovery"

{

"data":[

{

"{#DISK_NAME}":"xvda"

},

{

"{#DISK_NAME}":"xvdb"

},

{

"{#DISK_NAME}":"xvdc"

}

]

}

$ /usr/local/zabbix/bin/zabbix_get -s 192.168.1.190 -p 10055 -k "disk.status[xvda,wps]"10.00

5.添加磁盘监控模板

在添加item的时候注意,由于使用的是iostat -k 获取每秒的读写大小,所以iostat显示的是以KB为单位,在zabbix上以B为基本单位,需要用到Use custom multiplier 这个选项将zabbix agent返回的KB值乘以1024变成B,然后zabbix agent再以B为单位显示成B或KB或MB便于查看。

linux磁盘i o跟踪,利用zabbix动态监控磁盘I/O相关推荐

  1. Zabbix动态监控磁盘I/O

    需要监控每台服务器的磁盘I/O,由于每台服务器的磁盘名称可能不一样,所以需要用到Zabbix的LLD功能来发现磁盘并监控I/O. 一.客户端(被监控端) 1.发现磁盘的脚本(disk_discover ...

  2. 利用系统错误日志监控磁盘健康状况

    一.故障现象 这个星期出现了两块磁盘不能读写,后面通过系统日志查看,关键字"EXT4-fs error对应某个磁盘",因此利用zabbix,把系统日志抓取出来,作告警! 二.步聚 ...

  3. zabbix之监控磁盘读写速度

    Zabbix作为强大的服务器监控平台,本次利用它来检测服务器中各个硬盘的读写速度,以便能在硬盘性能下降能够即使更换,不影响工作效率. 1.dd命令使用 利用Linux自带的dd命令来测试硬盘的读写速度 ...

  4. linux 占用内存 脚本,如何利用Bash脚本监控Linux的内存使用情况

    前言 目前市场上有许多开源监控工具可用于监控 Linux 系统的性能.当系统达到指定的阈值限制时,它可以发送电子邮件警报.它可以监视 CPU 利用率.内存利用率.交换利用率.磁盘空间利用率等所有内容. ...

  5. linux 访问磁盘bin,zabbix应用之Low-level discovery监控磁盘IO

    zabbix自带的"Template OS Linux"模板支持监控已挂载的磁盘空间利用率,是利用LLD(Low-level discovery)实现的,却没有对磁盘IO监控.本篇 ...

  6. zabbix如何监控oracle,使用zabbix监控oracle数据库的方法详解

    一.概述 zabbix是一款非常强大,同时也是应用最为广泛的开源监控软件,本文将给大家介绍如何利用zabbix+python监控oracle数据库. 二.环境介绍 以下是我安装的环境,实际部署时并不需 ...

  7. zabbix——分布式监控系统

    目录 zabbix概述 zabbix 是什么 zabbix 监控原理 zabbix常见的五个程序 zabbix端口号 安装 zabbix 5.0 部署 zabbix 服务端 部署 zabbix 客户端 ...

  8. zabbix日志监控:操作系统、业务系统、文件大小、多行日志

    zabbix日志监控:操作系统.业务系统.文件大小.多行日志 目录 1 监控操作系统日志 2 监控业务系统日志 具体要求: 分析: 操作: 3 监控日志文件大小 (1)在被管主机当中安装agent ( ...

  9. linux服务器系统_利用Zabbix监控系统监测Linux服务器系统时间是否准确完美实现...

    服务器时间校准是非常重要的,因为很多应用服务都是需要基于时间的,服务器系统时间如果不准确的话就会产生很多问题.虽然我们可以通过部署NTP时间服务器来进行校准,但是有时候感觉还不够保险,而这往往也是很多 ...

最新文章

  1. 一个简单的mysql存储过程
  2. Eclipse中spring boot的安装和创建简单的Web应用
  3. 一个野路子java程序员的自述
  4. 磁盘 I/O性能指标
  5. vmware中ubuntu虚拟机扩容
  6. java类快速构造_程序员有什么办法能快速梳理java知识点?有这八张图就够了
  7. 公司想建个FTP文件服务器,自己折腾把一台电脑做成文件服务器了,但是考虑稳定性放弃,计划买个有哪些建议?
  8. pycharm搭建spark环境
  9. 【java笔记】Stream流(2):获取流的两种方法
  10. [分享].Net脱壳利器de4dot介绍
  11. 【Linux】U盘配合WinPE 安装debian8.6
  12. Vscode鼠标乱跳
  13. PHP执行shell_exec方法失败
  14. 3dmark压力测试 linux,拷机还用Furmark? 瞧瞧3DMark压力测试怎样玩
  15. 点亮LED灯(LED)
  16. 设置Windows桌面壁纸
  17. ue4物品审视功能及景深效果
  18. 金融工程会用哪些计算机知识,金融工程专业对计算机的能力要求到底是什么
  19. 小米、华为和智汀智能家居从单品向全屋智能前进
  20. C/C++游戏项目详细教程:《中国象棋》

热门文章

  1. IF10+的数据库文章!这里有5个案例,一起发起来?
  2. GraPhlAn绘制的超高颜值物种树Cladogram
  3. 环境微生物期刊—mBio介绍
  4. TBtools - 超过一万人在使用的生信小工具
  5. R语言编写自定义函数、创建使用ggplot2生成图标(icon)的主题(theme)函数、使用ggplot2以及自定义的图标主题函数创建箱图(boxplot)图标、ggsave保存图标(png、svg
  6. R语言使用pwr包的pwr.f2.test函数对线性回归模型(Linear models)进行效用分析(power analysis)的语法
  7. R语言attributes函数(获取属性、设置属性)、attr函数(改变一个属性)、structure函数(改变数据形状)实战
  8. Association Rules 关联规则
  9. 基于 PacBio 测序数据的纠错算法评测与剪切位点识别研究
  10. FLAS: fast and high-throughput algorithm for PacBio long-read self-correction FLAS:快速、高通量的PacBio lon