Сбор логов из подов Kubernetes в домашней лаборатории

Сегодня я расскажу о том, как быстро и эффективно собрать логи в моей домашней лаборатории, а также развернуть систему управления логами VictoriaLogs. VictoriaLogs от VictoriaMetrics — это эффективная, быстрая и простая в настройке система для централизованного сбора, хранения и анализа логов.

· 3 минуты на чтение
Сбор логов из подов Kubernetes в домашней лаборатории

Введение

Сегодня я расскажу о том, как быстро и эффективно собрать логи в моей домашней лаборатории, а также развернуть систему управления логами VictoriaLogs. VictoriaLogs от VictoriaMetrics — это эффективная, быстрая и простая в настройке система для централизованного сбора, хранения и анализа логов.

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

VictoriaLogs предоставляет несколько значительных преимуществ по сравнению с другими решениями:

  • Высокая производительность и низкое потребление ресурсов. Она идеально подходит для небольших и средних лабораторий.
  • Поддержка Elasticsearch API. Полностью совместима с существующими инструментами, такими как Kibana и Grafana.
  • Минимальные требования к оборудованию. Хорошо подходит для домашней среды с ограниченными ресурсами.
  • Удобная интеграция. Простое развертывание с помощью Helm-чарта.
  • Эффективное хранение. Использует сжатие и оптимизированное хранение, что позволяет дольше хранить логи на минимальных ресурсах.
  • Встроенный UI для просмотра логов. Предоставляет собственный веб-интерфейс для удобного поиска и анализа логов без необходимости сторонних решений.

Почему не выбрали другие популярные решения?

На рынке представлены различные популярные решения для сбора и анализа логов:

  • ELK Stack (Elasticsearch, Logstash, Kibana): высокие требования к ресурсам и сложность в управлении.
  • Loki от Grafana Labs: хорошее решение, но имеет менее эффективное хранение и поиск в случае большого объёма логов.
  • Graylog: сложнее в настройке и требует более значительных ресурсов.

VictoriaLogs была выбрана за её простоту, эффективность хранения и минимальные ресурсы, идеально подходящие для домашней лаборатории.

Подготовка и развертывание

Создание Namespace

Создадим отдельный namespace для логирования. Выделение отдельного namespace позволяет лучше изолировать ресурсы и проще управлять правами доступа:

apiVersion: v1
kind: Namespace
metadata:
  name: logging
  labels:
    pod-security.kubernetes.io/enforce: privileged
    pod-security.kubernetes.io/enforce-version: latest

Повышение привилегий (privileged) необходимо, так как система логирования может требовать доступа к определённым ресурсам и файлам на хостах Kubernetes для полноценного сбора логов.

Применяем его:

kubectl apply -f ./victoria-logs/default.yaml

Установка с помощью Helm

Сначала получаем конфигурационный файл для дальнейших изменений:

helm show values vm/victoria-logs-single > ./victoria-logs/values.yaml

Обратите внимание, что в values.yaml необходимо явно включить интеграцию с Vector, так как по умолчанию она отключена:

vector:
  enabled: true

Затем устанавливаем VictoriaLogs:

helm upgrade vls vm/victoria-logs-single \
  --install \
  --create-namespace \
  --kubeconfig ./kubeconfig \
  --namespace logging \
  --version 0.9.6 \
  --values ./victoria-logs/values.yaml

Настройка Ingress

Для доступа извне настраиваем Ingress:

kubectl apply -f ./victoria-logs/ingress.yml --kubeconfig ./kubeconfig

Пример минимального файла Ingress (ingress.yml):

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: victoria-logs-ingress
  namespace: logging
spec:
  rules:
    - host: vlogs.local
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: vls-victoria-logs-single-server
                port:
                  number: 9428

Подключение Vector для сбора логов

VictoriaLogs отлично интегрируется с Vector, который мы используем для сбора логов. Vector автоматически собирает логи из Kubernetes и отправляет их в VictoriaLogs.

VictoriaLogs работает как со структурированными так и неструктурированным логами. Каждая запись обязательно должна иметь текст. Также можно добавить дополнительные поля как ключ-значение key=value. Запись может быть представлена как JSON объект. Пример:

1
2
3
4
5
6
7
8
{
  "job": "my-app",
  "instance": "host123:4567",
  "level": "error",
  "client_ip": "1.2.3.4",
  "trace_id": "1234-56789-abcdef",
  "_msg": "failed to serve the client request"
}

Проверка работоспособности

После завершения установки можно убедиться, что система успешно работает, зайдя по указанному домену (vlogs.local) или проверив состояние pod'ов командой:

kubectl get pods -n logging --kubeconfig ./kubeconfig

Также можно использовать встроенный веб-интерфейс VictoriaLogs для анализа и визуализации собранных логов.

А вот потребление ресурсов:

Посмотреть как работает можно здесь.

Источники

VictoriaLogs
Documentation for VictoriaMetrics, VictoriaLogs, Operator, Managed VictoriaMetrics and vmanomaly
UI for VictoriaLogs
Explore your log data with VictoriaLogs UI