Для реализации функционала по передачи логов в elasticsearch у keycloak начиная с 18 версии есть встроенный функционал, реализуемый с помощью gelf
Настройка будет произведена с помощью docker compose.
Ссылка на проект в GitHub доступна внизу.
Настройка Keycloak
I Информация Список доступных переменных и аргументов консоли - https://www.keycloak.org/server/all-config
Переменные окружения
Необходимо добавить к контейнеру переменные окружения
tcp: - указываем, чтобы использовать только tcp соединение
Так же можно указать дополнительные параметры
Настройка Logstash
Блок Input
Добавляем в блок Input следующую информацию
- Запрещаем Udp
- Разрешаем Tcp
- Указываем порт для приёма данных
Блок Filter
Добавляем в блок Filter следующую информацию
- Модифицируем поле string host в поле object host.name . Иначе получим ошибку о том, что поле host должно быть объектом ( https://discuss.elastic.co/t/where-is-the-object-mapping-for-host-defined/281541/5 )
- добавляем разбивку строки с помощью плагина kv (Parses key-value pairs) ( https://www.elastic.co/guide/en/logstash/current/plugins-filters-kv.html )
Блок Output
Добавляем в блок Filter следующую информацию
- Настраиваем подключение к elasticsearch
- Включаем поддержку data_stream
- Указываем параметры data_stream. С указанными параметрами ниже данный лог будет иметь такие значения в полях dataset и namespace
Настройка Kibana
Заходим в Kibana
Stack Management > Index Management > Data Stream
Должен появится новый поток данных
Далее заходим Stack Management > Index patterns > Нажимаем кнопку Create index pattern (если pattern logs-keycloak-services не появился сам)
Далее идём в Discover и выбираем logs-keycloak-services
Видим, что логи появились
Пример простой панели для мониторинга ошибок
Спасибо за внимание! Надеюсь данное решение пригодится в работе.