Введение
Добро пожаловать в этот практический лабораторный практикум по конфигурации 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.
Пожалуйста, следуйте этим инструкциям внимательно:
Из-за настроек обратного прокси (reverse proxy) VM LabEx переключитесь на Десктопный Интерфейс (Desktop Interface), нажмите на браузер Firefox в левом верхнем углу и введите в адресной строке
http://localhost:8080. Вы должны увидеть страницу входа в Grafana.Войдите в Grafana. Используйте имя пользователя
adminи парольadmin. Вас могут попросить сменить пароль; для целей этого практикума вы можете пропустить этот шаг.В меню слева нажмите на значок Connections (выглядит как вилка или коннектор).
На странице Connections нажмите Data sources.
На странице Data sources нажмите кнопку Add new data source.
Из списка доступных типов источников данных выберите Loki.
В поле поиска введите
Lokiи нажмите на появившийся вариант источника данных Loki.Вы перейдете на страницу конфигурации источника данных Loki. В поле URL в разделе HTTP введите следующий адрес:
http://loki:3100Мы используем
lokiв качестве имени хоста, потому что контейнеры Grafana и Loki находятся в одной сети Docker (monitoring-net), и Docker обеспечивает разрешение DNS между контейнерами в одной сети.Прокрутите вниз и нажмите кнопку Save & test.

Если все настроено правильно, вы увидите зеленую полосу с сообщением "Data source is working". Теперь вы успешно подключили Grafana к вашему экземпляру Loki.
Выполнение базовых запросов логов в представлении Grafana Explore
На этом заключительном шаге вы будете использовать представление "Explore" (Исследование) в Grafana для выполнения простого запроса и просмотра логов, которые Promtail отправляет из вашей среды.
В интерфейсе Grafana перейдите к боковой панели слева и нажмите на значок компаса (Explore).
В левом верхнем углу страницы Explore вы увидите выпадающее меню для выбора источника данных. Если он еще не выбран, выберите Loki.
Вы увидите поле ввода "Log browser" (Просмотр логов). Здесь вы пишете ваши LogQL запросы.
Нажмите кнопку "Code", чтобы переключиться в редактор кода.
Введите следующий запрос в поле ввода:
{job="varlogs"}Этот LogQL запрос выбирает все потоки логов, у которых метка (label)
jobимеет значениеvarlogs. Мы определили эту метку в нашем файлеpromtail.yml.Нажмите Shift+Enter или синюю кнопку Run query (Выполнить запрос) в правой части экрана.

После выполнения запроса в основной панели под редактором запросов должны появиться строки логов. Вы увидите логи из различных файлов в /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 на основе содержимого логов.



