zabbix监控脚本01-磁盘监控一
1 基础说明
(1)配合的监控工具 zabbix,被监控端操作系统版本信息
操作系统:CentOS Linux release 7.4.1708 (Core)
内核版本:3.10.0-693.el7.x86_64
(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,添加监控项就可以使用了