Настройка централизованного логирования с использованием Dokku, Loki и Grafana

Централизованное логирование играет важную роль в современном мониторинге и управлении серверами. Это позволяет оперативно анализировать и отслеживать работу приложений и серверов в реальном времени. В данной статье мы рассмотрим процесс настройки системы централизованного логирования с использованием таких мощных инструментов, как Dokku, Loki и Grafana. Совместное использование этих инструментов обеспечивает гибкую и масштабируемую систему для мониторинга и анализа данных ваших серверов.

Содержание статьи:

  • Шаг 1. Настройка Dokku

  • Шаг 2. Настройка Loki

  • Шаг 3. Настройка Promtai

  • Шаг 4. Настройка Grafana

  • Шаг 5. Настройка Promtail для мониторинга JSON-логов на удаленном сервере с Loki

  • Шаг 6. Визуализация данных с помощью Grafana

Шаг 1. Настройка Dokku

Dokku — это легковесный инструмент управления контейнерами Docker, который упрощает развертывание и управление приложениями. Для начала работы с Dokku выполните следующие шаги:

Инструкция по установке Dokku:

  1. Загрузка скрипта установки:

wget -NP . https://dokku.com/bootstrap.sh
  1. Запуск установщика:

sudo DOKKU_TAG=v0.32.3 bash bootstrap.sh
  1. Настройка домена:

dokku domains:set-global dokku.me
  1. Добавление SSH-ключа: Замените "your-public-key-contents-here" на ваш публичный SSH-ключ.

echo "your-public-key-contents-here" | dokku ssh-keys:add admin

Эти шаги создадут основу для работы с Dokku на вашем сервере.

Требования

Для выполнения данной настройки вам потребуется сервер с установленным Dokku, работающий под управлением Ubuntu 22.04. Эти инструкции были протестированы на версии Dokku v0.32.3, но они, вероятно, будут работать и на других версиях.

Публичные точки доступа защищены http-auth и tls, поэтому убедитесь, что у вас установлены соответствующие плагины:

dokku plugin:install https://github.com/dokku/dokku-http-auth.git
dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git

Добавление полноценного решения для мониторинга увеличивает требования к ресурсам вашего сервера, но после настройки у вас будут метрики, которые помогут определить, нужны ли дополнительные ресурсы.

  1. Сетевая настройка

Мы будем использовать частную сеть Docker для обеспечения связи приложений друг с другом в частной сети.

Создайте мостовую сеть с именем «grafana-bridge»:

dokku network:create grafana-bridge

Шаг 2. Настройка Loki

Для настройки Loki выполните следующие шаги:

  1. Создайте приложение Loki:

dokku apps:create loki
  1. Настройте порты для Loki, чтобы он слушал HTTP-запросы на порту 80 и пересылал их на порт 3100, где будет работать Loki:

dokku ports:add loki http:80:3100
  1. Установите переменную окружения для Loki, указав путь к конфигурационному файлу. Это позволит Loki использовать вашу настройку конфигурации:

dokku config:set --no-restart loki DOKKU_DOCKERFILE_START_CMD="-config.file=/etc/loki/loki-config.yaml"
  1. Создайте директорию для монтажа хранилища конфигурации Loki и создайте файл конфигурации:

mkdir -p /var/lib/dokku/data/storage/loki/config
touch /var/lib/dokku/data/storage/loki/config/loki-config.yaml
  1. Установите правильные права доступа к созданным директориям и файлам:

chown -R nobody:nogroup /var/lib/dokku/data/storage/loki
  1. Монтируйте директорию конфигурации Loki в контейнер Loki с помощью следующей команды:

dokku storage:mount loki /var/lib/dokku/data/storage/loki/config:/etc/loki

Конфигурация Loki

  1. Сохраните файл конфигурации Loki по следующему пути: /var/lib/dokku/data/storage/loki/config/loki‑config.yaml

и добавьте в него следующее содержимое:

Показать содержимое

auth_enabled: false

server:
  http_listen_port: 3100

ingester:
  lifecycler:
    address: 127.0.0.1
    ring:
      kvstore:
        store: inmemory
      replication_factor: 1
    final_sleep: 0s
  chunk_idle_period: 1h
  max_chunk_age: 1h
  chunk_target_size: 1048576
  chunk_retain_period: 30s
  max_transfer_retries: 0

schema_config:
  configs:
    - from: 2020-10-24
      store: boltdb-shipper
      object_store: filesystem
      schema: v11
      index:
        prefix: index_
        period: 24h

storage_config:
  boltdb_shipper:
    active_index_directory: /tmp/loki/boltdb-shipper-active
    cache_location: /tmp/loki/boltdb-shipper-cache
    cache_ttl: 24h
    shared_store: filesystem
  filesystem:
    directory: /tmp/loki/chunks

