Пример docker-compose файла для развертывания Grafana + Grafana Loki

Обновлено и опубликовано Опубликовано:

Используемые термины: DockerGrafanaGrafana Loki.

В данной инструкции будет приведет пример файла docker-compose для развертывания сервиса по сбору логов Grafana Loki. Также немного затронем тему установки клиентов в docker на удаленных хостах для сбора логов с них.

Подготовка среды на сервере

Прежде чем начать, нам необходимо установить docker и docker-compose. Также мы должны определиться с рабочей директорией для хранения рабочих данных. Рассмотрим процессы по шагам.

1. Установка docker

На сервере, где мы хотим развернуть Grafana Loki должны быть установлены docker и docker-compose. В зависимости от системы это делается, немного, по-разному. 

Подробнее процесс описан в инструкции Установка Docker на Linux.

2. Подготовка каталога

Создаем папку, где будет размещен файл docker-compose и перейдем в нее:

mkdir /opt/loki

cd /opt/loki

* в моем примере предполагается, что местом размещения рабочих файлов будет /opt/loki.

Пример сценария

Создаем файл docker-compose:

vi docker-compose.yml

  1. ---
  2.  
  3. services:
  4.   grafana:
  5.     user: root
  6.     image: grafana/grafana
  7.     ports:
  8.       - 3000:3000
  9.     volumes:
  10.       - ./grafana:/var/lib/grafana
  11.       - ./grafana/provisioning/:/etc/grafana/provisioning/
  12.     container_name: grafana
  13.     restart: unless-stopped
  14.     environment:
  15.       TZ: "Europe/Moscow"
  16.  
  17.   loki:
  18.     image: grafana/loki:latest
  19.     container_name: loki-app
  20.     restart: unless-stopped
  21.     environment:
  22.       TZ: "Europe/Moscow"
  23.     volumes:
  24.       - ./loki/conf/local-config.yaml:/etc/loki/local-config.yaml
  25.       - ./loki/data:/loki
  26.     ports:
  27.       - "3100:3100"
  28.     command: -config.file=/etc/loki/local-config.yaml
  29.  
  30.   promtail:
  31.     image: grafana/promtail:latest
  32.     container_name: loki-promtail
  33.     restart: unless-stopped
  34.     environment:
  35.       TZ: "Europe/Moscow"
  36.     volumes:
  37.       - /var/log:/var/log
  38.       - ./promtail/conf/config.yml:/etc/promtail/config.yml
  39.     command: -config.file=/etc/promtail/config.yml

Обратите внимание на строки:

Строки Описание
4 - 15 Развертыванием сервис grafana. Он стартанет на порту 3000 и будет доступен при подключении к хосту docker. В рабочем каталоге для него будет создана папка grafana, в которой будут размещены данные приложения.
17 - 28 Сам сервис loki. Он будет запущен на порту 3100 и доступен для внешнего подключения. Обратите внимание, что мы определяем команду запуска сервиса с передачей пути до конфигурационного файла. Также мы указали, что в качестве конфигурационного файла будет использоваться loki/local-config.yaml.
30 - 39 Контейнер для агента по сбору логов. В данном примере он будет передавать лог, согласно настройкам в конфигурационном файле /etc/promtail/config.yml.

Переходим к созданию необходимых каталогов и конфигурационных файлов.

Настройка компонентов

Создаем каталог для хранения данных loki (база с логами):

mkdir -p loki/data

Укажем в качестве владельца пользователя с идентификатором 10001:

chown 10001:10001 loki/data

* пользователь с id 10001 — это учетная запись loki внутри docker контейнера приложения.

Создаем каталог для хранения конфигурации loki:

mkdir loki/conf

... и сам конфигурационный файл:

vi loki/conf/local-config.yaml

auth_enabled: false

server:
  http_listen_port: 3100

common:
  instance_addr: 127.0.0.1
  path_prefix: /loki
  storage:
    filesystem:
      chunks_directory: /loki/chunks
      rules_directory: /loki/rules
  replication_factor: 1
  ring:
    kvstore:
      store: inmemory

schema_config:
  configs:
    - from: 2020-10-24
      store: tsdb
      object_store: filesystem
      schema: v13
      index:
        prefix: index_
        period: 24h

ruler:
  alertmanager_url: http://localhost:9093

limits_config:
  retention_period: 720h
  reject_old_samples: true
  reject_old_samples_max_age: 720h

table_manager:
  retention_deletes_enabled: true
  retention_period: 720h

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

  • http_listen_port — сетевой порт, на котором слушает сервер loki.
  • path_prefix — корневой каталог, где хранятся данные loki.
  • retention_period — период хранение логов (в нашем примере 30 дней).

Создаем каталог для хранения конфигурации promtail:

mkdir -p promtail/conf

Создаем конфигурационный файл: 

vi promtail/conf/config.yml

server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

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

scrape_configs:
- job_name: system
  static_configs:
  - targets:
      - localhost
    labels:
      job: varlogs
      __path__: /var/log/*log

* в данном примере мы указываем в качестве адреса отправки лога http://loki:3100, а сами логи будут собираться по пути /var/log/*log.

Мы готовы к запуску.

Запуск и проверка

Вводим команду:

docker-compose up -d

Ждем запуска всех контейнеров, после чего переходим на страницу графаны по ссылке http://<IP-адрес хоста docker>:3000. В качестве логина с паролем для входа используем admin / admin. Grafana попросит поменять пароль после первого входа.

После входа переходим в раздел добавления источника данных:

Переходим к управлению источниками данных в Grafana

Кликаем по кнопке добавления нового источника и среди списка выбираем Loki:

Выбор типа источника данных (Loki)

В открывшемся окне указываем в качестве источника http://loki:3100:

Указываем адрес loki сервера для добавления источника данных в графане

* так как графана и локи у нас находятся в одном docker-compose, то в качестве адреса сервера мы указываем имя service в композ-файле. Если вы развернете grafana и loki на разных серверах, адрес должен быть указал другой, в соответствии с вашей инфраструктурой.

Можно настроить дашбор и смотреть логи. Подробнее про это можно почитать в инструкции Установка и использование Grafana Loki на Linux.

Подключение клиента

Рассмотрим пример сбора логов с другого сервера docker. Для последнего существует плагин loki, который позволяет выполнять сбор логов и отправлять их напрямую на сервер loki.

Для начала устанавливаем плагин:

docker plugin install grafana/loki-docker-driver --alias loki --grant-all-permissions

Теперь для docker доступен драйвер loki, позволяющий обрабатывать журналы. Его можно применять при запуске контейнеров. Пример docker-compose с отправкой логов на сервер loki:

x-def-logging: &default-logging
  logging:
    driver: "loki"
    options:
      loki-url: "http://192.168.0.15:3100/loki/api/v1/push"
      loki-batch-size: "400"

services:
  mysqldb:
    restart: unless-stopped
    image: mysql:latest
    ...
    <<: *default-logging

* в данном примере мы создаем якорь default-logging, в котором описываем процесс логирования (с отправкой логов на сервер 192.168.0.15). После мы создаем контейнер mysqldb, в котором применяем данный якорь.

Как результат, контейнер mysqldb будет отправлять все записи журнала на сервер 192.168.0.15.

Читайте также

Другие инструкции по похожим темам:

1. Установка Docker на Linux.

2. Установка и использование Grafana Loki на Linux.

3. Установка и настройка сервера Grafana на Linux.

4. Шпаргалка по работе с docker-compose.

# DevOps # Grafana # Контейнеризация
Дмитрий Моск — частный мастер
Был ли вам полезен этот скрипт?

Да            Нет