February 17

Централизованный мониторинг логов с помощью Loki, Promtail и Grafana

Это перевод оригинальной статьи Centralized Log Monitoring with Loki, Promtail & Grafana.

Подписывайтесь на телеграм-канал usr_bin, где я публикую много полезного по Linux, в том числе ссылки на статьи в этом блоге.

Примечание переводчика: расширенная поддержка Promtail завершилась в феврале 2026 года. У Grafana есть способы миграции с Promtail на новый агент Alloy.

Введение

В этой статье рассмотрена агрегация и визуализация логов с помощью Loki. Будет показано как настроить Loki вместе с Promtail и как создать дашборды.

Что вы узнаете

  • Как установить и настроить Loki на сервере с Linux
  • Как настраивать Promtail для сбора системных логов и логов journal
  • Как интегрировать Loki с Grafana
  • Как визуализировать логи в режиме реального времени прямо в браузере.
  1. Запустите экземпляр EC2 с типом экземпляра t3.medium и размером диска 16 ГБ, работающий под управлением ОС Ubuntu. Откройте следующие порты: 9090, 3000 и 3100 — для Prometheus, Grafana и Loki соответственно. После запуска подключитесь к экземпляру EC2 по SSH.

2. Начнём с обновления системы, а затем установим на неё Grafana.

# Update package list and install dependencies
sudo apt update
sudo apt install -y software-properties-common wget

# Add Grafana APT repository
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
sudo apt update

# Install Grafana
sudo apt install -y grafana

# Enable and start Grafana service
sudo systemctl enable grafana-server
sudo systemctl start grafana-server

# Check Grafana status
sudo systemctl status grafana-server

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

Загружается ключ GPG для проверки целостности и подлинности пакетов Grafana, добавляется репозиторий Grafana в источники пакетов системы, устанавливается сервер Grafana OSS, настраивается автоматический запуск при загрузке системы и запускается служба Grafana.

