Мониторинг RAID с помощью conky


Все знают, что conky - это такой модный виджет на рабочий стол, в котором бегают
разные числа, полоски, часики, стрелочки. Однако конфиги по умолчанию, которые
идут в составе разных систем, в общем-то бесполезны. Сидеть и таращиться в 
загрузку CPU, объем HDD и скорость передачи данных интересно только нубам.

Однако conky может принести гораздо больше пользы, если настроить его для
мониторинга реально важных и полезных вещей, таких как целостность RAID,
доступность разных сетевых ресурсов и т.д. Делается это не так уж сложно, 
а главное - большая часть ненужностей просто выкидывается и остаётся 
только сплошная польза.

Конфиг-файлов будет несколько - главный .conkyrc и вспомогательные модули -
которые фактически, представляют собой датчики, сообщающие о тех или иных
неисправностях. В моем случае я буду мониторить два RAID-массива, созданные
через mdadm/btrfs, и парочку сетевых ресурсов - "интернет" и ближайший шлюз.


-- .conkyrc
conky.config = {
    alignment = 'top_right',
    update_interval = 3,
    double_buffer = true,
    background = false,
    border_width = 1,
    cpu_avg_samples = 2,
    default_color = 'green',
    default_outline_color = 'white',
    default_shade_color = 'white',
    draw_borders = false,
    draw_graph_borders = true,
    draw_outline = false,
    draw_shades = false,
    use_xft = true,
    font = 'Terminus:size=8',
    gap_x = 5,
    gap_y = 10,
    minimum_height = 5,
    minimum_width = 500,
    net_avg_samples = 2,
    out_to_console = false,
    out_to_ncurses = false,
    out_to_stderr = false,
    out_to_x = true,
    extra_newline = false,
    own_window = true,
    own_window_transparent = true,
    own_window_class = 'Conky',
    own_window_type = 'normal',
    own_window_hints = 'undecorated,below,sticky,skip_taskbar,skip_pager',
    stippled_borders = 0,
    uppercase = false,
    use_spacer = 'none',
    show_graph_scale = false,
    show_graph_range = false
}

conky.text = [[
$nodename - $sysname $kernel on $machine / ${time}
${color black}$hr
${color grey}Uptime:$color $uptime
${color grey}Task:$color $processes  ${color grey}Running:$color $running_processes \
${color grey}Net: Up:$color ${upspeed br0} ${color grey} - Down:$color ${downspeed br0}
${color grey}RAM:$color $mem/$memmax - $memperc% ${membar 4}
${color grey}Swap:$color $swap/$swapmax - $swapperc% ${swapbar 4}
${color grey}CPU:$color $cpu% ${cpubar 4}
${color black}$hr
${color red}/ $color${fs_used /}/${fs_size /} ${fs_bar 6 /}
${color red}/main $color${fs_used /main}/${fs_size /main} ${fs_bar 6 /main}
${color red}/bigdata $color${fs_used /bigdata}/${fs_size /bigdata} ${fs_bar 6 /bigdata}
${color black}$hr
${color red}/ (ssd) $color System \
${color red}/main (mdadm-mirror) $color${execi 600 gawk -f .conky/mdstatus.awk /proc/mdstat} \
${color red}/bigdata (btrfs-raid5) $color${execi 600 sudo btrfs fi show | gawk -f .conky/btrfs.awk}
${color black}$hr
${color cyan}inet: $color${execi 600 ping -c1 -W0.5 -q rbc.ru 2>&1 | gawk -f .conky/inet.awk} \
${color cyan}gate: $color${execi 600 ping -c1 -W0.2 -q gate.loc 2>&1 | gawk -f .conky/gate.loc.awk} \
]]

#!/bin/gawk -f
# This script '.conky/mdstatus.awk' checks /proc/mdstat

/_/ { state = "Disk ERROR!"; exit }
/blocks/ { state = "Disk OK!" }

END { print state }

#!/bin/gawk -f
# This script '.conky/btrfs.awk' checks BTRFS

/missing/ { state = "Disk ERROR!"; exit }
/3 FS/ { state = "Disk OK!" }

END { print state }

#!/bin/gawk -f
# This script '.conky/inet.awk' checks host gate.loc

BEGIN { state = "Inet OFF!" }

/ 0% packet loss/ { state = "Inet ON!" }

END { print state }

#!/bin/gawk -f
# This script '.conky/gate.loc.awk' checks host gate.loc

BEGIN { state = "Gate OFF!" }

/ 0% packet loss/ { state = "Gate ON!" }

END { print state }

Поскольку имеется возможность выполнять внешние скрипты - мониторить 
из conky можно все что угодно, причём задавая разные интервалы проверки,
и получая ответы не только "Да/Нет", но, возможно, и более расширенные 
такие как "Статус, Состояние, Нагрузка, Внешние подключения", а также 
мониторить состояние стандартных программ, своих приложений, сервисов,
сайтов.

Конечно, conky - это локальный монитор и всё в нём удобно только на
собственном десктопе. Не нужно каждый раз запускать кучу команд для
проверок, если самая главная информация всегда перед глазами. Для 
реального серверного мониторинга (где зачастую есть только консоль)
нужны специализированные средства, такие как zabbix (или хотя бы monit).
Эти приложения уже заточены на большинство серверных проверок, имеют
хорошую систему уведомлений, позволяют вести и анализировать историю.

#