Настройка docker-compose.yml
Для того чтобы поднять Graylog из docker-compose, необходимо предварительно настроить docker-compose.
Настройка учётной записи администратора Graylog
Сначала необходимо задать настройки супер-администратора. В Graylog обязательно должна быть одна учётная запись супер-администратора, настраиваемая в конфигурации Graylog.
Настроить учетную запись администратора через docker-compose можно с помощью следующих переменных:
- GRAYLOG_ROOT_USERNAME=admin
- GRAYLOG_PASSWORD_SECRET=somepasswordpepper
- GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
GRAYLOG_ROOT_USERNAME – имя учётной записи супер-администратора. По-умолчанию admin.
GRAYLOG_PASSWORD_SECRET – секрет, который будет использоваться при сохранении хэшей в базу. Минимальная длина секрета 16 символов, рекомендуемая – 64.
Сгенерировать секрет можно с помощью команды: pwgen -N 1 -s 96
GRAYLOG_ROOT_PASSWORD – SHA2 хэш пароля супер-администратора. По-умолчанию пароль admin.
Сгенерировать можно с помощью команды: echo -n "Enter Password: " && head -1 </dev/stdin | tr -d '\n' | sha256sum | cut -d" " -f1
Настройка внешнего адреса Graylog
Для корректной работы Graylog в связке с различными load-balancer'ами и reverse proxy необходимо настроить переменную
- GRAYLOG_HTTP_EXTERNAL_URI=http://localhost:9195/
По-умолчанию GRAYLOG_HTTP_EXTERNAL_URI указывает на адрес контейнера oauth-proxy, адрес которого проброшен на localhost.
Если в текущем решении будет использоваться ещё один reverse-proxy, например nginx для SSL-терминации, необходимо указывать адрес сервера nginx.
Для того чтобы Graylog мог принимать заголовки SSO только от доверенных хостов необходимо настроить переменную
- GRAYLOG_TRUSTED_PROXIES=127.0.0.1/32, 0:0:0:0:0:0:0:1/128, oauth-proxy/32, graylog/32
По умолчанию заголовки принимаются только из локальной подсети контейнера graylog и сети docker-compose.
Настройка oauth2-proxy
Для работы SSO необходимо настроить контейнер oauth-proxy.
- OAUTH2_PROXY_CLIENT_ID=<ID>
- OAUTH2_PROXY_CLIENT_SECRET=<secret>
- OAUTH2_PROXY_OIDC_ISSUER_URL=http://<ip-address>/auth/realms/b2b
OAUTH2_PROXY_CLIENT_ID – OpenID Connect ID Клиента
OAUTH2_PROXY_CLIENT_SECRET – OpenID Connect Secret Клиента
OAUTH2_PROXY_OIDC_ISSUER_URL – адрес Keycloak Realm'а
Для того чтобы поставить какой либо сервис за этот прокси, необходимо указать upstream адрес сервиса. Адрес на котором поднят Graylog в сети docker-compose: http://graylog:9000.
- OAUTH2_PROXY_UPSTREAMS=http://graylog:9000/
После аутентификации механизм OpenID Connect должен перенаправить пользователя на обратный адрес сервиса. Этот адрес задается в переменной OAUTH2_PROXY_REDIRECT_URL.
- OAUTH2_PROXY_REDIRECT_URL=http://localhost:9195/oauth2/callback
Указан внешний адрес oauth-proxy и адрес авторизации ouath2-proxy по умолчанию.
Можно использовать внешнюю систему авторизации, если требуется.
Если контейнер oauth-proxy находится за reverse proxy или load balancer'ом, например за nginx, то здесь необходимо будет указать адрес сервера nginx.
Адрес на котором поднимается прокси задается через переменную OAUTH2_PROXY_HTTP_ADDRESS
- OAUTH2_PROXY_HTTP_ADDRESS=oauth-proxy:9195
По умолчанию прокси поднят на адресе внутри контейнера, а порт проброшен наружу.
Если сервис будет поднят за reverse proxy с SSL-терминацией (HTTPS), то необходимо выставить переменную OAUTH2_PROXY_COOKIE_SECURE=true.
Для того чтобы Cookie не передавались в открытом виде необходимо сгенерировать новый Cookie-Secret: OAUTH2_PROXY_COOKIE_SECRET=HPxBYevNHGXVumRg
Для этого можно воспользоваться командой: pwgen -N 1 -s 96
Более подробные сведения о настройке Graylog можно найти на сайте с документацией.
Более подробные сведения о настройке oauth2-proxy можно найти на сайте с документацией.
Настройка плагина SSO после поднятия docker-compose.yml
- В файле docker-compose.yml настроить переменные окружения контейнеров graylog и oauth-proxy.
- Выполнить команду
docker-compose up
- Произвести аутентификацию в SSO, затем зайти в Graylog под учетной записью системного администратора. Учётная запись по-умолчанию: admin/admin. Адрес по-умолчанию
http://localhost:9195
- В настройках
System->Authentication->Configure Provider Order
включить Single Sign-On и выставить на самый верх. - В настройках
Single Sign-On (SSO)
выставить следующие настройки:Username Header
: x-forwarded-preferred-usernameAutomatically create users
включитьFull Name Header
: x-forwarded-preferred-usernameDefault User Role
: Admin
- Сохранить настройки
Single Sign-On
, теперь можно выйти из учетной записи администратора. - После того как будет совершен выход из учётной записи администратора, должна произойти аутентификация через SSO.
Настройка NxLog
После установки новой версии пакета eltex-eap-tls необходимо настроить и запустить Nxlog для передачи форматированных логов eltex-eap-tls в систему Graylog.
Для начала нужно убедиться что на сервере с eltex-eap-tls существует файл /var/log/eltex-eap-tls/eaplinelog.
Если файла нет то его необходимо создать и дать права на файл не ниже 766 чтобы радиус и докер могли читать и писать.
Конфигурация NxLog выглядит так:
########################################
# Global directives #
########################################
User nxlog
Group nxlog
LogFile /var/log/nxlog/nxlog.log
LogLevel WARNING
########################################
# Modules #
########################################
<Extension gelf>
Module xm_gelf
</Extension>
<Extension json>
Module xm_json
</Extension>
<Extension _fileop>
Module xm_fileop
</Extension>
<Input in>
Module im_file
File "/log/eaplinelog"
Exec parse_json();
</Input>
<Output out>
Module om_udp
Host graylog
Port 12206
OutputType GELF_UDP
</Output>
########################################
# Routes #
########################################
<Route 1>
Path in => out
</Route>
ВАЖНО
Для запуска Graylog NxLog и eltex-eap-tls на одном сервере с помощью docker-compose не нужно менять конфигурацию NxLog
ВАЖНО
NxLog должен быть запущен на одном сервере с eltex-eap-tls, т.к. ему нужен прямой доступ к логам сервиса
Если eltex-eap-tls и NxLog настраиваются на отдельном сервере, то необходимо указать адрес, по которому будет доступен Graylog в блоке <Output out>:
########################################
# Global directives #
########################################
...
########################################
# Modules #
########################################
...
<Output out>
Module om_udp
Host <адрес graylog>
Port 12206
OutputType GELF_UDP
</Output>
########################################
# Routes #
########################################
...
Вместо <адрес graylog> - нужно указывать адрес, по которому доступен Graylog
После указания настроек доступа необходимо запустить nxlog, для этого можно использовать docker-compose так:
docker-compose up -d nxlog
Либо запустить одиночный докер:
docker run --network host -v ./nxlog.conf:/etc/nxlog.conf -v /var/log/eltex-eap-tls/eaplinelog:/log/eaplinelog -d nxlog/nxlog-ce
Настройка dashboard в Graylog
Сначала нужно настроить входной порт для приема данных с NxLog, это настраивается в меню System/Inputs.
Выбираем GELF UDP и нажимаем LAUNCH NEW INPUT в открывшемся диалоговом окне продолжаем настройку важных полей:
- Title - nxlog
- Bind address - 0.0.0.0
- Port - 12201
- Node - выбираем доступный
Теперь Graylog будет принимать сообщения от NxLog.
Далее необходимо настроить сам dashboard, для этого необходимо перейти в меню Dashboards нажать CREATE DASHBOARD указать название и описание и после этого нажать Save
Необходимые виджеты на созданный dashboard можно добавить из потока Streams для этого нужно создать новый Stream и указать при его создании созданный ранее Input
В настройках Stream нужно указать что принимаемый формат данных - json
В созданный поток будут попадать все сообщения из созданного Input для Nxlog
Далее в созданном потоке можно выбирать необходимые метрики и перемещать их на созданный dashboard