1. 程式人生 > >Zabbix自定義監控項--利用dd測試硬碟讀寫速度

Zabbix自定義監控項--利用dd測試硬碟讀寫速度

      Zabbix作為強大的伺服器監控平臺,本次利用它來檢測伺服器中各個硬碟的讀寫速度,以便能在硬碟效能下降能夠即使更換,不影響工作效率。

1、dd命令使用

    利用Linux自帶的dd命令來測試硬碟的讀寫速度,關於dd命令的詳解可網上查詢,很多資料,下面給出dd測試的用法。

(1)兩個特殊的裝置

    /dev/null:回收站、無底洞

    /dev/zero:產生字元

(2)硬碟讀寫速度檢測

sudo dd if=/dev/sdb1 of=/ssd1/test.iso bs=1024k count=500 conv=fdatasync iflag=direct (同時讀寫速度)
sudo dd if=/dev/zero of=/ssd1/test.iso bs=1024k count=500 conv=fdatasync (寫速度)
sudo dd if=/dev/sdb1 of=/dev/null bs=8k iflag=direct (讀速度)
  • if=/dev/zero:用來設定dd命令讀取的輸入檔名。
  • of=/ssd1/test.iso:dd命令寫入的檔名稱(寫入ssd1,則測量ssd1的寫入速度)。
  • bs=1024k:設定dd命令讀取的塊的大小。例子中為1024k
  • count=500 :dd命令讀取的塊的個數。 

本次用的是同時讀寫速度,足以反映硬碟效能。


2、編寫硬碟檢測指令碼zb_disk_discovery

    要批量測試伺服器的所有硬碟,則必須自動檢測伺服器中有哪些硬碟,指令碼用shell編寫,命名為zb_disk_discovery
#!/bin/sh
  
disks=$(ls -d /disk* /ssd* /hdd* /home 2>/dev/null)
for dsk in ${disks}
do
    size=$(df ${dsk} | grep -v "Filesystem" | awk '{print $2}')
    if [ $size -gt 134217728 ];then
        new_disk2="${dsk} "${new_disk2}
    fi
done

disks=${new_disk2}

if [[ $* =~ "--json" ]];then
    echo ${disks} | awk 'BEGIN {printf("{\n\t\"data\":[\n");}   END{for(i=1; i<NF; i++) printf("\t\t{ \"{#DISKNAME}\":\"%s\"},\n", $i); printf("\t\t{ \"{#DISKNAME}\":\"%s\"}\n", $NF); printf("\t]\n}\n");}'
elif [[ $* =~ "-n" ]];then
    echo ${disks} | wc -w
else
    echo ${disks}
fi

    將指令碼放在PATH中,執行結果如下:


3、編寫自動測試硬碟速度的指令碼--zb_disk_iotest

    發現了硬碟後,再編寫一個自動測試硬碟讀寫速度的指令碼,用shell編寫,命名為zb_disk_iotest
#!/bin/bash

DISK="$1"
DISK_MOUNT=""
DISK_SPEED=""
DISK_SPEED_UNIT=""
DISK_AVAIL=""
OUTPUT_FILE="/tmp/${DISK}_iotest"

if [ ! -d $DISK ] || [ -z $DISK ] ; then
    echo "the disk isn't exist !"
    exit 1
fi

DISK_AVAIL="$(df  $DISK | grep -v "Filesystem" | awk '{print $4}')"
DISK_AVAIL="$(expr $DISK_AVAIL / 1024 / 1024)"

if [ $DISK_AVAIL -lt 1 ]; then
    echo "disk is full!" 
    exit 1
fi

DISK_MOUNT="$(df $DISK | grep -v 'Filesystem' | cut -d ' ' -f 1)"
sudo dd if=$DISK_MOUNT of=$DISK/test.iso bs=1024k count=500 conv=fdatasync iflag=direct > /dev/null 2> $OUTPUT_FILE
DISK_SPEED="$(cat $OUTPUT_FILE | tail -n 1 | cut -d ' ' -f 8)"
DISK_SPEED_UNIT="$(cat $OUTPUT_FILE | tail -n 1 | cut -d ' ' -f 9)"

if [[ $DISK_SPEED_UNIT = 'GB/s' ]]; then
    DISK_SPEED="$(expr $DISK_SPEED \* 1024)"
elif [[ $DISK_SPEED_UNIT = 'kB/s' ]] ; then
    DISK_SPEED="$(expr $DISK_SPEED / 1024)"
fi

sudo rm $OUTPUT_FILE -rf
sudo rm /$DISK/test.iso -rf
echo $DISK_SPEED
    執行結果如下,可看出ssd1硬碟的讀寫速度為185MB/s

4、Zabbix配置

    前提是zabbix已安裝好哦~

(1)配置檔案一般放在/etc/zabbix/zabbix_agentd.d/下:編輯/etc/zabbix/zabbix_agentd.d/disk_manager.conf:

UserParameter=cvt.disk.discovery,zb_disk_discovery --json
UserParameter=cvt.disk.info.iospeed[*],zb_disk_iotest $1

(2)配置Zabbix等待時間

    由於硬碟讀寫速度檢測與時間掛鉤,而Zabbix預設響應時間為3s,超過3s的話,會預設讀取失敗,因此需要將Zabbix等待時間修改為最長--30s。普通伺服器和zabbix伺服器都需要修改!!!

vim /etc/zabbix/zabbix_agentd.conf (此為普通伺服器的zabbix服務)
### Option: Timeout
#       Spend no more than Timeout seconds on processing
#
# Mandatory: no
# Range: 1-30
# Default:
Timeout=30
sudo vim /etc/zabbix/zabbix_server.conf (此為Zabbix伺服器,具體看你安裝在哪)
#
# Mandatory: no
# Range: 1-30
# Default:
# Timeout=3
Timeout=30

(3)為Zabbix新增sudo許可權

    由於指令碼設計sudo(管理員許可權),因此需要為Zabbix伺服器上的Zabbix使用者配置管理員許可權:通過配置/etc/sudoers實現。

sudo vim /etc/sudoers
#includedir /etc/sudoers.d
zabbix ALL=NOPASSWD: ALL

(4)重啟Zabbix服務

sudo service zabbix-agent restart

(5)測試


zabbix_get -s 172.17.84.247 -p 10050 -k "cvt.disk.info.iospeed[/ssd1]"

可看到結果正常,到此Zabbix配置完畢,剩下的就是去Zabbix網頁新增監控項了。

5、新增Zabbix監控項

    在此給出配置截圖,詳情自己瞭解:

(1)配置zb_disk_discovery


(2)配置zb_disk_iotest


搞定!

6、結果展示