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

DockerBeginner
Практиковаться сейчас

Введение

Добро пожаловать в этот практический лабораторный практикум по конфигурации Loki. Loki — это горизонтально масштабируемая, высокодоступная, мультиарендная система агрегации логов, вдохновленная Prometheus. Она разработана, чтобы быть очень экономичной и простой в эксплуатации.

В этом практикуме мы сосредоточимся на полном базовом рабочем процессе сбора и просмотра логов. Мы будем использовать три ключевых компонента:

  • Loki: Основной сервер, отвечающий за хранение и обработку логов.
  • Promtail: Агент, который обнаруживает локальные файлы логов и отправляет их в экземпляр Loki.
  • Grafana: Платформа визуализации, к которой мы подключимся через Loki для исследования и запроса наших логов.

Среда этого практикума уже запустила контейнеры Loki и Grafana. Ваша задача — настроить и запустить Promtail для отправки системных логов в Loki, а затем визуализировать их в Grafana.

Загрузка Docker-образа Promtail для сбора логов

На этом шаге вы загрузите официальный образ Docker для Promtail. Promtail — это агент, отвечающий за обнаружение файлов логов и отправку их содержимого в Loki. Мы запустим его как контейнер Docker, чтобы наша настройка оставалась чистой и изолированной.

Выполните следующую команду в своем терминале, чтобы загрузить образ Promtail из Docker Hub.

docker pull grafana/promtail

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

Using default tag: latest
latest: Pulling from grafana/promtail
Digest: sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Status: Downloaded newer image for grafana/promtail
docker.io/grafana/promtail

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

Создание promtail.yml для сбора системных логов

На этом шаге вы создадите конфигурационный файл для Promtail. Этот YAML-файл указывает Promtail, где находится сервер Loki и какие файлы логов ему следует отслеживать. Вся ваша работа должна выполняться в директории ~/project.

Сначала создайте новый файл с именем promtail.yml с помощью редактора nano.

nano promtail.yml

