Форумы » Отзывы и предложения »
Мониторинг и алертинг Tegu с помощью связки fluentbit+signoz
Добавил(а) Макаров Леонид 6 месяца назад
Возникло желание видеть красивые графики, показывающие состояния ящиков, сколько писем отправлено и т.д.
Для сбора логов мы решили использовать fluentbit, для хранения и визуализации опенсорсный Signoz.
На сервер с tegu мы поставили fluentbit и настроили в нем для сбора логов из журнала плагин Systemd.
Конфиг для fluentbit выглядит примерно так:
[INPUT]
Name systemd
Tag host.*
Systemd_Filter _SYSTEMD_UNIT=tegu.service
Strip_Underscores on
[INPUT]
Name tail
Path /opt/mailchecker/log.txt
[FILTER]
Name modify
Match *
Condition Key_Value_Equals SYSTEMD_UNIT tegu.service
Remove TRANSPORT
Remove SYSTEMD_SLICE
Remove BOOT_ID
Remove EXE
Remove SYSTEMD_CGROUP
Remove MACHINE_ID
Remove SYSTEMD_INVOCATION_ID
[OUTPUT]
Name forward
Match *
Host <host>
Port 24224
Но кроме логов самого Tegu, мы еще хотели получать информацию о состоянии ящиков (сколько в ящике писем, сколько занимает INBOX).
Для этого написали простой скрипт, который запускается с параметрами, проверяет ящик и в текстовый лог пишет информацию о ящике.
Строка запуска скрипта
mailchecker.sh user@testdomain.com password mail.testdomain.com:993
Скрипт
#!/bin/bash
if [ -z "$3" ]; then
echo "we need some args"
exit 1
fi
user=$1
password=$2
server=$3
start_idle () {
echo ". login \"$user\" \"$password\""
message_count=$(echo ". STATUS INBOX (MESSAGES)")
mailbox_size=$(echo ". STATUS INBOX (SIZE)")
echo "$message_count"
echo "$mailbox_size"
echo ". LOGOUT"
}
mapfile -t output < <( openssl s_client -crlf -quiet -connect "$server" 2>/dev/null < <(start_idle) )
message_count_raw=$(echo "${output[3]}")
mailbox_size_raw=$(echo "${output[5]}")
if [[ $message_count_raw == *"STATUS INBOX"* ]]; then
message_count=$(grep -oP '([0-9]+)' <<< $message_count_raw)
fi
if [[ $mailbox_size_raw == *"STATUS INBOX"* ]]; then
mailbox_size=$(grep -oP '([0-9]+)' <<< $mailbox_size_raw)
fi
echo "{\"Script\":\"mailchecker\",\"mailbox\":\"$user\",\"messages\": $message_count,\"size\": $mailbox_size}" >> /opt/mailchecker/log.txt
Вывод этого скрипта /opt/mailchecker/log.txt также парсится с помощью fluentbit и отправляется в Signoz
И немножко картинок:
[dash01]
На дашборде "Попытки входа" мы собираем из логов количество неудачных попыток входа за определенное время, и при превышении порогового значения отправляем из Signoz'а вебхук в систему мониторинга и в мессенджер с уведомлением, что это брутфорс такого-то ящика.
На нижнем дашборде у нас рисуется график с количеством отправленных пиисем для определенного ящика, и если за определенное время количество отправленных писем превышает 1000, то опять же, отправляем вебхук в нужные нам места.
[dash02]
На этом дашборде мы суммируем размер всех INBOX и рисуем красивый график. Алерты добавить по вкусу.
[dash03]
Здесь уже мы уже видим размеры нескольких ящиков.
[dash04]
Тут показан график по количеству сообщений в ящиках.
dash01.png (83,4 КБ) dash01.png | |||
dash02.png (50,8 КБ) dash02.png | |||
dash03.png (37,3 КБ) dash03.png | |||
dash04.png (46,3 КБ) dash04.png |
Ответы (2)
RE: Мониторинг и алертинг Tegu с помощью связки fluentbit+signoz - Добавил(а) Кальметов Игорь 6 месяца назад
Прекрасная статья.
Нам бы хотелось знать какие из графиков (какая именно информация) окажется для вас полезной.
Мы бы использовали ее при создании модуля статистики "из коробки".
RE: Мониторинг и алертинг Tegu с помощью связки fluentbit+signoz - Добавил(а) Макаров Леонид 6 месяца назад
Добрый день, Игорь!
Общая информация по серверу:
- сколько занимают места все ящики (возможно в динамике за день, неделю, месяц)
- сколько всего писем
- топ 10 ящиков по объему/письмам
- топ ящиков по получению/отправке
По отдельным ящикам:
- сколько писем в ящике
- объем ящика
- активность, сколько получено/отправлено за день, неделю,
По забанненым адресам:
- с каким логином с какого ip пытались неуспешно войти
Рассмотрите возможность отдавать логи на внешние сервера как syslog для интеграции с решениями siem или log management.