zabbix监控脚本01-磁盘监控一

发布时间 2023-05-30 14:37:00作者: shadown404

1 基础说明

(1)配合的监控工具 zabbix

(2)说明:此处的脚本直接使用的是linux下进程文件的数据做计算

(3)文件内容说明:/proc/pid/io
rchar: 读出的总字节数,read或者pread()中的长度参数总和*pagecache中统计而来,不代表实际磁盘的读入),累加计数
wchar: 写入的总字节数,write或者pwrite中的长度参数总和,累加计数
syscr: read()或者pread()总的调用次数
syscw: write()或者pwrite()总的调用次数
read_bytes: 实际从磁盘中读取的字节总数,累加计数
write_bytes: 实际写入到磁盘中的字节总数,累加计数
cancelled_write_bytes: 由于截断pagecache导致应该发生而没有发生的写入字节数(可能为负数)

 

(4)脚本计算的是每秒进程读取,写入的磁盘数据,单位为 MB/s,脚本名称可以命名为 disk_totals.sh

 1 #!/bin/bash
 2 
 3 #接收脚本后面的第一个参数
 4 R_MON="$1"
 5 
 6 disk_tps() {
 7     R_PID=$(ps -fe | grep "需要监控的进程的标识" | grep -v "grep" | awk -F" " '{print $2}')
 8     DATE1=$(date +%s)
 9     BYTE1=$(cat /proc/${R_PID}/io | grep "${R_MON}" | head -1 | awk -F" " '{print $2}')
10     sleep 1
11     BYTE2=$(cat /proc/${R_PID}/io | grep "${R_MON}" | head -1 | awk -F" " '{print $2}')
12     DATE2=$(date +%s)
13     BYTES=$(( ${BYTE2} - ${BYTE1} ))
14     DATES=$(( ${DATE2} - ${DATE1} ))
15 
16     #计算
17     if [[ $BYTES -eq 0 ]]
18     then
19         echo "0"
20     else
21        TPS_VALUE=$( awk -v x1="$BYTES" -v y1="$DATES"  'BEGIN{printf "%.2f\n",(x1/1048576)/y1}')
22     fi
23     echo ${TPS_VALUE}
24     echo "$(date +%Y-%m-%d-%H-%M-%S) :: ${TPS_VALUE}" >> /usr/local/zabbix/scrip_log/mongo_tps_${R_MON}.txt 2>&1
25 }
26 
27 case $R_MON in
28     read_bytes)
29         disk_tps "$R_MON"
30         ;;
31     write_bytes)
32         disk_tps "$R_MON"
33         ;;
34              *)
35         echo $"USAGE:$0 {read_bytes|write_bytes}"
36 esac

 

2 用法说明

(1)脚本用法

echo 'UserParameter=disk_totals[*],/bin/bash /usr/local/zabbix/scrip/disk_totals.sh "$1"' >> /usr/local/zabbix/etc/zabbix_agentd.conf.d/userparameter_disk_pid.conf

 

(2)加载zabbix,添加监控项就可以使用了