zabbix监控linux磁盘IO性能
近期数据主机的磁盘IO经常峰值,影响业务的稳定运行。得到一个需求,要求通过zabbix监控agent主机的IO状态,要知道zabbix默认是没有监控zabbix模板的,那么此时需要我们定义脚本获取agent的IO性能,并在zabbix的web端定义模板来实现对数据库主机监控
下面就来介绍如何通过zabbix对agent主机的IO性能进行监控:
【Agent段配置详解】
# egrep -v "#|^$" /etc/zabbix/zabbix_agentd.conf PidFile=/var/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_agentd.log LogFileSize=0 Server=10.15.200.72 Include=/etc/zabbix/zabbix_agentd.d/*.conf
# cat /etc/zabbix/zabbix_agentd.d/scripts/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<$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"
# cat /etc/zabbix/zabbix_agentd.d/scripts/disk_status.sh #获取磁盘IO数据
#/bin/sh Device=$1 DISK=$2 case $DISK in rrqm) iostat -dxkt 1 2|grep "\b$Device\b"|tail -1|awk '{print $2}' ;; wrqm) iostat -dxkt 1 2|grep "\b$Device\b"|tail -1|awk '{print $3}' ;; rps) iostat -dxkt 1 2|grep "\b$Device\b"|tail -1|awk '{print $4}' ;; wps) iostat -dxkt 1 2|grep "\b$Device\b" |tail -1|awk '{print $5}' ;; rKBps) iostat -dxkt 1 2|grep "\b$Device\b" |tail -1|awk '{print $6}' ;; wKBps) iostat -dxkt 1 2|grep "\b$Device\b" |tail -1|awk '{print $7}' ;; avgrq-sz) iostat -dxkt 1 2|grep "\b$Device\b" |tail -1|awk '{print $8}' ;; avgqu-sz) iostat -dxkt 1 2|grep "\b$Device\b" |tail -1|awk '{print $9}' ;; await) iostat -dxkt 1 2|grep "\b$Device\b" |tail -1|awk '{print $10}' ;; svctm) iostat -dxkt 1 2|grep "\b$Device\b" |tail -1|awk '{print $11}' ;; util) iostat -dxkt |grep "\b$Device\b" |tail -1|awk '{print $12}' ;; esac
参数详解:
1 2 3 4 5 6 7 8 9 10 11 12 13 | rrqm/s: 每秒进行 merge 的读操作数目。即 delta(rmerge)/s wrqm/s: 每秒进行 merge 的写操作数目。即 delta(wmerge)/s rps: 每秒完成的读 I/O 设备次数。即 delta(rio)/s wps: 每秒完成的写 I/O 设备次数。即 delta(wio)/s rsec/s: 每秒读扇区数。即 delta(rsect)/s wsec/s: 每秒写扇区数。即 delta(wsect)/s rkBps: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。(需要计算) wkBps: 每秒写K字节数。是 wsect/s 的一半。(需要计算) avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio) avgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。 await: 平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio) svctm: 平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio) %util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒) |
# cat /etc/zabbix/zabbix_agentd.d/disk_status.conf #将两个脚本授予执行权限,单独写在一个个配置文件中,
UserParameter=disk.discovery[*],/etc/zabbix/zabbix_agentd.d/scripts/disk_discovery.sh UserParameter=disk.status[*],/etc/zabbix/zabbix_agentd.d/scripts/disk_status.sh $1 $2
【Zabbix-web端配置】
1、新建模板,命名为DISK-IO,加入到Templates模板组。
2、新建一个自动发现规则
3、建立多个监控项原型
4、建立触发器类型
5、建立图形原型
最后将定义的模板链接到某个监控主机,从图形中即可发现磁盘IO数据变化
END!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
2018-04-30 Shell文本处理四剑客