check_smart Nagios调试脚本

时间:2018-10-15 13:09:38

标签: bash nagios

用于SMART状态输出的调试脚本。

我只能在状态为OK的磁盘上对其进行测试。

我想检验一下论点:

smartctl -H /dev/$disk

因为没有失败,并且脚本没有说明验证失败,所以我总是获得OK状态。

if [[ $ERRORS != 0 ]]; then
    echo "CRITICAL: $FAILURES"
    exit 2

对于要测试的磁盘,我需要在命令中添加标志,以使其在被测试的服务器上正确执行。

在外壳中:

smartctl -H /dev/vda -d scsi -T permissive

要测试该命令是否需要额外的标志,我需要更改脚本,然后RESULT应验证1 OK状态。

#!/bin/bash

parse() {
    egrep '^(SMART STATUS RETURN:|SMART overall-health self-assessment test result:)'
}

# Validate that 2 status lines are returned by parse
#FIXME: Find a way to read stdin into a variable
validate() {
    STATUS=$(cat)
    LINES=$(echo $STATUS | wc -l)
    if [[ $LINES == 2 ]]; then
        echo "$STATUS"
    else
        echo "Wrong status output returned"
    fi
}

verify() {
    egrep -v '(SMART overall-health self-assessment test result: PASSED|SMART STATUS RETURN: incomplete response, ATA output registers missing)'
}

DISKS=$(lsblk -nio KNAME,TYPE | grep disk | awk '{print $1}')
# From util-linux 2.23 (RHEL7) we can also use
#DISKS=$(lsblk -Snio KNAME)

ERRORS=0
FAILURES=""

for disk in $DISKS; do
    RESULT=$(smartctl -H /dev/$disk | parse | verify)
    if [[ -n $RESULT ]]; then
        FAILURES+=$disk
        ERRORS=1
    fi
done

if [[ $ERRORS != 0 ]]; then
    echo "CRITICAL: $FAILURES"
    exit 2
else
    echo "OK"
    exit 0
fi

0 个答案:

没有答案