Модуль локального сбора логов (Vector)
Модуль локального сбора логов на базе Vector. Модуль собирает, агрегирует и передает логи.
Vector является инструментом для обработки и передачи данных с открытым исходным кодом, написанном на Rust. В основе архитектуры Vector три основных компонента:
- Sources (Источники) - компоненты, которые получают или собирают данные.
- Transforms (Преобразования) - компоненты, которые изменяют или фильтруют данные.
- Sinks (Получатели) - компоненты, которые отправляют данные во внешние системы.
Установка модуля и базовая конфигурация
По умолчанию модуль устанавливается в клиентские кластеры и кластер управления во включенном состоянии. Для настройки конфигурации перейдите на страницу Установленные сервисы раздела Сервисы и репозитории, найдите Модуль локального сбора логов и нажмите Управлять.
Если в кластере модуль отсутствует, перейдите на страницу Доступные чарты раздела Сервисы и репозитории. На вкладке shturval выберите чарт shturval-log-collector и нажмите Установить.
Выберите необходимую версию чарта, а также неймспейс logging. После выбора версии чарта в правой части экрана отобразятся Доступные параметры конфигурации для сервиса (values). Пропишите в блоке Спецификация сервиса необходимые параметры в качестве customvalues.
Обратите внимание! Для работы модуля должен быть включен CRD для модуля сбора логов (shturval-log-collector-crds).
Для настройки модуля локального сбора логов (Vector) используется Vector Operator.
Поддерживаемые Vector Operator кастомные ресурсы (Kubernetes Custom Resources)
| Kind | Group | Version |
|---|---|---|
| ClusterVectorAggregator | observability.kaasops.io | v1alpha1 |
| ClusterVectorPipeline | observability.kaasops.io | v1alpha1 |
| Vector | observability.kaasops.io | v1alpha1 |
| VectorAggregator | observability.kaasops.io | v1alpha1 |
| VectorPipeline | observability.kaasops.io | v1alpha1 |
Базовая настройка модуля включает кастомные ресурсы ClusterVectorPipeline и Vector, определяющие его конфигурацию. Просмотреть ClusterVectorPipeline и Vector вы можете в графическом интерфейсе платформы. В вашем кластере откройте страницу Кастомные ресурсы раздела Администрирование, найдите и раскройте API-группу observability.kaasops.io. Выберите CRD ClusterVectorPipeline или Vector, на странице со списком кастомных ресурсов перейдите к манифесту объекта.
Обратите внимание! Изменение базовой настройки может привести к ошибкам сбора, агрегации и анализа логов. При необходимости задайте конфигурацию с помощью создания нового ClusterVectorPipeline.
ClusterVectorPipeline в платформе Штурвал
Модуль локального сбора логов осуществляет сбор записей журналов из стандартного потока вывода stdout системных сервисов кластера.
Преднастроенные кастомные ресурсы ClusterVectorPipeline собирают и агрегируют логи кластера в соответствии с их типами.
Кастомные ресурсы ClusterVectorPipeline
| Наименование ClusterVectorPipeline | Описание |
|---|---|
| k8s-logs | Собирает логи контейнеров. При наличии лейбла у неймспейса shturval_tech/system-namespace логи агрегируются в k8s-logs, без указанного лейбла в k8s-user_logs |
| k8s-audit | Собирает логи из /var/log/kube-api-audit/audit.log |
| k8s-events | Собирает события из кластера Kubernetes |
| auditd | Собирает системные логи из журнала с _TRANSPORT = audit |
| journald | Собирает логи: containerd, kubelet, shturvald |
Источники сбора логов

