Компонент Watchdog (мониторинг системы)
Примечание: Watchdog is only available in Plesk for Linux, and is not available on Red Hat Enterprise Linux 9, AlmaLinux 9, Debian 11, and Ubuntu 20.04 and later.
Компонент Мониторинг системы (Watchdog) обеспечивает защиту вашего сервера от вредоносных программ, стабильную работу всех служб и достаточный объем свободного дискового пространства на сервере.
Watchdog может следить за работой следующих служб:
- Веб-сервер Plesk
- Обработчик PHP в Plesk
- Веб-сервер (Apache)
- Сервер SMTP (Postfix)
- Сервер SMTP (QMail)
- Сервер Courier POP3
- Сервер Courier POP3 с поддержкой SSL/TLS
- Сервер Courier IMAP
- Сервер Courier IMAP с поддержкой SSL/TLS
- Программа идентификации Courier
- IMAP- и POP3-сервер Dovecot
- Сервер DNS (BIND)
- Tomcat
- MySQL
- PostgreSQL
- Plesk SpamAssassin
- Plesk Premium Antivirus
- Антивирус Касперского
- Почтовый фильтр Plesk Postfix
- Веб-прокси-сервер (Nginx)
- PHP-FPM (FastCGI Process Manager)
- Отслеживание ошибок аутентификации Fail2Ban
Это расширение может запускать, останавливать, перезапускать службы и выполнять определенные действия в зависимости от стабильности службы в течение некоторого периода времени.
Оно может запускать другие утилиты и сообщать вам о том, что на диске закончилось место.
Для наблюдения за службами и использованием дискового пространства Watchdog использует утилиту monit.
Расширение Watchdog может сканировать файловую систему сервера на наличие руткитов, бэкдоров, эксплойтов и других вредоносных программ по требованию или по расписанию. Оно может сообщить вам результаты сканирования по электронной почте и показать отчеты в панели управления. Перед каждым сканированием оно обновляет свою базу знаний.
Для сканирования сервера на наличие вредоносных программ Watchdog использует утилиту Rootkit Hunter.
Watchdog linux что это
Guido нравится Linux за возможность изучать работу компьютеров. Linux из-за своей открытости позволяет проводить такие исследования.
Перевод на Русский:
Gleba
- Что же это за устройство мониторинга (watchdog)?
- Использование мониторинга
- Аппаратная часть
- Принцип работы
- Программное обеспечение
- Тестирование
- Подключение устройства
- Заключение
- Ссылки
- Страница отзывов
Устройство мониторинга сервера «watchdog»
- Кнопка выключения сервера
- Устройство мониторинга состояния сервера
Что же это за устройство мониторинга (watchdog)?
Устройство мониторинга, ( оригинальное и более распространенное название watchdog — по-русски «сторожевой пес»), это такая штука, которая постоянно контролирует состояние системы и проверяет ее работоспособность. Нечто подобное установлено на зонде Mars Pathfinder (ведь никто не собирался отправлять на марс вместе с роботом человека, чтобы периодически перезагружать систему когда она зависнет) и на некоторых особо дорогостоящих серверах.
Принцип абсолютно простой — периодически система должна откликаться на посылаемые запросы, тем самым, подтверждая свою работоспособность. В случае если система перестает откликаться, она в принудительном порядке перезагружается.
Но тогда встает следующий вопрос: зачем тогда слежение за компьютером, если Linux до такой степени надежный и стабильный? Ответ так же прост — чтобы сделать его еще более надежным и стабильным. Всегда остается человеческий фактор, с которым всегда приходится считаться. Ведь если сервер в течении года работает без сбоев обслуживающий персонал и не знает о его существовании. И в случае поломки первый вопрос будет: «Где он находится?». А как насчет того что сервер полетел под новый год, когда все уже разбежались отмечать? В подобных случаях дополнительный мониторинг придется как нельзя кстати!
Да, подобное устройство мониторинга не решит всех проблем и не защитит от поломок железа, а если вы решили укомплектовать ваш сервер мониторингом, то вам также следует позаботиться и о дополнительном пространстве (имеется ввиду пространство для достаточной вентиляции помещения ).
Использование мониторинга
Нечто подобное поможет вам контролировать ресурсы сети, использование свопа и дискового пространства.
#!/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin
export PATH
#
# Мониторинг дискового пространства
# —————-
# проверяет диск на 80% заполненность.
# (crontab автоматически отправляет e-mail если скрипт
# выполнен)
df | egrep ‘ (8.%|9.%|100%) ‘
#
# Мониторинг свопа
# Обычно сервер не имеет свопа. Иначе
# своп должен быть строго фиксированным
# —————-
# Сообщает о заполнении свопа больше чем на 6 Mb
swpfree=`free | awk ‘/Swap:/< print $3 >‘`
if expr $swpfree \> 6000 > /dev/null ; then
echo «$0 warning! использование свопа составляет $swpfree»
echo » «
free
echo » «
ps auxw
fi
#
# Мониторинг сети
# ——————-
# Ваш IP или имя компьютера:
hostn=»linuxbox.your.supercomputer»
#
if ping -w 5 -qn -c 1 $hostn > /dev/null ; then
# ok host is up
echo «0» > /etc/pingfail
else
# подсчет не отвеченных запросов ping
if [ -r /etc/pingfail ]; then
pingfail=`cat /etc/pingfail`
else
# в случае отсутствия файла pingfail
# окончание программы
exit 0
fi
pingfail=`expr «$pingfail» «+» 1`
echo «$pingfail ping failures»
echo «$pingfail» > /etc/pingfail
if [ $pingfail -gt 10 ]; then
echo «не отвечено на более чем 10 запросов. Перезагрузка. «
/sbin/shutdown -t2 -r now
fi
fi
# — конец скрипта —
Можно использовать этот скрипт вместе с crontab так что он будет запускаться каждые 15 минут:
Аппаратная часть
Стандартных реле не бывает. У каждого производителя свои модели. Для нас существенно сопротивление катушки реле. Ниже представлены две схемы, одна с реле на 5V, 500 Oм, а вторая на 5V, 120 Oм. При покупке поинтересуйтесь сопротивлением катушки реле или просто измерьте его омметром. Кликните на картинку чтобы увеличить.
Кнопка выключения замыкает при нажатии RTS и CD. На схеме она выглядит несколько странно, но в Eagle других символов нет.
Я не привожу список необходимого оборудования. Все что будет необходимо купить есть на схеме, только не забудьте разъем DB9 для последовательного порта. Диоды подойдут любые, например 1N4148. Лично я считаю что лучше установить реле на 500 Oм, тогда вам не понадобятся R4 и конденсатор на 2000мкФ (или 2200мкФ). А для С1 можно использовать конденсатор меньшего номинала (1000мкФ).
Принцип работы
Схема построена на таймера NE555. Микросхема представляет из себя два компаратора, RS-триггер и делитель из 3 резисторов 5 кOм, задающий пороги срабатывания компараторов. Всякий раз, когда на ножке 6 (threshold) напряжение поднимается выше 2/3, выход RS-триггера переключается в состояние «1».
Теперь рассмотрим нашу схему. Выход RTS последовательного порта используется как источник питания нашей схемы. Уровни напряжений в канале RS232 составляют +/-10V, и поэтому нам понадобится диод перед конденсатором С1. Конденсатор C1 заряжается очень быстро и выступает в качестве аккумулятора энергии для последующего кратковременного включения реле. Конденсатор C2 медленно заряжается через резистор ( 4.7 MОм ). Транзистор Т1, управляемый по линии DTR последовательного порта, разряжает конденсатор C2.В случае пропадания сигнала, из-за того что компьютер подвис, конденсатор медленно ( примерно в течении 40 сек. ) начнет заряжаться до 2/3 питающего напряжения, после чего RS-триггер перейдет в состояние «1».
Цепь С1, R2, светодиод и реле должна быть рассчитана таким образом, чтобы реле включалось кратковременно и только за счет энергии запасенной на конденсаторе С1. Нам необходимо чтобы «кнопка сброса» была «нажата» пару секунд.
Светодиод должен гореть до полной перезагрузки компьютера.
На схеме также изображена кнопка выключения компьютера подключенная к линии CD последовательного порта. Если удерживать ее около 15 секунд, будет выполнена команда «shutdown -h now», которая и выключит сервер. Она не имеет ничего общего с мониторингом и предназначена исключительно для обслуживания компьютера.
Программное обеспечение
Драйвер представляет собой небольшую программу на С, которую можно запускать из /etc/init.d/. Она включит сигнал на линии RTS RS232, после чего начнет периодически ( каждые 12 сек. ) посылать импульсы по линии DTR (таймаут составляет 40 секунд). При нормальном выключении компьютера программа отключит RTS и передаст последний импульс на DTR. В результате конденсатор цепи питания С1 к моменту истечения таймаута полностью разрядится, исключая возможность принудительной перезагрузки. Для установки программы, распакуйте файл linuxwd-0.3.tar.gz и наберите
После этого скопируйте исполняемый файл linuxwd в /usr/sbin/linuxwd. Подправьте созданный linuxwd_rc скрипт (для redhat/mandrake, или linuxwd_rc_anydist для любого другого), укажите порт, к которому подключено наше устройство (ttyS1=COM2 или ttyS0=COM1). Скопируйте скрипт в
/etc/rc3.d/S21linuxwd
и
/etc/rc5.d/S21linuxwd
Тестирование
После того как вы все распаяли, проверьте систему на работоспособность перед тем как подключить ее к компьютеру. Подключите вывод, который будет позже подключен к линии RTS последовательного порта, на 40-50 секунд к блоку питания на 9-10V DC. Вы должны услышать щелчок при включении реле и должен загореться светодиод. Затем реле должно выключиться, а светодиод продолжать гореть до тех пор пока вы не подадите +10V на вывод, который будет позже подключен к линии DTR последовательного порта.
После того как вы все проверили, подсоедините все это к компьютеру. Программа linuxwd имеет режим тестирования, в этом режиме она может выводит данные на экран и останавливаться на время после выдачи импульса в линию DTR для эмулирования подвисания системы. Выполните команду:
linuxwd -t /dev/ttyS0
для запуска linuxwd в режиме теста (если оборудование подключено к COM2, укажите /dev/ttyS1).
Подключение устройства
Интерфейс RS232 имеет следующую распайку:
Нумерация 9-ти контактного разъема ( вилка ) на корпусе компьютера.
| 9-конт. | 25-конт. | Название | Направление | Описание |
|---|---|---|---|---|
| 1 | 8 | CD | вход | Детектор принимаемого сигнала |
| 2 | 3 | RXD | вход | Принимаемые данные |
| 3 | 2 | TXD | выход | Передаваемые данные |
| 4 | 20 | DTR | выход | Приемник готов |
| 5 | 7 | GND | — | Сигнальное заземление |
| 6 | 6 | DSR | вход | Передатчик готов |
| 7 | 4 | RTS | выход | Запрос передачи |
| 8 | 5 | CTS | вход | Готов к передаче |
| 9 | 22 | RI | ввод | Индикатор вызова |
Разъем RS232 устройства подключается непосредственно к последовательному порту компьютера. Для подключения кнопки сброса к реле, найдите провода от кнопки сброса компьютера и подключите реле параллельно.
Заключение
Подобная система мониторинга состояния системы не дает 100-процентную гарантию защиты вашей системы. Возможны нюансы, связанные с проверкой файловой системы после аварийного сбоя. Новые журналируемые файловые системы возможно и не будут иметь с этим проблем, но я с ними не экспериментировал. А устройство, которое предстаавлено здесь, это несложная и недорогая альтернатива аналогичным коммерческим продуктам.
Ссылки
- Программное обеспечение linuxwd : software download page
- Описание NE555 NE555.pdf 140K
Страница отзывов
У каждой заметки есть страница отзывов. На этой странице вы можете оставить свой комментарий или просмотреть комментарии других читателей :
| Webpages maintained by the LinuxFocus Editor team © Guido Socher, FDL LinuxFocus.org | Translation information: |
| en —> — : Guido Socher ( homepage ) |
| en —> ru: Gleba |
2002-12-03, generated by lfparser version 2.31
Watchdog (сторожевой таймер) в Linux
Watchdog (сторожевой таймер) — аппаратно реализованная схема контроля над зависанием системы.
Сторожевые таймеры используются в системах, которые должны работать без надзора человека. Такие системы должны быть само восстанавливающимися без участия оператора.
В контроллерах JetHome JetHub на базе процессоров Amlogic поддерживается драйвер аппаратного watchdog meson_wdt .
Проверка устройств
При корректно запущенном модулей watchdog в системе /dev должны быть видны устройства /dev/watchdog и /dev/watchdog0 :
$ ls -l /dev/watchdog* crw-rw---- 1 root root 10, 130 2019-01-01 00:00 /dev/watchdog crw-rw---- 1 root root 10, 130 2019-01-01 00:00 /dev/watchdog0
Установка сервиса Watchdog
В прошивках начиная с версии Armbian 22.02 watchdog предустановлен, ручная установка не требуется.
Для установки сервиса watchdog выполните следующие команды:
sudo apt-get update sudo apt-get install watchdog
Создайте папку для лог-файлов watchdog:
sudo mkdir -p /var/log/watchdog
Проверьте настройки для сервиса в файле /etc/default/watchdog :
# Start watchdog at boot time? 0 or 1 run_watchdog=1 # Start wd_keepalive after stopping watchdog? 0 or 1 run_wd_keepalive=1 # Load module before starting watchdog watchdog_module="none" # Specify additional watchdog options here (see manpage). watchdog_options="-s -v -c /etc/watchdog.conf"
Конфигурационные файлы
Внесите необходимые изменения в конфигурационный файл /etc/watchdog.conf :
- Раскомментируйте использование устройства /dev/watchdog (иначе сервис watchdog не будет использовать аппаратный таймер для перезагрузки контроллера).
- Установите необходимые проверки и таймауты.
Ниже приведен пример конфигурационного файла, с установленным таймаутом 15 секунд на зависание:
Примечание
Значение watchdog-timeout определяет через какое время после аварии сервиса watchdog аппаратный таймер перезагрузит контроллер.
$ cat /etc/watchdog.conf #ping = 172.31.14.1 #ping = 172.26.1.255 #interface = eth0 #file = /var/log/messages #change = 1407 # Uncomment to enable test. Setting one of these values to '0' disables it. # These values will hopefully never reboot your machine during normal use # (if your machine is really hung, the loadavg will go much higher than 25) #max-load-1 = 24 #max-load-5 = 18 #max-load-15 = 12 # Note that this is the number of pages! # To get the real size, check how large the pagesize is on your machine. #min-memory = 1 #allocatable-memory = 1 #repair-binary = /usr/sbin/repair #repair-timeout = 60 #test-binary = #test-timeout = 60 # The retry-timeout and repair limit are used to handle errors in a more robust # manner. Errors must persist for longer than retry-timeout to action a repair # or reboot, and if repair-maximum attempts are made without the test passing a # reboot is initiated anyway. #retry-timeout = 60 #repair-maximum = 1 watchdog-device = /dev/watchdog # Defaults compiled into the binary #temperature-sensor = #max-temperature = 90 # Defaults compiled into the binary #admin = root #interval = 1 #logtick = 1 #log-dir = /var/log/watchdog # This greatly decreases the chance that watchdog won't be scheduled before # your machine is really loaded realtime = yes priority = 1 # Check if rsyslogd is still running by enabling the following line #pidfile = /var/run/rsyslogd.pid watchdog-timeout = 15
Автозапуск и проверка сервиса
Для включения автозапуска сервиса выполните следующие команды:
sudo systemctl enable watchdog sudo systemctl start watchdog
Проверка работоспособности сервиса:
service watchdog status
● watchdog.service - watchdog daemon Loaded: loaded (/lib/systemd/system/watchdog.service; enabled; vendor pres> Active: active (running) since Mon 2022-02-21 17:29:24 UTC; 17h ago Process: 2718 ExecStartPre=/bin/sh -c [ -z "$watchdog_module>" ] || [ "$w> Process: 2720 ExecStart=/bin/sh -c [ $run_watchdog != 1 ] || exec /usr/sbin> Main PID: 2722 (watchdog) Tasks: 1 (limit: 977) Memory: 516.0K CPU: 3min 33.528s CGroup: /system.slice/watchdog.service └─2722 /usr/sbin/watchdog -s -v -c /etc/watchdog.conf Feb 22 10:52:23 jethubj100 watchdog[2722]: still alive after 62076 interval(s) Feb 22 10:52:24 jethubj100 watchdog[2722]: still alive after 62077 interval(s) Feb 22 10:52:25 jethubj100 watchdog[2722]: still alive after 62078 interval(s) Feb 22 10:52:26 jethubj100 watchdog[2722]: still alive after 62079 interval(s) Feb 22 10:52:27 jethubj100 watchdog[2722]: still alive after 62080 interval(s) Feb 22 10:52:28 jethubj100 watchdog[2722]: still alive after 62081 interval(s) Feb 22 10:52:29 jethubj100 watchdog[2722]: still alive after 62082 interval(s)
Настроенный и запущенный сервис watchdog постоянно сбрасывает аппаратный сторожевой таймер.
Если он не сможет этого сделать (например, в случае если зависла система или наступило любое другое настроенное в конфигурации условие), таймер сработает и перезагрузит контроллер.
Проверка сторожевого таймера
Будьте осторожны: команды в этом разделе приводят к панике ядра и полной остановке работы контроллера.
Используйте их только в тестовой среде!
Следующая команда приводит к искусственному сбою ядра linux. Если watchdog работает правильно, то он автоматически перезагрузит систему после таймаута:
echo c > /proc/sysrq-trigger
[63168.053150] sysrq: Trigger a crash [63168.053204] Kernel panic - not syncing: sysrq triggered crash [63168.056648] CPU: 3 PID: 65544 Comm: bash Not tainted 5.15.24-meson64 #trunk.0045.jethome.0 [63168.064838] Hardware name: JetHome JetHub J100 (DT) [63168.069670] Call trace: [63168.072082] dump_backtrace+0x0/0x200 [63168.075706] show_stack+0x18/0x68 [63168.078982] dump_stack_lvl+0x68/0x84 [63168.082605] dump_stack+0x18/0x34 [63168.085882] panic+0x164/0x324 [63168.088901] sysrq_handle_crash+0x1c/0x20 [63168.092869] __handle_sysrq+0x8c/0x160 [63168.096577] write_sysrq_trigger+0x88/0x120 [63168.100719] proc_reg_write+0xac/0xf8 [63168.104340] vfs_write+0xbc/0x398 [63168.107618] ksys_write+0x68/0xf0 [63168.110895] __arm64_sys_write+0x1c/0x28 [63168.114776] invoke_syscall+0x44/0x108 [63168.118485] el0_svc_common.constprop.3+0x94/0xf8 [63168.123143] do_el0_svc+0x24/0x88 [63168.126420] el0_svc+0x20/0x50 [63168.129439] el0t_64_sync_handler+0x90/0xb8 [63168.133579] el0t_64_sync+0x180/0x184 [63168.137206] SMP: stopping secondary CPUs [63168.141091] Kernel Offset: disabled [63168.144533] CPU features: 0x00001001,00000846 [63168.148845] Memory Limit: none [63168.151871] ---[ end Kernel panic - not syncing: sysrq triggered crash ]--- AXG:BL1:d1dbf2:a4926f;FEAT:E0DC318C:2000;POC:F;EMMC:0;READ:0;0.0;CHK:0; sdio debug board detected TE: 33151
Пауза 15 секунд (в соответствии с значением watchdog_timeout в конфигурационном файле), далее:
BL2 Built : 10:43:22, May 26 2021. axg g28b9431 - jenkins@walle02-sh set vcck to 1100 mv set vddee to 950 mv Board ID = 9 CPU clk: 1200MHz DDR low power enabled DDR3 chl: Rank0 16bit @ 912MHz bist_test rank: 0 1b 02 34 24 0b 3d 17 00 2f 27 0e 40 00 00 00 00 00 00 00 00 00 00 00 00 761 - PASS Rank0: 1024MB(auto)-2T-13 AddrBus test pass! eMMC boot @ 0 sw8 s storage init finish emmc switch 3 ok Authentication key not yet programmed get rpmb counter error 0x00000007 emmc switch 0 ok Load FIP TMP HDR from eMMC, src: 0x0000c200, des: 0x05100000, size: 0x00004000, part: 0 0001c000Load BL31 from eMMC, src: 0x0001c200, des: 0x05104000, size: 0x0002ac00, part: 0 bl2z: ptr: 05127358, size: 00001e18 Load FIP HDR from eMMC, src: 0x0000c200, des: 0x01700000, size: 0x00004000, part: 0 Load BL3x from eMMC, src: 0x00010200, des: 0x01704000, size: 0x0008e400, part: 0 NOTICE: BL31: v1.3(release):110e239 NOTICE: BL31: Built : 19:07:23, Jul 2 2018 NOTICE: BL31: AXG normal boot! NOTICE: BL31: BL33 decompress pass [Image: axg_v1.1.3326-d0bacc8 2018-07-05 11:21:34 jenkins@walle02-sh] OPS=0x43 25 0b 43 00 88 fc 1a 07 8d 24 0c 3a b2 65 16 59 bl30:axg ver: 9 mode: 0 bl30:axg thermal0 [0.015862 Inits done] secure task start! high task start! low task start! ERROR: Error initializing runtime service opteed_fast U-Boot 2022.01-armbian (Feb 08 2022 - 06:07:00 +0000) jethubj100
© Copyright 2023, JetHome. Обновлено: 26.01.2023 16:59:03 UTC.
Аппаратный «watchdog» или незаменимый помощник в борьбе с зависанием
В одной компании было много терминалов, и одна из неблагодарных задач для техподдержки — ездить по точкам и перезапускать операционную систему внутри терминалов. Было решено бросить вызов этой проблеме в виде разработки аппаратного сторожевого таймера.
В итоге мы получили устройство, которое подключается к расширительному спаренному USB-разъему на материнской плате.

Данное устройство имеет следующие возможности:
- Имитация нажатия кнопок POWER и RESET;
- Управление питанием USB-устройством (при условии, что у него нет отдельного источника);
- Управление гальванически развязанной контактной группой (реле). Можно поставить в разрез цепи питания;
- Индикаторные светодиоды (одним можно управлять, второй показывает режимы работы).
Алгоритм работы прост: внутри находятся два настраиваемых таймера, которые постоянно отсчитывают заданное время, по истечению которого имитируется нажатие соответствующих кнопок (POWER и RESET). Чтобы предотвратить случайную перезагрузку, необходимо периодически послать команду сброса таймера.
Лучше, чтобы за процедуру сброса таймеров отвечало целевое приложение, а не стороннее или системное (Cron, служба расписаний) по причине того, что вероятность сбоя в системе меньше, чем в приложении (хотя, у кого как).
Обмен информацией аналогичен консольному.
| команда | Описание | Пример |
|---|---|---|
| help | Краткая справка по командам | help |
| LED1 | Управление светодиодом, по умолчанию выключен | LED1 ON LED1 OFF |
| RELAY | Управление реле, по умолчанию включено | RELAY ON RELAY OFF |
| KEY1 | Имитация нажатия кнопки 1, по умолчанию не нажата | KEY1 ON KEY1 OFF |
| KEY2 | Имитация нажатия кнопки 2, по умолчанию не нажата | KEY2 ON KEY2 OFF |
| C1 | Управление таймером 1, связанным с кнопкой 1. Установка времени в секундах, максимальное значение 32767. Для отключения функции таймера, необходимо задать время равное 0. |
C1 RES C1 SET 60 C1 SET 0 |
| C2 | Управление таймером 2, связанным с кнопкой 2. Установка времени в секундах, максимальное значение 32767. Для отключения функции таймера, необходимо задать время равное 0. |
C2 RES C2 SET 60 C2 SET 0 |
| USB | Управление питанием USB, по умолчанию включено | USB ON USB OFF |
В случае удачного выполнения команды возвращает «OK».
В случае некорректных данных возвращает «ERROR».
Признаком конца строки служит символ возврата каретки «\r». Также поддерживается режим «\r\n».

Устройство выполнено на базе контроллера STM32F103CA с аппаратной поддержкой USB. Библиотека работы с USB версии V4.0.0. Напряжение работы 3.3В получаем с помощью линейного стабилизатора из 5В на USB. Во всех управляющих цепях используются транзисторы в ключевом режиме. Также не забываем про защитный диод от токов самоиндукции в катушки реле (в моем случае он оказался встроенным).
Вот и все — просто и сердито =).