---
title: Сбор логов из подов Kubernetes в домашней лаборатории
slug: kubernetes-pod-logs
canonical: https://shady2k.ru/posts/kubernetes-pod-logs/
date: 2025-04-21
kind: article
author: human
lang: ru
summary: "Централизованные логи домашнего кластера на VictoriaLogs и Vector:
  почему не ELK, Loki или Graylog, установка из Helm и сколько это съедает
  ресурсов."
tags:
  - homelab
  - 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](https://docs.victoriametrics.com/victorialogs/) работает как со структурированными так и неструктурированным логами. Каждая запись обязательно должна иметь текст. Также можно добавить дополнительные поля как ключ-значение `key=value`. Запись может быть представлена как [JSON](https://www.json.org/json-en.html) объект. Пример:

<table class="lntable" style="box-sizing: border-box; caption-side: bottom; border-collapse: collapse; display: block; overflow-x: auto; width: 868.011px; table-layout: auto; font-size: 14px; padding: 0px; border-width: 0px !important;"><tbody style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px !important; padding: 0px;"><tr style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px !important; padding: 0px;"><td class="lntd" style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px !important; padding: 0px; width: auto;"><pre tabindex="-1" style="box-sizing: border-box; font-family: Lato, &quot;Text Font&quot;, sans-serif; font-size: 14px; display: flex; margin-top: 0px; margin-bottom: 0px; overflow: auto hidden; background-color: transparent; border-radius: 8px; line-height: 16px;"><code class="lnt" style="box-sizing: border-box; font-family: &quot;Ubuntu Mono&quot;, &quot;DejaVu Sans Mono&quot;, &quot;Liberation Mono&quot;, &quot;Courier New&quot;, monospace; font-size: 14px; color: rgb(92, 104, 145); overflow-wrap: break-word; background-color: transparent; border-radius: 4px; padding: 2px 4px; word-break: normal; display: flex; flex-direction: column;">1
2
3
4
5
6
7
8</code></pre></td><td class="lntd" style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px !important; padding: 0px; width: auto;"><pre tabindex="0" class="chroma" style="box-sizing: border-box; font-family: Lato, &quot;Text Font&quot;, sans-serif; font-size: 14px; display: flex; margin-top: 0px; margin-bottom: 0px; overflow: auto hidden; background-color: transparent; border-radius: 8px; line-height: 16px;"><code class="language-json" data-lang="json" style="box-sizing: border-box; font-family: &quot;Ubuntu Mono&quot;, &quot;DejaVu Sans Mono&quot;, &quot;Liberation Mono&quot;, &quot;Courier New&quot;, monospace; font-size: 14px; color: rgb(253, 247, 200); overflow-wrap: break-word; background-color: transparent; border-radius: 4px; padding: 2px 4px; word-break: normal; display: flex; flex-direction: column;"><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;"><span class="p" style="box-sizing: border-box; color: rgb(104, 151, 229);">{</span>
</span></span><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">  <span class="nt" style="box-sizing: border-box; color: rgb(104, 151, 229);">"job"</span><span class="p" style="box-sizing: border-box; color: rgb(104, 151, 229);">:</span> <span class="s2" style="box-sizing: border-box;">"my-app"</span><span class="p" style="box-sizing: border-box; color: rgb(104, 151, 229);">,</span>
</span></span><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">  <span class="nt" style="box-sizing: border-box; color: rgb(104, 151, 229);">"instance"</span><span class="p" style="box-sizing: border-box; color: rgb(104, 151, 229);">:</span> <span class="s2" style="box-sizing: border-box;">"host123:4567"</span><span class="p" style="box-sizing: border-box; color: rgb(104, 151, 229);">,</span>
</span></span><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">  <span class="nt" style="box-sizing: border-box; color: rgb(104, 151, 229);">"level"</span><span class="p" style="box-sizing: border-box; color: rgb(104, 151, 229);">:</span> <span class="s2" style="box-sizing: border-box;">"error"</span><span class="p" style="box-sizing: border-box; color: rgb(104, 151, 229);">,</span>
</span></span><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">  <span class="nt" style="box-sizing: border-box; color: rgb(104, 151, 229);">"client_ip"</span><span class="p" style="box-sizing: border-box; color: rgb(104, 151, 229);">:</span> <span class="s2" style="box-sizing: border-box;">"1.2.3.4"</span><span class="p" style="box-sizing: border-box; color: rgb(104, 151, 229);">,</span>
</span></span><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">  <span class="nt" style="box-sizing: border-box; color: rgb(104, 151, 229);">"trace_id"</span><span class="p" style="box-sizing: border-box; color: rgb(104, 151, 229);">:</span> <span class="s2" style="box-sizing: border-box;">"1234-56789-abcdef"</span><span class="p" style="box-sizing: border-box; color: rgb(104, 151, 229);">,</span>
</span></span><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">  <span class="nt" style="box-sizing: border-box; color: rgb(104, 151, 229);">"_msg"</span><span class="p" style="box-sizing: border-box; color: rgb(104, 151, 229);">:</span> <span class="s2" style="box-sizing: border-box;">"failed to serve the client request"</span>
</span></span><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;"><span class="p" style="box-sizing: border-box; color: rgb(104, 151, 229);">}</span></span></span></code></pre></td></tr></tbody></table>

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

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

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

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

![](/images/kubernetes-pod-logs/01.webp)

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

![](/images/kubernetes-pod-logs/02.webp)

Посмотреть как работает [можно здесь](https://play-vmlogs.victoriametrics.com/).

## Источники

[VictoriaLogs](https://docs.victoriametrics.com/victorialogs/)

[UI for VictoriaLogs](https://play-vmlogs.victoriametrics.com/)