compactor:
  working_directory: /tmp/loki/boltdb-shipper-compactor
  shared_store: filesystem

limits_config:
  reject_old_samples: true
  reject_old_samples_max_age: 168h

chunk_store_config:
  max_look_back_period: 0s

table_manager:
  retention_deletes_enabled: false
  retention_period: 0s

ruler:
  storage:
    type: local
    local:
      directory: /tmp/loki/rules
  rule_path: /tmp/loki/rules-temp
  alertmanager_url: http://localhost:9093
  ring:
    kvstore:
      store: inmemory
  enable_api: true
  1. Сохраните файл конфигурации Loki.

  2. Установка Пользовательского Домена:

  • Назначьте пользовательский домен для Grafana:   dokku domains:set loki loki.dokku.me

  • Убедитесь, что DNS-записи для loki.dokku.me правильно указывают на ваш сервер Dokku.

  1. Включение HTTPS:

После установки домена включите HTTPS:

dokku letsencrypt:enable loki

10. Включите HTTP-авторизацию для приложения Loki. Замените  и  на вашу выбранную комбинацию имени пользователя и пароля:

dokku http-auth:on loki  

Теперь у вас настроен Loki для централизованного сбора и агрегации логов на вашем сервере Dokku.

Шаг 3. Настройка Promtail

Для настройки Promtail выполните следующие шаги:

  1. Создайте приложение Promtail:

dokku apps:create promtail
  1. Установите переменную окружения для Promtail, указав путь к конфигурационному файлу. Это позволит Promtail использовать вашу настройку конфигурации:

dokku config:set --no-restart promtail DOKKU_DOCKERFILE_START_CMD="-config.file=/etc/promtail/promtail-config.yaml"
  1. Создайте директорию для монтажа хранилища конфигурации Promtail и создайте файл конфигурации:

mkdir -p /var/lib/dokku/data/storage/promtail/config
touch /var/lib/dokku/data/storage/promtail/config/promtail-config.yaml
  1. Установите правильные права доступа к созданным директориям и файлам:

chown -R nobody:nogroup /var/lib/dokku/data/storage/promtail
  1. Монтируйте директорию конфигурации Promtail в контейнер Promtail:

dokku storage:mount promtail /var/lib/dokku/data/storage/promtail/config:/etc/promtail
  1. Монтируйте директорию журналов /var/log в контейнер Promtail:

dokku storage:mount promtail /var/log:/var/log
  1. Присоедините приложение Promtail к сети grafana-bridge после развёртывания:

dokku network:set promtail attach-post-deploy grafana-bridge

Конфигурация Promtail

  1. Создайте файл конфигурации Promtail по следующему пути: /var/lib/dokku/data/storage/promtail/config/promtail-config.yaml 

 и добавьте в него следующее содержимое:

Раскрыть конфигурацию

server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://loki.web:3100/loki/api/v1/push

