Перейти к содержанию

Promtail

Ныне практически сдохший агент для сбора логов, разработанный как часть экосистемы Loki от Grafana. У него очень простой принцип работы (этим он мне и нравился) - собирает логи с файлов/журнал систем, добавляет метки и отправляет в Loki.

Но злая Grafana решила, что Grafana Alloy выйдет намного пизже, и сделала EOL до 2 марта 2026 года. Rest in peace.

А вообще нахер их, юзайте Vector.

Скачивание и установка

  1. Скачиваем бинарь с Github (последняя версия на момент проверки - 3.5.0, будем юзать её):
    curl -O -L "https://github.com/grafana/loki/releases/download/v3.5.0/promtail-linux-amd64.zip"
    
  2. Разархивируем:
    unzip "promtail-linux-amd64.zip"
    
  3. Выдаем права на выполнения:
    chmod a+x "promtail-linux-amd64"
    
  4. Перемещаем в /usr/local/bin:
    mv promtail-linux-amd64 /usr/local/bin/promtail
    

Настройка systemd сервиса и запуск

  1. Создаем юзера специально под promtail
    useradd --system promtail
    
  2. Создаем каталог под конфиг, скачиваем конфиг, выдаем права:
    mkdir -p /etc/promtail
    wget https://raw.githubusercontent.com/grafana/loki/v3.5.0/clients/cmd/promtail/promtail-local-config.yaml -O /etc/promtail/config.yml
    chown -R promtail:promtail /etc/promtail
    
  3. Настраиваем конфиг:

    server:
      http_listen_port: 9080
      grpc_listen_port: 0
    
    positions:
      filename: /tmp/positions.yaml
    
    clients:
      - url: http://localhost:3100/loki/api/v1/push
        external_labels:
          host: my-hostname # вот сюда укажите лейбл, который будет указываться на всех логах с этого сервера
    
    scrape_configs:
    
      # cбор системных логов
      - job_name: system_logs_scrape
        static_configs:
          - labels:
              job: var_logs
              __path__: /var/log/*.log
    
      # для сбора логов с докера, если не нужно - уберите   
      # если добавили, дайте доступ к докер sock
      # usermod -a -G docker promtail
      - job_name: scraper
        docker_sd_configs:
          - host: unix:///var/run/docker.sock
            refresh_interval: 5s
        relabel_configs:
          - source_labels: ["__meta_docker_container_name"]
            regex: "/(.*)"
            target_label: "container"
          - source_labels: ["__meta_docker_container_log_stream"]
            target_label: "logstream"
    

  4. Создаем файл systemd сервиса и заполняем его (я использую vi):

    vi /etc/systemd/system/promtail.service
    
    [Unit]
    Description=Promtail service
    After=network-online.target
    Wants=network-online.target
    
    [Service]
    Type=simple
    User=promtail
    ExecStart=/usr/local/bin/promtail -config.file /etc/promtail/config.yml
    TimeoutSec = 60
    Restart = on-failure
    RestartSec = 2
    
    [Install]
    WantedBy=multi-user.target
    

  5. Так как мы запускаемся от юзера promtail, у нас скорее всего не будет прав на логи, поэтому добавляем в группу adm:
    usermod -a -G adm promtail
    
  6. Включаем сервис и стартуем:
    systemctl enable promtail
    systemctl start promtail
    systemctl status promtail
    

Траблшутинг

Error creating promtail - Permission Denied

Если в логах видим вот такую ошибку:

msg="error creating promtail" error="open /tmp/positions.yaml: permission denied"

То скорее всего у вас нет прав на указанный файл или нет прав на директорию tmp.

Можно выдать права на файл:

chown promtail:promtail /tmp/positions.yaml