
Всем привет! Данный гайд будет посвящен тому, как направить уведомления из системы сбора логов GrayLog в discord, сохраняя при этом удобную форму и полное содержание сообщений.
Можно сделать бота, который будет отправлять сообщения сохраняя полную разметку сообщений и предоставляя их в удобочитаемой форме. Вот пример сообщения:

Плюсы относительно смс уведомлений в том, что discord поддерживает markdown разметку, что позволяет делать комфортное представление для подачи сообщения, а также дискорд бесплатен, что при большом количестве ошибок в логах быть плюсом.
Есть несколько способов настроить GrayLog для отправки сообщений в discord, подробнее они описаны в данном опенсорсном решении: discord_alerts.
Настраиваем бота:
Переходим по ссылке и создаем бота discord applications (можно за одно добавить аватарку)


Переходим во вкладку бот и жмём `добавить бота`


Жмём reset token для удаленного доступа к боту и сохраняем токен


Идем в генератор URL настраиваем доступы бота, добавляем возможность отправлять сообщения


Открываем сгенерированный URL в бразузере



Копируем ссылку на канал на сервере в приложении дискорда


Отлично!
На данный момент у нас должны быть пройденные следующие шаги:
У нас есть token для бота
У нас есть ID канала для записи сообщений
Бот добавлен на сервер и он оффлайн
Если вы сделали всё правильно, то данные условия должны быть выполнены.
Далее мы запустим приложение которое принимает логи из GrayLog.
Опция 1 - запуск в docker
Самый простой способ - запустить через docker-compose файл, просто заполнив поля связанные с токеном, ID канала и портом для http сообщений. Вот пример yaml файла:
version: '3'
services:
discord_alerts:
image: dangdancheg/discord_alerts:latest
ports:
- 3458:3458
environment:
- TOKEN=PASTE_YOUR_DISCORD_TOKEN
- CHANNEL_ID=PASTE_CHANNELID_FROM_CHANNEL_LINK
- PORT=3458
Далее можно просто запустить команду docker compose up, и бот готов
Опция 2 - запуск в билдов
Ищем необхдимую платформу в следующей папке build.
Создаем и заполняем .env файл.
TOKEN=YOUR_TOKEN
CHANNEL_ID=YOUR_CHAN_ID
PORT=3458
Скачиваем готовый запускаемый файл и сохраняем в папке с .env файлом:
--> linux/mipsle: discord_alerts
--> linux/arm: discord_alerts
--> darwin/386: discord_alerts
--> freebsd/arm: discord_alerts
--> freebsd/386: discord_alerts
--> freebsd/amd64: discord_alerts
--> openbsd/386: discord_alerts
--> openbsd/amd64: discord_alerts
--> windows/386: discord_alerts
--> windows/amd64: discord_alerts
--> linux/s390x: discord_alerts
--> netbsd/386: discord_alerts
--> netbsd/amd64: discord_alerts
--> netbsd/arm: discord_alerts
--> linux/mips64le: discord_alerts
--> linux/mips64: discord_alerts
--> linux/386: discord_alerts
--> darwin/amd64: discord_alerts
--> linux/amd64: discord_alerts
--> linux/mips: discord_alerts
Запускаем файл.
Отлично! Теперь у нас есть настроенный приемник для сообщений. Теперь осталось настроить выход у graylog для отправки сообщений.
Настраиваем GrayLog
Заходим во вкладку Alerts:

Открываем пункт с уведомлениями - notifications:

Выбираем http уведомления:

Выбираем любое название и добавляем адрес для вызова (по указанному порту и с методом /json)

Мы должны получить следующее уведомление в дискорде:

Если что-либо не получилось оставляйте комментарии, постараюсь помочь.
Комментарии (5)
avalak
19.03.2022 15:23+2Зачем это?
Тут не нужен целый бот. Discord позволяет создать webhook для текстового канала. Для уведомлений этого за глаза.Контейнер тут тоже не нужен. Тем более на 337.91 MB и в таком виде.
Достаточно обработчика на serverless платформе.
dancheg Автор
19.03.2022 15:51-1Нужно пропарсить json который выдает GrayLog в удобочитаемую форму (см скрины выше), подозреваю что подобной роскоши стандартные вебхуки не предоставляют.
Но в целом если переправлять только сырой текст, то да, решение подойдет
GritsanY
Я ожидал, что это будет сделано напрямую между Graylog и Discord. А так достаточно любого изменения API со стороны Discord или Graylog и останется только надеяться на мейнтейнера Dancheg97.
dancheg Автор
Говоришь верно, изменения в API discord и graylog могут привести к проблемам несовместимости.
Для этого грейлог позволяет делать уведомления по нескольким источникам сразу (например discord+почта+telegram+...), что позволяет нивелировать риски обновления одного или нескольких API.