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

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

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

Есть несколько способов настроить GrayLog для отправки сообщений в discord, подробнее они описаны в данном опенсорсном решении: discord_alerts.

Настраиваем бота:

  1. Переходим по ссылке и создаем бота discord applications (можно за одно добавить аватарку)

 

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

 

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

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

 

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

 

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

 

Отлично!

На данный момент у нас должны быть пройденные следующие шаги:

  • У нас есть 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

  1. Заходим во вкладку Alerts:

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

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

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

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

Если что-либо не получилось оставляйте комментарии, постараюсь помочь.

Комментарии (5)


  1. GritsanY
    19.03.2022 11:49
    +2

    Я ожидал, что это будет сделано напрямую между Graylog и Discord. А так достаточно любого изменения API со стороны Discord или Graylog и останется только надеяться на мейнтейнера Dancheg97.


    1. dancheg Автор
      19.03.2022 15:03

      Говоришь верно, изменения в API discord и graylog могут привести к проблемам несовместимости.

      Для этого грейлог позволяет делать уведомления по нескольким источникам сразу (например discord+почта+telegram+...), что позволяет нивелировать риски обновления одного или нескольких API.


  1. avalak
    19.03.2022 15:23
    +2

    Зачем это?
    Тут не нужен целый бот. Discord позволяет создать webhook для текстового канала. Для уведомлений этого за глаза.

    Контейнер тут тоже не нужен. Тем более на 337.91 MB и в таком виде.

    Достаточно обработчика на serverless платформе.


    1. dancheg Автор
      19.03.2022 15:51
      -1

      Нужно пропарсить json который выдает GrayLog в удобочитаемую форму (см скрины выше), подозреваю что подобной роскоши стандартные вебхуки не предоставляют.

      Но в целом если переправлять только сырой текст, то да, решение подойдет


  1. ASHcommander
    20.03.2022 12:25

    Вместо GrayLog прочёл GayLord...