scrape_configs:
  - job_name: system
    static_configs:
      - targets:
          - localhost
        labels:
          job: varlogs
          __path__: /var/log/*log
      - targets:
          - localhost
        labels:
          job: nginx
          __path__: /var/log/nginx/*log
  1. Сохраните файл конфигурации Promtail.

Развёртывание Promtail

  1. Разверните приложение Promtail с помощью одной команды:

dokku git:from-image promtail grafana/promtail
  1. Отключите доменное имя для приложения Promtail, так как это не требуется для сбора журналов:

dokku domains:disable promtail

Теперь у вас настроен Promtail для сбора и отправки журналов в систему Loki на вашем сервере Dokku.

Шаг 4. Настройка Grafana

Для настройки Grafana выполните следующие шаги:

  1. Создайте приложение Grafana:

dokku apps:create grafana
  1. Настройте порты для Grafana, чтобы он слушал HTTP-запросы на порту 80 и пересылал их на порт 3000, где будет работать Grafana:

dokku ports:add grafana http:80:3000
  1. Создайте директории для монтажа хранилища данных и конфигурации Grafana, а также директорию для плагинов:

mkdir -p /var/lib/dokku/data/storage/grafana/{config,data,plugins}
  1. Создайте директорию для хранения файлов конфигурации источников данных:

mkdir -p /var/lib/dokku/data/storage/grafana/config/provisioning/datasources
  1. Установите правильные права доступа к созданным директориям и файлам:

chown -R 472:472 /var/lib/dokku/data/storage/grafana

6.Монтируйте директории данных и конфигурации Grafana, а также директорию для плагинов:

dokku storage:mount grafana /var/lib/dokku/data/storage/grafana/config/provisioning/datasources:/etc/grafana/provisioning/datasources
dokku storage:mount grafana /var/lib/dokku/data/storage/grafana/data:/var/lib/grafana
dokku storage:mount grafana /var/lib/dokku/data/storage/grafana/plugins:/var/lib/grafana/plugins

7.Создайте файл конфигурации для источника данных Loki:

nano /var/lib/dokku/data/storage/grafana/config/provisioning/datasources/loki.yml

И добавьте в него следующее содержимое:

datasources:
  - name: Loki
    type: loki
    access: proxy
    orgId: 1
    url: http://loki.web:3100
    basicAuth: false
    isDefault: false
    version: 1
    editable: true
  1. Сохраните файлы конфигурации для источников данных.

  2. Присоедините приложение Grafana к сети grafana-bridge после развёртывания:

dokku network:set grafana attach-post-deploy grafana-bridge
  1. Установка Пользовательского Домена:

Назначьте пользовательский домен для Grafana:

dokku domains:set grafana grafana.dokku.me

Убедитесь, что DNS-записи для grafana.dokku.me правильно указывают на ваш сервер Dokku.

  1. Включение HTTPS:

После установки домена включите HTTPS:

dokku letsencrypt:enable grafana

Теперь у вас настроен Grafana с доменным именем grafana.kaido.team и включенным HTTPS для обеспечения безопасного доступа к данным.

Шаг 5. Настройка Promtail для мониторинга JSON-логов на удаленном сервере с Loki

Для настройки Promtail для мониторинга JSON-логов на удаленном сервере и отправки их в Loki, учтите следующие шаги:

Настройка удаленного сервера

  1. Установите и настройте Promtail на удаленном сервере. Пример файла конфигурации Promtail на удаленном сервере может выглядеть следующим образом:

server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://loki.dokku.me:3100/loki/api/v1/push
    basic_auth_user: ваш_пользователь
    basic_auth_password: ваш_пароль

scrape_configs:
  - job_name: json_logs
    static_configs:
      - targets:
          - /путь/к/файлу.json  # Укажите путь к JSON-лог файлу на удаленном сервере
        labels:
          job: json_logs
  1. В этом файле конфигурации:

  • http_listen_port и grpc_listen_port — это порты, на которых Promtail будет прослушивать HTTP и gRPC запросы.

  • clients — указывает на адрес Loki, куда Promtail будет отправлять собранные логи. Укажите basic_auth_user и basic_auth_password для HTTP-авторизации на сервере Loki.

  • scrape_configs — это список конфигураций для мониторинга логов. В данном случае, мы создали конфигурацию с именем json_logs для мониторинга JSON-лог файла на удаленном сервере.

  • targets — замените /путь/к/файлу.json на путь к JSON-лог файлу на удаленном сервере.

  1. Сохраните файл конфигурации на удаленном сервере, например, в /etc/promtail/promtail-config.yaml

Теперь Promtail будет мониторить JSON-лог файл на удаленном сервере и отправлять его в Loki с использованием HTTP-авторизации на сервере Loki, доступном на вашем локальном сервере, для дальнейшей визуализации в Grafana.

Шаг 6. Визуализация данных с помощью Grafana

Визуализация логов

  1. Зайдите в веб-интерфейс Grafana https://grafana.dokku.me.

  2. Войдите в Grafana с учетными данными login: admin password: admin (дефолтные значения, которые вы измените во время первого входа).

  3. Перейдите в раздел «Explore» в верхней панели навигации Grafana.

  4. В разделе «Explore» вы можете выбрать источник данных Loki и начать поиск и визуализацию ваших JSON-логов.

  5. В поле «Log labels» вы можете выбрать job в выпадающем списке, чтобы отфильтровать логи по job_name.

  6. Затем вы можете вводить запросы и использовать функции Loki для поиска, фильтрации и визуализации логов.

  7. Создайте и сохраните панели для визуализации интересующих вас данных из логов.

Теперь у вас есть инструменты для визуализации и анализа JSON-логов с помощью Grafana и Loki. Вы можете создавать графики, панели и дашборды, чтобы мониторить вашу инфраструктуру и приложения на основе логов.

В заключение, настройка централизованного логирования с использованием Dokku, Loki и Grafana представляет собой мощное решение для современного мониторинга и управления серверами. Эта система не только обеспечивает гибкость и масштабируемость, но также позволяет оперативно анализировать и отслеживать работу приложений и серверов в реальном времени. Через интеграцию Dokku для управления контейнерами, Loki для агрегации и централизации логов и Grafana для визуализации и анализа данных, пользователи получают комплексный набор инструментов для эффективного мониторинга и реагирования на события в их инфраструктуре.

Руководство, представленное в этой статье, подробно описывает каждый шаг настройки, начиная от установки Dokku и заканчивая конфигурацией Grafana и Promtail. Это обеспечивает глубокое понимание процесса и помогает пользователям настроить систему под свои уникальные требования. С учетом всех аспектов безопасности и производительности, такая система логирования становится надежным решением для сбора, анализа и визуализации данных логов.

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

© Habrahabr.ru