Затем скопируйте публичный IP-адрес вашего экземпляра EC2 и откройте его в браузере, указав порт 3000(например, http://<your-public-ip>:3000), чтобы проверить доступность Grafana. После загрузки страницы входа в Grafana войдите в систему, используя учетные данные по умолчанию:

Имя пользователя: admin, Пароль: admin

3. Установка Loki

# Download Loki binary (latest version replace tags if needed)
LOKI_VERSION="2.8.2"
wget https://github.com/grafana/loki/releases/download/v${LOKI_VERSION}/loki-linux-amd64.zip
sudo apt-get install unzip
unzip loki-linux-amd64.zip
sudo mv loki-linux-amd64 /usr/local/bin/loki
sudo chmod +x /usr/local/bin/loki

sudo mkdir -p /etc/loki
wget https://raw.githubusercontent.com/grafana/loki/v${LOKI_VERSION}/cmd/loki/loki-local-config.yaml -O /etc/loki/local-config.yaml

# Create Loki service file
sudo tee /etc/systemd/system/loki.service > /dev/null <<EOF
[Unit]
Description=Loki Service
After=network.target

[Service]
ExecStart=/usr/local/bin/loki -config.file=/etc/loki/local-config.yaml
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

# Reload systemd and start Loki
sudo systemctl daemon-reload
sudo systemctl enable loki
sudo systemctl start loki

# Check Loki status
sudo systemctl status loki

В этом разделе мы загружаем бинарный файл Loki версии 2.8.2 из официального репозитория Grafana на GitHub и перемещаем его в каталог /usr/local/bin для глобального доступа. После назначения прав на выполнение мы создаём каталог конфигурации /etc/loki и получаем стандартный файл loki-local-config.yaml. Затем мы определяем сервис systemd для Loki, создавая файл юнита службы, который гарантирует запуск Loki с правильной конфигурацией и автоматический перезапуск в случае сбоя. Наконец, мы перезагружаем демон systemd, чтобы он распознал новую службу, включаем её запуск при загрузке и запускаем службу Loki. Вы можете убедиться, что она запущена, с помощью команды sudo systemctl status loki.

4. Теперь перейдём к Promtail.

# Download Promtail binary
PROMTAIL_VERSION="2.8.2"
wget https://github.com/grafana/loki/releases/download/v${PROMTAIL_VERSION}/promtail-linux-amd64.zip
unzip promtail-linux-amd64.zip
sudo mv promtail-linux-amd64 /usr/local/bin/promtail
sudo chmod +x /usr/local/bin/promtail

# Create Promtail config directory
sudo mkdir -p /etc/promtail

# Create Promtail config file to collect system logs, read journal and /var/log/syslog
sudo tee /etc/promtail/promtail-config.yaml > /dev/null <<EOF
server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /var/lib/promtail/positions.yaml

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

scrape_configs:
  - job_name: system
    static_configs:
      - targets:
          - localhost
        labels:
          job: varlogs
          __path__: /var/log/**/*.log
  - job_name: journal
    journal:
      max_age: 12h
      path: /var/log/journal
      labels:
        job: systemd-journal
    relabel_configs:
      - source_labels: ['__journal__systemd_unit']
        target_label: 'unit'
EOF

# Create directory for promtail positions file
sudo mkdir -p /var/lib/promtail
sudo chown -R syslog:adm /var/lib/promtail

# Create Promtail systemd service file
sudo tee /etc/systemd/system/promtail.service > /dev/null <<EOF
[Unit]
Description=Promtail Service
After=network.target

[Service]
User=syslog
Group=adm
ExecStart=/usr/local/bin/promtail -config.file=/etc/promtail/promtail-config.yaml
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

# Reload systemd, enable and start promtail
sudo systemctl daemon-reload
sudo systemctl enable promtail
sudo systemctl start promtail

# Check Promtail status
sudo systemctl status promtail

На этом этапе мы загружаем и устанавливаем Promtail (v2.8.2), агент для отправки логов в Loki, перемещая бинарный файл в /usr/local/bin и делая его исполняемым. Затем мы создаём конфигурационный файл promtail-config.yaml, который собирает логи из /var/log/**/*.log и системного журнала. Promtail настраивается для отправки логов в локальный экземпляр Loki, работающий на порту 3100. Также создаётся каталог для хранения информации о позициях чтения логов, и устанавливаются права собственности syslog:adm для доступа. Далее мы создаём файл службы systemd, который гарантирует, что Promtail работает под соответствующим пользователем/группой и автоматически перезапускается при сбое. Наконец, служба включается для запуска при загрузке, запускается немедленно, и проверяется ее статус, чтобы убедиться, что она работает должным образом.

В конфигурационном файле Promtail, расположенном по адресу /etc/promtail/promtail-config.yaml в разделе clients, необходимо заменить localhost на публичный IP-адрес вашего экземпляра EC2, на котором запущен Loki. Это гарантирует, что Promtail сможет корректно отправлять логи в Loki по сети. Например:

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

5. Теперь, когда все сервисы запущены и работают, перейдем к настройке Loki на в Grafana. Сначала войдите в Grafana, используя учетные данные по умолчанию (admin/ admin) и установите новый пароль, когда появится соответствующий запрос. После того, как вы окажетесь на главной странице Grafana, выполните следующие действия:

  1. Нажмите кнопку «Add data source».
  2. В строке поиска введите “Loki” и выберите его из списка.
  3. В поле URL укажите публичный IP EC2 с портом 3100, например:
  4. http://<EC2_PUBLIC_IP>:3100
  5. Нажмите Save & test.

Если все настроено правильно и служба Loki запущена, вы увидите зеленую галочку, указывающую на то, что Grafana успешно подключилась к Loki.

6. Теперь, когда Loki добавлен в качестве источника данных, вернитесь в Grafana и выполните следующие действия для визуализации логов:

  1. Нажмите «Dashboards»«New»«Add Visualization».
  2. В разделе запроса:
  • В качестве Data source выберите Loki.
  • В поле Label выберите job и укажите значение varlogs.
  • Добавьте фильтр по метке filename и выберите любой файл логов, который хотите просмотреть.

3. Нажмите «Run query», чтобы получить логи.

4. В правой части экрана измените Visualization type на Logs.

Если все настроено корректно, вы увидите живой поток логов, поступающих в Grafana через Loki.

7. Наконец, в правой части экрана вы найдете следующие варианты:

  • Сохранить дашборд (Save the dashboard) под подходящим именем, например, "System Logs from Promtail".
  • Настроить панель(Customize the panel) — обновить заголовки, интервалы обновления, макет или продублировать панели для мониторинга нескольких логов.
  • При желании можно включить автоматическое обновление(auto-refresh) (например, каждые 5 или 10 секунд), чтобы просматривать логи в режиме реального времени.

Это завершает процесс настройки Loki, Promtail и Grafana для централизованного просмотра системных логов.

Заключение

Итак, это полное практическое руководство по началу работы с Loki и Promtail, а также по тому, как оживить логи с помощью панелей мониторинга Grafana.

На этом все! Спасибо за внимание! Если статья была интересна, подпишитесь на телеграм-канал usr_bin, где будет еще больше полезной информации.