Эффективное логирование: интеграция 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: Prefixhelm 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
Подписывайтесь на телеграм-канал Мониторим ИТ, там еще больше полезной информации о мониторинге!