Проверка "Порог доступных резервных блоков" и "Temperature Sensor"

  1. Download

    check_AvailableSpareThreshold_TemperatureSensor.sh

    wget -P /root https://eas1804.github.io/Proxmox/sh/check_AvailableSpareThreshold_TemperatureSensor.sh

    chmod +x /root/check_AvailableSpareThreshold_TemperatureSensor.sh

    Задать e-mail в скрипте!

    check_AvailableSpareThreshold_TemperatureSensor.service

    wget -P /etc/systemd/system/ https://eas1804.github.io/Proxmox/sh/check_AvailableSpareThreshold_TemperatureSensor.service

    check_AvailableSpareThreshold_TemperatureSensor.timer

    wget -P /etc/systemd/system/ https://eas1804.github.io/Proxmox/sh/check_AvailableSpareThreshold_TemperatureSensor.timer

  2. systemctl
    systemctl  daemon-reload
    systemctl  start check_AvailableSpareThreshold_TemperatureSensor.service
    systemctl  start check_AvailableSpareThreshold_TemperatureSensor.timer
    systemctl  enable  check_AvailableSpareThreshold_TemperatureSensor.timer
    
  • cat /root/check_AvailableSpareThreshold_TemperatureSensor.sh
    #!/bin/bash
    clear
    
    # Порог для Available Spare Threshold - Порог доступных резервных блоков выше
    THRESHOLD_LIMIT=60
    # Порог для Temperature Sensor (°C)
    TEMPERATURE_LIMIT=80
    
    LOGFILE="/var/log/Threshold.log"
    exec > >(tee  "$LOGFILE") 2>&1
    
    date
    IP=$(ip -4 addr show vmbr0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
    HOSTNAME=$(hostname)
    MAIL_TO=admin@srv.com
    
    fun_info () {
        echo -----------------
        echo $DEV
    
        smartctl -a $DEV | grep test
        smartctl -a $DEV | grep Spare
        echo "Available Spare - Доступные резервные блоки.  Available Spare Threshold - Порог доступных резервных блоков"
    
        # Вытаскиваем значение Available Spare Threshold
        THRESHOLD=$(smartctl -a $DEV | grep "Available Spare Threshold" | awk -F'[:%]+' '{print $2}' | tr -d ' ')
        if [[ -n "$THRESHOLD" ]]; then
            if (( THRESHOLD > THRESHOLD_LIMIT )); then
                echo "⚠️ Available Spare Threshold - Порог доступных резервных блоков выше ${THRESHOLD_LIMIT}% (текущее значение: ${THRESHOLD}%)"
                mutt -s "!!!Available Spare Threshold (Порог доступных резервных блоков) в $DEV  ip:$IP. ${HOSTNAME}" -- ${MAIL_TO} < ${LOGFILE}
            else
                echo "✅ Available Spare Threshold - Порог доступных резервных блоков в норме (текущее значение: ${THRESHOLD}%)"
            fi
        else
            echo "❓ Не удалось определить значение Available Spare Threshold"
        fi
    
    # Находим максимальную температуру среди всех сенсоров
    TEMPERATURE=$(smartctl -a $DEV | grep "Temperature Sensor" | awk '{print $(NF-1)}' | sort -nr | head -n1)
    
    
        if [[ -n "$TEMPERATURE" ]]; then
            if (( TEMPERATURE > TEMPERATURE_LIMIT )); then
                echo "⚠️ Temperature Sensor ${TEMPERATURE}  выше ${TEMPERATURE_LIMIT}°C (текущее значение: ${TEMPERATURE}°C)"
                mutt -s "!!!Temperature Sensor ${TEMPERATURE} °C  выше ${TEMPERATURE_LIMIT}°C  $DEV ip:$IP. ${HOSTNAME}" -- ${MAIL_TO} < ${LOGFILE}
            else
                echo "✅ Temperature Sensor в норме (текущее значение: ${TEMPERATURE}°C)"
            fi
        else
            echo "❓ Не удалось определить значение Temperature Sensor"
        fi
    
        smartctl -a $DEV | grep Sensor
        smartctl -a $DEV | grep "Percentage Used"
        echo "Percentage Used - сколько процентов от расчетного ресурса накопителя уже использовано"
        smartctl -a $DEV | grep Hours
    }
    
    DEV=/dev/nvme0n1
    fun_info
    DEV=/dev/nvme1n1
    fun_info
    DEV=/dev/nvme2n1
    fun_info
    
    # Отправить лог по вторникам
    # Получаем номер дня недели: 2 — вторник (1 — понедельник, 7 — воскресенье)
    DOW=$(date +%u)
    
    if [[ "$DOW" -eq 2 ]]; then
        echo "Вторник. Высылаю отчет на ${MAIL_TO} "
    mutt -s "NVME is OK. ${IP}, ${HOSTNAME}" -- "${MAIL_TO}" < "${LOGFILE}"
    else
        echo "Другой день. Отчет не высылаю"
    fi
    
    
  • cat /etc/systemd/system/check_AvailableSpareThreshold_TemperatureSensor.service
    [Unit]
    Description=check_AvailableSpareThreshold_TemperatureSensor
    After=network.target
    
    [Service]
    Type=oneshot
    ExecStart=/root/check_AvailableSpareThreshold_TemperatureSensor.sh
    WorkingDirectory=/root
    Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
    
    [Install]
    WantedBy=multi-user.target
    
  • cat /etc/systemd/system/check_AvailableSpareThreshold_TemperatureSensor.timer
    [Unit]
    Description=check_AvailableSpareThreshold_TemperatureSensor
    [Timer]
    OnBootSec=5min
    OnCalendar=*-*-* 11:50:00
    [Install]
    WantedBy=timers.target