Kubernetes
Logging
Rancher

Настройка централизованного логирования в Kubernetes кластере Rancher

Практическое руководство по настройке стека логирования с Go-сервисами на slog и отправкой логов в Loki

5 февраля 2026 Арно Фернандес

Введение

Эффективное логирование в распределенных системах — критически важная задача для мониторинга и отладки

В современных Kubernetes-кластерах, особенно при использовании Rancher для управления, централизованное логирование становится необходимостью. В этой статье я расскажу о своем опыте настройки стека логирования для Go-сервисов, использующих slog, с отправкой логов в Loki через Rancher Logging.

Мы рассмотрим конфигурацию ClusterOutput, настройку фильтров парсинга JSON и интеграцию с существующей инфраструктурой мониторинга.

Архитектура решения

Go-сервисы с slog

Современные Go-приложения используют структурированное логирование через пакет slog, который появился в Go 1.21.

  • JSON-форматированные логи по умолчанию
  • Поддержка уровней логирования (DEBUG, INFO, WARN, ERROR)
  • Контекстные атрибуты для трассировки
  • Высокая производительность

Rancher Logging Stack

Rancher предоставляет встроенное решение для логирования на основе Fluent Bit/Fluentd.

  • Сбор логов со всех нод кластера
  • Гибкая конфигурация через CRD
  • Поддержка множества output-плагинов
  • Интеграция с экосистемой Grafana

Реализация логирования в Go

package main

import (
	"context"
	"log/slog"
	"net/http"
	"os"
	"time"
)

func main() {
	// Настройка JSON-логгера
	handler := slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{
		Level: slog.LevelDebug,
	})
	logger := slog.New(handler)
	slog.SetDefault(logger)

	// Пример логирования с контекстом
	ctx := context.WithValue(context.Background(), "request_id", "req-12345")

	logger.Info("Сервис запущен",
		"port", 8080,
		"environment", "production",
	)

	http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
		start := time.Now()

		logger.Info("http",
			"method", r.Method,
			"path", r.URL.Path,
		)

		// Бизнес-логика...
		time.Sleep(50 * time.Millisecond)

		logger.Info("Запрос обработан",
			"duration_ms", time.Since(start).Milliseconds(),
			"status", 200,
		)

		w.WriteHeader(http.StatusOK)
		w.Write([]byte(`{"status": "ok"}`))
	})

	logger.Info("HTTP-сервер запущен", "addr", ":8080")
	http.ListenAndServe(":8080", nil)
}

Конфигурация Rancher Logging

ClusterOutput для Loki

Определение вывода логов в систему Loki

clusteroutput-loki.yaml
apiVersion: logging.banzaicloud.io/v1beta1
kind: ClusterOutput
metadata:
  name: loki-output
  namespace: cattle-logging-system
spec:
  loki:
    url: http://loki.monitoring.svc.cluster.local:3100
    labels:
      app: kubernetes
    buffer:
      timekey: 1m
      timekey_wait: 10s
      timekey_use_utc: true

Пояснение ключевых параметров:

  • key_name: message — указывает, что JSON находится в поле message
  • parse.type: json — активирует JSON-парсер
  • remove_key_name_field: true — удаляет исходное поле message после парсинга
  • reserve_data: true — сохраняет все остальные поля записи
  • reserve_time: true — сохраняет временную метку из лога

Результаты и преимущества

Централизованный поиск

Все логи доступны в едином интерфейсе Grafana с мощным языком запросов LogQL

Структурированные данные

JSON-парсинг позволяет фильтровать и агрегировать логи по любому полю: уровень, метод, длительность

Производительность

Fluent Bit эффективно обрабатывает большие объемы данных с минимальным overhead

Лучшие практики

  1. Используйте структурированное логирование — всегда логируйте в JSON формате с четкой схемой полей
  2. Добавляйте контекстные поля — request_id, user_id, correlation_id для трассировки запросов
  3. Настройте уровни логирования — DEBUG для разработки, INFO для продакшена, ERROR для критических ситуаций
  4. Мониторьте объем логов — настройте retention policy в Loki и алерты на аномальный рост объема
  5. Тестируйте парсинг — убедитесь, что ваши JSON-логи корректно парсятся фильтрами Fluent Bit

Заключение

Настройка централизованного логирования в Kubernetes кластере Rancher с использованием Go-сервисов на slog и Loki предоставляет мощное решение для мониторинга распределенных систем.

Ключевым преимуществом является возможность использовать структурированные логи для продвинутого анализа, создания дашбордов и настройки алертов на основе конкретных полей логов.

Представленная конфигурация с фильтром парсинга JSON позволяет эффективно извлекать структурированные данные из логов Go-приложений и использовать их в полной мере в экосистеме Grafana/Loki.

Нужна помощь?

Нужна помощь с настройкой логирования или инфраструктуры Kubernetes? Свяжитесь с нами.

Связаться с нами