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

Используемые термины: Docker, Grafana, Grafana Loki.
В данной инструкции будет приведет пример файла docker-compose для развертывания сервиса по сбору логов Grafana Loki. Также немного затронем тему установки клиентов в docker на удаленных хостах для сбора логов с них.
Предварительная настройка системы
Пример файла docker-compose для запуска сервера loki
Настройки перед запуском контейнеров
Запуск сервисов в docker-compose
Пример подключения клиента для отправки логов на сервер
Дополнительные материалы
Подготовка среды на сервере
Прежде чем начать, нам необходимо установить 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
- ---
- services:
- grafana:
- user: root
- image: grafana/grafana
- ports:
- - 3000:3000
- volumes:
- - ./grafana:/var/lib/grafana
- - ./grafana/provisioning/:/etc/grafana/provisioning/
- container_name: grafana
- restart: unless-stopped
- environment:
- TZ: "Europe/Moscow"
- loki:
- image: grafana/loki:latest
- container_name: loki-app
- restart: unless-stopped
- environment:
- TZ: "Europe/Moscow"
- volumes:
- - ./loki/conf/local-config.yaml:/etc/loki/local-config.yaml
- - ./loki/data:/loki
- ports:
- - "3100:3100"
- command: -config.file=/etc/loki/local-config.yaml
- promtail:
- image: grafana/promtail:latest
- container_name: loki-promtail
- restart: unless-stopped
- environment:
- TZ: "Europe/Moscow"
- volumes:
- - /var/log:/var/log
- - ./promtail/conf/config.yml:/etc/promtail/config.yml
- 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 попросит поменять пароль после первого входа.
После входа переходим в раздел добавления источника данных:
Кликаем по кнопке добавления нового источника и среди списка выбираем Loki:
В открывшемся окне указываем в качестве источника http://loki:3100:
* так как графана и локи у нас находятся в одном 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.
Читайте также
Другие инструкции по похожим темам:
2. Установка и использование Grafana Loki на Linux.