Взаимодействие компонентов
| Наименование компонента | Системное название компонента | Описание |
|---|---|---|
| Модуль локального сбора логов | shturval-log-collector | Осуществляет сбор записей журналов из стандартного потока вывода stdout системных сервисов кластера. Вычитывает записи из пути /var/log/kube-api-audit/audit.log локального хранилища |
| Модуль оркестрации контейнеров | API-Server | Регистрирует запросы и записывает записи о зарегистрированных запросах в volume mount с типом hostpath /var/log/kube-api-audit/audit.log в локальное хранилище |
| Компонент хранения логов (кластер управления, клиентский кластер) | VLogs | Хранит записи журналов регистрации событий. Предоставляет API для получения записей журналов событий для Vector (shturval-log-collector) |
| Модуль программного управления Платформой (Компонент «Авторизация») | shturval-backend | Публикует события об авторизации запросов пользователей и системных учетных записей в стандартный поток вывода stdout |
| Модуль программного управления Платформой» (Компонент «Аутентификация») | shturval-backend | Осуществляет аутентификацию пользователей в платформу “Штурвал”. Публикует записи об аутентификации в стандартный поток вывода stdout |
| Модуль программного управления Платформой (Компонент «Права доступа») | shturval-backend | Осуществляет создание, изменение и удаление прав доступа пользователей и групп. Публикует записи о назначении, изменении и удалении прав доступа в стандартный поток вывода stdout |
| Среда исполнения контейнеров | Containerd | Регистрирует события запуска и остановки контейнеров. Публикует записи о запуске и остановке контейнеров в стандартный поток вывода stdout |
Сбор и обработка логов
Для конфигурации сбора и обработки логов вы можете настроить ClusterVectorPipeline. Спецификация (spec) ClusterVectorPipeline содержит блоки:
sources- определяет источники данных;transforms- определяет преобразования данных;sinks- определяет конечные точки для отправки данных.
Пример конфигурации для обработки логов Kubernetes
apiVersion: observability.kaasops.io/v1alpha1
kind: ClusterVectorPipeline
metadata:
name: k8s-logs
namespace: monitoring
spec:
# Источник данных - логи Kubernetes
sources:
kubernetes_logs:
type: kubernetes_logs
# Цепочка трансформаций
transforms:
# Преобразование временной метки
remap_timestamp:
type: remap
inputs: [kubernetes_logs]
source: |
parsed_time = parse_timestamp!(.timestamp, format: "%+")
if is_timestamp(parsed_time) {
."@timestamp" = parsed_time
del(.timestamp)
}
# Замена точек на подчеркивания в именах полях
dedot_fields:
type: remap
inputs: [remap_timestamp]
source: |
. = map_keys(., recursive: true) -> |key| { replace(key, ".", "_") }
# Фильтрация системных пространств имен
filter_system_namespaces:
type: filter
inputs: [dedot_fields]
condition: |
exists(.kubernetes.namespace_labels."shturval_tech/system-namespace")
# Фильтрация пользовательских пространств имен
filter_user_namespaces:
type: filter
inputs: [dedot_fields]
condition: |
!exists(.kubernetes.namespace_labels."shturval_tech/system-namespace")
Особенности обработки логов:
- Использует встроенный источник
kubernetes_logs; remap_timestamp: парсинг и преобразование временных меток;dedot_fields: замена точек на подчеркивания в именах полей;filter_system_namespacesиfilter_user_namespaces: разделение логов по типу пространств имен.
Обратите внимание! Для применения изменений конфигурации необходимо перевести Модуль локального сбора логов (shturval-log-collector) в ручной режим управления (Manual), при выборе управления в автоматическом режиме (Auto) применяется базовая конфигурация.
Рекомендации при конфигурации
- Используйте понятные имена для пайплайнов;
- Следуйте единому стилю именования компонентов;
- Выстраивайте логичную цепочку преобразований;
- Используйте входы (
inputs) для определения последовательности; - Фильтруйте ненужные данные как можно раньше;
- Используйте четкие условия фильтрации;
- Минимизируйте количество трансформаций;
- Избегайте дублирования обработки данных.
Интеграция с SIEM
Для интеграции с системой управления информационной безопасностью и событиями безопасности SIEM в кластере должен быть включен Модуль локального сбора логов (Vector).
Чтобы настроить интеграцию, необходимо внести изменения в спецификацию (ssc) Модуля локального сбора логов.
- В графическом интерфейсе кластера перейдите на страницу Установленные сервисы раздела Сервисы и Репозитории, найдите Модуль локального сбора логов (shturval-log-collector), откройте карточку модуля и в блоке Спецификация сервиса добавьте customvalues, как в приведенном примере ниже.
customvalues
shturval:
k8s_audit:
enable: true
sinks:
siem:
type: socket
inputs:
- dedot_specific_fields
address: "10.11.12.13:514"
mode: udp
encoding:
codec: json
journald:
sinks:
siem:
type: socket
inputs:
- journald
address: "10.11.12.13:514"
mode: udp
encoding:
codec: json
k8s_logs:
transforms:
filter_backend:
condition: |
.kubernetes.pod_namespace == "shturval-backend" &&
((.kubernetes.container_name == "opa" && starts_with(string!(.kubernetes.pod_name), "shturval-backend-")) || (.kubernetes.container_name == "authn" &starts_with(string!(.kubernetes.pod_name), "authn-")))
inputs:
- filter_system_namespaces
type: filter
sinks:
siem:
type: socket
inputs:
- filter_backend
address: "10.11.12.13:514"
mode: udp
encoding:
codec: json
Где вместо 10.11.12.13 в параметрах address задайте IP-адрес SIEM и порт 514. В примере подключение осуществляется по UDP протоколу. При необходимости вы можете выполнить подключение по TCP. Для этого вместо udp задайте tcp в параметрах mode и укажите требуемый порт.
В приведенной спецификации в SIEM будут направлены логи: k8s_logs, journald и k8s_audit. Вы можете переопределить перечень направляемых логов. Для этого в блоке shturval удалите ненужный блок с логами.
- Сохраните внесенные изменения.
Vector имеет систему подтверждения доставки данных, он выполняет повторную отправку данных при некорректной доставке. Это позволяет нивелировать особенности UDP протокола.