Bash cкрипт парсинга событий в логах в реальном времени

Пишем простой скрипт, который будет парсить лог программы в реальном времени и при нахождении нужной строки отправлять сообщение. В нашем случае будем смотреть лог Asterisk и при попытке подбора паролей оповещать по Telegram админа сервера.
Сначала вам нужно создать бота в телеграме, получить нужные данные для авторизации и создать с ним чат в телефоне, чтобы видеть сообщения. Оставим это за рамками статьи, инструкций в Интернете полно.

Логи астериск пишет в файл /var/log/asterisk/messages. Для чтения логов мы будем использовать tail -F, далее передавать строки содержащие "Wrong password" в сообщение подставляя их в параметры команды curl.
Пишем скрипт:

nano /etc/send-telegram.sh
#!/bin/bash
tail -n 3 -F /var/log/asterisk/messages | grep --line-buffered 'Wrong password' | while read LINE0 ; 
do curl -s -X POST https://api.telegram.org/bot111111111:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/sendMessage -d chat_id=-222222222 -d text="${LINE0}"; 
done
Теперь добавим старт скрипта в /etc/rc.local для старта в фоновом режиме при загрузке системы.
сhmod +x /etc/send-telegram.sh
nano /etc/rc.local
/etc/send-telegram.sh >/dev/null &
Для более поздних версий Ubuntu вы можете написать сервис для старта скрипта как в данном примере. Либо можно запускать его через крон модифицировав следующим образом: добавить на начале условие проверки вывода ps ax | grep send-telegram.sh, иначе завершать работу скрипта.

Комментариев нет:

Отправить комментарий