使用iostat和LLD实现zabbix监控IO性能
来源:互联网 发布:电子商务网络环境 编辑:程序博客网 时间:2024/06/05 18:57
本文主要分为3个部分
第一部分 前言,主要说说需求和获取数据的命令
第二部分 zabbix,主要说如何利用lld获得想要监控的数据
第三部分 ansible,主要提供一个ansible playbook来分发该监控所需的文件
第一部分 前言部分
最近有一个需求是对系统的IO进行监控,最后决定从iostat获取数据。
这是具体的命令:
iostat -x -d -m 1 3
参数简单解析:
-x Display extended statistics
-d Display the device utilization report
-m Display statistics in megabytes per second instead of blocks or kilobytes per second
那么为什么要 1 3呢?
我们用
iostat -x -d -m 1
多次测试,会发现第一次输出的值变动不大,第二次,第三次输出的值会有一定的变化,因此我更偏向与取第二次,第三次的值做平均
命令的输出格式如下:
Device: rrqm
/s
wrqm
/s
r
/s
w
/s
rMB
/s
wMB
/s
avgrq-sz avgqu-sz await svctm %util
可以较好地满足我们的监控需求
第二部分 zabbix部分
接下来,我们就用zabbix的LLD来自动发现当前系统的Device值
cat /etc/zabbix/scripts/io_discovery.py
#!/bin/env python
import
os
import
commands
(status,output)
=
commands.getstatusoutput(
"iostat -x -d -m | sed -n '4,$p' | grep -v ^$| awk '{print $1}'"
)
DISKS
=
output.split()
print
'{'
print
'\t"data":['
count
=
1
for
key
in
DISKS:
print
'\t{'
if
count <
len
(DISKS):
print
'\t\t"{#DISK}":"%s"},'
%
key
else
:
print
'\t\t"{#DISK}":"%s"}'
%
key
count
+
=
1
print
'\t]'
print
'}'
拿到Device以后,用脚本来获取对应的数值
cat /etc/zabbix/scripts/userparameter_diskio.py
#!/bin/env python
import
commands
import
sys
DISK
=
sys.argv[
1
]
cmdline
=
'cat /tmp/iostat.txt | grep %s'
%
DISK
(status,output)
=
commands.getstatusoutput(cmdline)
output_list
=
output.split()
value
=
zip
(
*
[
iter
(output_list)]
*
12
)
if
sys.argv[
2
]
=
=
"rrqmps"
:
print
((
float
(value[
1
][
1
])
+
float
(value[
2
][
1
]))
/
2
)
elif
sys.argv[
2
]
=
=
"wrqmps"
:
print
((
float
(value[
1
][
2
])
+
float
(value[
2
][
2
]))
/
2
)
elif
sys.argv[
2
]
=
=
"rps"
:
print
((
float
(value[
1
][
3
])
+
float
(value[
2
][
3
]))
/
2
)
elif
sys.argv[
2
]
=
=
"wps"
:
print
((
float
(value[
1
][
4
])
+
float
(value[
2
][
4
]))
/
2
)
elif
sys.argv[
2
]
=
=
"rspeed"
:
print
((
float
(value[
1
][
5
])
+
float
(value[
2
][
5
]))
/
2
)
elif
sys.argv[
2
]
=
=
"wspeed"
:
print
((
float
(value[
1
][
6
])
+
float
(value[
2
][
6
]))
/
2
)
elif
sys.argv[
2
]
=
=
"await"
:
print
((
float
(value[
1
][
9
])
+
float
(value[
2
][
9
]))
/
2
)
elif
sys.argv[
2
]
=
=
"svctm"
:
print
((
float
(value[
1
][
10
])
+
float
(value[
2
][
10
]))
/
2
)
elif
sys.argv[
2
]
=
=
"util"
:
print
((
float
(value[
1
][
11
])
+
float
(value[
2
][
11
]))
/
2
)
这里还需要一个crontab来生成/tmp/iostat.txt文件
* * * * * iostat -x -d -m 1 3 > /tmp/iostat.txt
接着写一个自定义配置文件
cat /etc/zabbix/zabbix_agentd.d/userparameter_diskio.conf
UserParameter=diskio_discovery[*],python
/etc/zabbix/scripts/io_discovery
.py
UserParameter=diskio[*],python
/etc/zabbix/scripts/userparameter_diskio
.py $1 $2
接下来需要在zabbix上建一个监控模板,模板在附件里面,本模板适用于zabbix3.2,其他版本请自行测试,可能需要做一些修改
都准备以后可以开始使用了
首先把相应的脚本和配置文件放到客户机上面,添加cron
接着把模板导入,在模板里面添加机器,然后restart zabbix 客户端
第三部分 Ansible部分
如果你有使用ansible,这里可以提供一个playbook,用来分发脚本等工作
- hosts: 客户机
tasks:
- name: mkdir the scripts dir
file: path=/etc/zabbix/scripts state=directory
- name: copy conf files
copy: src=/etc/zabbix/zabbix_agentd.d/userparameter_diskio.conf dest=/etc/zabbix/zabbix_agentd.d/
- name: copy io_discovery.py
copy: src=/etc/zabbix/scripts/io_discovery.py dest=/etc/zabbix/scripts/io_discovery.py mode=0755
- name: copy userparameter_diskio.py
copy: src=/etc/zabbix/scripts/userparameter_diskio.py dest=/etc/zabbix/scripts/userparameter_diskio.py mode=0755
- name: add cron
cron: name='add iostat cron' minute='*' hour='*' day='*' month='*' weekday='*' job='iostat -x -d -m 1 3 > /tmp/iostat.txt' state=present
notify:
- restart zabbix-agent
handlers:
- 使用iostat和LLD实现zabbix监控IO性能
- 使用iostat和LLD实现zabbix监控IO性能
- zabbix利用脚本和lld监控web
- zabbix利用lld监控memcached
- 通过IOStat命令监控IO性能
- 通过IOStat命令监控IO性能
- 通过IOStat命令监控IO性能
- 通过IOStat命令监控IO性能
- 过IOStat命令监控IO性能
- zabbix监控磁盘IO low-level-discory方式-iostat说明
- 使用iostat分析IO性能
- 使用iostat分析IO性能
- 使用iostat分析IO性能
- 使用iostat分析IO性能
- 使用iostat分析IO性能
- 使用iostat分析IO性能
- Zabbix通过MegaCli实现对LSI Raid卡硬盘监控(LLD)
- 服务器负载检测、IO性能及磁盘繁忙监控-iostat命令使用
- Laravel-Blade模板引擎-2.基础语法及include的使用
- Laravel-Blade模板引擎-3.流程控制
- Laravel-Blade模板引擎-4. 模板中的URL
- 数组、List和ArrayList的区别
- 1st round, 311 Sparse Matrix Multiplication
- 使用iostat和LLD实现zabbix监控IO性能
- 自定义vimrc
- 第二期 QEMU模拟vexpress-a9开发板 《虚拟机就是开发板》
- Swift入门基础知识大家分享
- Map接口
- VT-x is disabled in the BIOS android开发遇到的第一个问题 vts BIOS设置
- unity
- 11111111111
- Leetcode 205. Isomorphic Strings