September 2

Эффективное логирование: интеграция Promtail с VictoriaLogs

Это перевод оригинальной статьи Efficient Logging: Integrating Promtail with VictoriaLogs.

Перевод сделан специально для телеграм-канала Мониторим ИТ. Подписывайтесь! Там еще больше полезных постов о мониторинге.

В мире мониторинга Grafana Loki долгое время считалась «лучшим» инструментом для агрегации логов. Однако по мере роста объемов логов многие команды сталкиваются с трудностями, связанными с требованиями Loki к ресурсам и сложностью LogQL. На помощь приходит VictoriaLogs — высокопроизводительная и экономичная база данных логов от команды VictoriaMetrics, совместимая с Loki по протоколу IP.

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

Почему именно VictoriaLogs?

Прежде чем перейти к вопросу «как», давайте поговорим о вопросе «почему». VictoriaLogs предлагает ряд преимуществ:

  • Низкое потребление ресурсов: использует значительно меньше оперативной памяти и ресурсов процессора по сравнению с Loki.
  • Высокий уровень сжатия: обеспечивает более высокую эффективность хранения.
  • LogsQL: Простой, но мощный язык запросов, разработанный специально для анализа логов
  • Совместимость с Wire: поддерживает Loki Push API, что означает отсутствие необходимости переделывать существующие агенты Promtail или Fluentbit.

1. Центральное хранилище: VictoriaLogs Single VictoriaLogs Single (Helm)

В качестве центрального «мозга» системы логирования используется Helm-чарт victoria-logs-single. Он идеально подходит для большинства сред среднего масштаба, где простота и вертикальное масштабирование предпочтительнее сложности кластерной архитектуры.

В файле values.yaml основной акцент делается на производительность и политику хранения данных. VictoriaLogs не просто хранит логи — он агрессивно их сжимает.

server:
  ingress:
    enabled: true
    annotations:
      kubernetes.io/ingress.class: nginx
      cert-manager.io/cluster-issuer: <the issuer>
      # enable if you have enabled basic auth
      # nginx.ingress.kubernetes.io/auth-type: basic
      # nginx.ingress.kubernetes.io/auth-secret: victoria-logs-basic-auth
      # nginx.ingress.kubernetes.io/auth-realm: 'Authentication Require

    extraLabels: {}
    hosts:
      - name: vlogs.example.com
        path:
          - /
        port: http
    tls:
      - secretName: vlogs-tls
        hosts:
          - vlogs.example.com
    ingressClassName: "nginx"
    pathType: Prefix

Для развертывания:

helm repo add vm https://victoriametrics.github.io/helm-charts/
helm install vls vm/victoria-logs-single -f values.yaml -n logging

2. Мониторинг периферии сети: Docker Compose + Promtail

Одна из лучших особенностей этого репозитория — это конфигурация «Edge». Если у вас есть автономный сервер (VPS, bare metal или удаленный узел), вам не нужен Kubernetes для его мониторинга. Вы можете развернуть Promtail через Docker Compose для сбора локальных системных логов и логов контейнеров.

Стратегия Docker Compose

docker-compose.yml монтирует каталоги логов хоста непосредственно в контейнер Promtail, позволяя ему «следить» за файлами, как если бы он работал непосредственно на хосте.

version: '3'

services:
  promtail:
    image: grafana/promtail:latest
    container_name: promtail
    restart: always
    volumes:
      - ./config.yml:/etc/promtail/config.yml
      - /var/log/nginx:/var/log/nginx
    command:
      - -config.file=/etc/promtail/config.yml

Мост для приёма данных (Ingestion Bridge)

config.yml выступает в роли связующего звена. Поскольку VictoriaLogs совместима с Loki по протоколу Wi-Fi, Promtail думает, что общается с Loki, но на самом деле использует преимущества превосходного механизма хранения данных VictoriaLogs.

server:
  http_listen_port: 90809080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
- url: https://vlogs.example.com/insert/loki/api/v1/push
  basic_auth:
    username: user
    password: password

scrape_configs:
- job_name: "nginx-access"
  static_configs:
  - targets:
      - localhost
    labels:
      job: "frontend-nginx"
      app: "frontend"
      namespace: "production"
      __path__: /var/log/nginx/access.log
  pipeline_stages:
    - regex:
        expression: "\"(?P<method>[A-Z]+)\\s+(?P<path>[^\\\"]+)\\s+HTTP/[0-9.]+\"\\s+(?P<status>[0-9]{3})\\s+[0-9]+\\s+\"[^\\\"]*\"\\s+\"[^\\\"]*\"\\s+\"(?P<ip_address>[^\\\"]*)\""
    - template:
        source: level
        template: '{{ if or (eq .status "200") (eq .status "201") (eq .status "202") }}info{{ else if or (eq .status "301") (eq .status "302") (eq .status "400") (eq .status "404") (eq .status "403") (eq .status "429") (eq .status "499") }}warning{{ else }}error{{ end }}'
    - labels:
        status:
        method:
        path:
        ip_address:
        level:

3. Почему это работает лучше

Используя эту специфическую структуру репозитория, вы решаете сразу три проблемы:

  • Консистентность: используется одна и та же логика Promtail как для Kubernetes (через sidecar-контейнеры или DaemonSet), так и для автономных серверов.
  • Экономическая эффективность: VictoriaLogs обычно использует в 10 раз меньше оперативной памяти, чем Loki, и обеспечивает лучшее сжатие диска.
  • Удобство запросов: LogsQL позволяет выполнять полнотекстовый поиск и фильтрацию по меткам более интуитивно понятным способом, чем LogsQL, требующий большого количества конвейеров.

Источник: https://github.com/alfabytes/victoria-logs-promtail

Подписывайтесь на телеграм-канал Мониторим ИТ, там еще больше полезной информации о мониторинге!