Форумы » Отзывы и предложения »
Мониторинг и алертинг Tegu с помощью связки fluentbit+signoz
Добавил(а) Макаров Леонид 11 месяца назад
Возникло желание видеть красивые графики, показывающие состояния ящиков, сколько писем отправлено и т.д.
Для сбора логов мы решили использовать 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
-
Добавил(а) Кальметов Игорь 11 месяца назад
Прекрасная статья.
Нам бы хотелось знать какие из графиков (какая именно информация) окажется для вас полезной.
Мы бы использовали ее при создании модуля статистики "из коробки".
RE: Мониторинг и алертинг Tegu с помощью связки fluentbit+signoz
-
Добавил(а) Макаров Леонид 11 месяца назад
Добрый день, Игорь!
Общая информация по серверу:
- сколько занимают места все ящики (возможно в динамике за день, неделю, месяц)
- сколько всего писем
- топ 10 ящиков по объему/письмам
- топ ящиков по получению/отправке
По отдельным ящикам:
- сколько писем в ящике
- объем ящика
- активность, сколько получено/отправлено за день, неделю,
По забанненым адресам:
- с каким логином с какого ip пытались неуспешно войти
Рассмотрите возможность отдавать логи на внешние сервера как syslog для интеграции с решениями siem или log management.