check_smart скрипт отладки Nagios - PullRequest
       8

check_smart скрипт отладки Nagios

0 голосов
/ 15 октября 2018

Сценарий отладки для вывода состояния SMART.

Я могу проверить его только на диске, который имеет статус OK.

Я хочу проверить аргумент:

smartctl -H /dev/$disk

Поскольку сбоев нет и скрипт не учитывает проверку сбоев, я всегда получаю ОКstatus.

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
...