Команда df для одного сценария awk

Необходим сценарий для получения общего свободного пространства, использования, процента использования, порогового значения состояния диска "КРИТИЧЕСКИЙ", "ПРЕДУПРЕЖДЕНИЕ" и "ОК" на двух разных серверах, каждый из которых специально фильтровал только две файловые системы каждая; сервер1 /dev/md10, /dev/md11 и сервер2 /dev/md12, /dev/md13.

вывод df с сервера1:

Filesystem                                                1K-blocks         Used   Available Use% Mounted on
rootfs                                                     52403200      4965112    47438088  10% /
/dev/sda3                                                 229393988      8134836   221259152   4% /scratch
/dev/drbd0                                                194767012     26942356   167824656  14% /Containers
/dev/md11                                              187396112384 169024117776 18371994608  91% /sic001c2
/dev/md10                                              187396112384  91319318884 96076793500  49% /sic001c1

вывод df с сервера2:

Filesystem                                                1K-blocks         Used   Available Use% Mounted on
rootfs                                                     52403200      4900936    47502264  10% /
/dev/sda3                                                 229393988      8487936   220906052   4% /scratch
/dev/drbd0                                                194767012     26942356   167824656  14% /Containers
/dev/md12                                              187396112384 169096078544 18300033840  91% /sic001c3
/dev/md13                                              187396112384 169570140196 17825972188  91% /sic001c4

Вот ссылка на скрипт @tripleee

#!/bin/bash
# use a loop to reduce duplication of ssh options etc
while read -r server mounts; do
    ssh "$server" df -m --no-sync "$mounts"
done <<\____SERVER__MOUNTS |
    server1 /dev/md10 /dev/md11
    server2 /dev/md12 /dev/md13
____SERVER__MOUNTS
# sed -e /^Filesystem/d inlined into Awk below
sort |
# pipe into awk
awk 'BEGIN { print "UDS:\nserver1 & server2"
        # Maybe use printf here too
        print "Mounted on         Free space   Disk usage   Use%   Disk state"
    }
    ! /^Filesystem/ {
        # Awk conveniently ignores any trailing string
        # so you can compare 95% to 95 numerically
        if ($5 > 95) status="  CRITICAL"
        else if ($5 > 90) status="  WARNING"
        else status="OK"

        printf "%-20s %8s %12s %6s %4s\n", $6, $4, $3, $5, status

        # EdmCoff''s hack, too lazy to change to legible variable names
        # adapted to defer division until we know the final value of n
        free+=$4;usage+=$3;use+=$5;n++
    }
    END { printf "\n%-16s %12s %12s %5s%%\n",
     "Total", free, usage, use/n }'

Текущий вывод из скрипта:

UDS:
server1 & server2
Mounted on         Free space   Disk usage   Use%   Disk state
/sic001c1          93824552     89179465    49%   OK
/sic001c2          17913453    165090564    91%   WARNING

Grand total         111738005    254270029    70%

Ничего плохого в скрипте у них просто отлично работает. Единственным заметным является то, что server2 - выходной результат не показан. Я изменил строки 6 и 7, чтобы найти оба устройства на обоих серверах, используя звездочку (*), результат вывода одинаков (как показано выше). Также, чтобы добавить, мне нужно общее пороговое значение состояния диска и процент использования, чтобы округлить, я действительно не знаю, что и как собрать это вместе.

Результат вывода должен:

UDS:
server1 & server2
Mounted on         Free space   Disk usage   Use%   Disk state
/sic001c1            93824552     89179465    49%   OK
/sic001c2            17913453    165090564    91%   WARNING
/sic001c3            17821802    165182215    91%   WARNING 
/sic001c4            17361175    165642842    91%   WARNING
---------------------------------------------------------------
Total               146920982    585095086    81%   OK

0 ответов

Другие вопросы по тегам