Теперь скопируйте и вставьте следующую конфигурацию в редактор nano.

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: varlogs
    static_configs:
      - targets:
          - localhost
        labels:
          job: varlogs
          __path__: /var/log/*.log

Давайте разберем эту конфигурацию:

  • server: Настраивает собственный веб-сервер Promtail, который не используется в этом практикуме.
  • positions: Указывает файл, в котором Promtail записывает последнее прочитанное местоположение в каждом файле логов, чтобы избежать повторной отправки старых логов при перезапуске.
  • clients: Определяет адрес экземпляра Loki. Мы используем http://loki:3100, потому что и Promtail, и Loki будут работать в одной сети Docker, а loki — это имя контейнера.
  • scrape_configs: Это основная секция. Мы определяем job с именем varlogs, который собирает (scrapes) все файлы, оканчивающиеся на .log в директории /var/log/.

После вставки содержимого сохраните файл и выйдите из nano, нажав Ctrl+X, затем Y и, наконец, Enter.

Запуск контейнера Promtail с указанием Loki

На этом шаге вы запустите контейнер Promtail, используя конфигурационный файл, который вы только что создали. Команда смонтирует как ваш конфигурационный файл, так и директорию логов хоста внутрь контейнера.

Выполните следующую команду docker run, чтобы запустить Promtail:

docker run -d --name promtail --network monitoring-net -v $(pwd)/promtail.yml:/etc/promtail/config.yml -v /var/log:/var/log grafana/promtail -config.file=/etc/promtail/config.yml

Вот объяснение флагов команды:

  • -d: Запускает контейнер в фоновом (detached) режиме.
  • --name promtail: Присваивает контейнеру имя для удобства обращения.
  • --network monitoring-net: Подключает контейнер к той же сети, что и Loki и Grafana.
  • -v $(pwd)/promtail.yml:/etc/promtail/config.yml: Монтирует ваш локальный promtail.yml внутрь контейнера в ожидаемое расположение.
  • -v /var/log:/var/log: Монтирует директорию /var/log хоста внутрь контейнера, чтобы Promtail мог читать файлы логов.
  • -config.file=/etc/promtail/config.yml: Указывает процессу Promtail внутри контейнера, какой конфигурационный файл использовать.

После выполнения команды Docker выведет уникальный ID нового контейнера. Вы можете проверить, что контейнер запущен, с помощью команды docker ps.

docker ps

В списке запущенных контейнеров вы должны увидеть promtail, loki и grafana.

CONTAINER ID   IMAGE                   COMMAND                  CREATED          STATUS          PORTS                                       NAMES
...            grafana/promtail        "/usr/bin/promtail -c…"   A few seconds ago   Up a few seconds   0.0.0.0:9080->9080/tcp                      promtail
...            grafana/grafana         "/run.sh"                About a minute ago  Up About a minute  0.0.0.0:8080->3000/tcp                      grafana
...            grafana/loki            "/usr/bin/loki -conf…"   About a minute ago  Up About a minute  0.0.0.0:3100->3100/tcp, 9095/tcp            loki

Добавление Loki в качестве источника данных в Grafana

На этом шаге вы настроите Grafana для использования Loki в качестве источника данных. Это позволит вам запрашивать и визуализировать логи, которые Promtail отправляет в Loki.

Пожалуйста, следуйте этим инструкциям внимательно:

  1. Из-за настроек обратного прокси (reverse proxy) VM LabEx переключитесь на Десктопный Интерфейс (Desktop Interface), нажмите на браузер Firefox в левом верхнем углу и введите в адресной строке http://localhost:8080. Вы должны увидеть страницу входа в Grafana.

  2. Войдите в Grafana. Используйте имя пользователя admin и пароль admin. Вас могут попросить сменить пароль; для целей этого практикума вы можете пропустить этот шаг.

  3. В меню слева нажмите на значок Connections (выглядит как вилка или коннектор).

  4. На странице Connections нажмите Data sources.

  5. На странице Data sources нажмите кнопку Add new data source.

  6. Из списка доступных типов источников данных выберите Loki.

  7. В поле поиска введите Loki и нажмите на появившийся вариант источника данных Loki.

  8. Вы перейдете на страницу конфигурации источника данных Loki. В поле URL в разделе HTTP введите следующий адрес:

    http://loki:3100

    Мы используем loki в качестве имени хоста, потому что контейнеры Grafana и Loki находятся в одной сети Docker (monitoring-net), и Docker обеспечивает разрешение DNS между контейнерами в одной сети.

  9. Прокрутите вниз и нажмите кнопку Save & test.

Add Loki as Data Source in Grafana

Если все настроено правильно, вы увидите зеленую полосу с сообщением "Data source is working". Теперь вы успешно подключили Grafana к вашему экземпляру Loki.

Выполнение базовых запросов логов в представлении Grafana Explore

На этом заключительном шаге вы будете использовать представление "Explore" (Исследование) в Grafana для выполнения простого запроса и просмотра логов, которые Promtail отправляет из вашей среды.

  1. В интерфейсе Grafana перейдите к боковой панели слева и нажмите на значок компаса (Explore).

  2. В левом верхнем углу страницы Explore вы увидите выпадающее меню для выбора источника данных. Если он еще не выбран, выберите Loki.

  3. Вы увидите поле ввода "Log browser" (Просмотр логов). Здесь вы пишете ваши LogQL запросы.

  4. Нажмите кнопку "Code", чтобы переключиться в редактор кода.

  5. Введите следующий запрос в поле ввода:

    {job="varlogs"}

    Этот LogQL запрос выбирает все потоки логов, у которых метка (label) job имеет значение varlogs. Мы определили эту метку в нашем файле promtail.yml.

  6. Нажмите Shift+Enter или синюю кнопку Run query (Выполнить запрос) в правой части экрана.

Query Basic Logs in Grafana Explore View

После выполнения запроса в основной панели под редактором запросов должны появиться строки логов. Вы увидите логи из различных файлов в /var/log. Это подтверждает, что Promtail успешно собирает логи и отправляет их в Loki, а Grafana может их запрашивать.

Резюме

Поздравляем! Вы успешно настроили базовый конвейер логирования (logging pipeline) с использованием Loki, Promtail и Grafana.

В этом практикуме вы узнали, как:

  • Загружать и запускать Docker-контейнеры для инструментов обработки логов, таких как Promtail.
  • Создавать конфигурационный файл Promtail для указания сервера Loki и определения заданий по сбору логов (log scraping jobs).
  • Использовать Docker networking для соединения сервисов (Promtail, Loki и Grafana).
  • Добавлять Loki в качестве источника данных (data source) в пользовательском интерфейсе Grafana.
  • Выполнять базовый запрос LogQL в представлении Explore в Grafana для поиска и проверки ваших логов.

Эта настройка является основой мощной, масштабируемой и экономически эффективной системы агрегации логов. Отсюда вы можете перейти к изучению более сложных запросов LogQL, парсинга логов и настройки оповещений (alerts) в Grafana на основе содержимого логов.