Модуль локального сбора логов (Vector)
Модуль локального сбора логов на базе Vector собирает, агрегирует и передает логи.
Vector является инструментом для обработки и передачи данных с открытым исходным кодом, написанном на Rust. В основе архитектуры Vector три основных компонента:
- Sources (Источники) - компоненты, которые получают или собирают данные.
- Transforms (Преобразования) - компоненты, которые изменяют или фильтруют данные.
- Sinks (Получатели) - компоненты, которые отправляют данные во внешние системы.
Логи кластера доступны в графическом интерфейсе на вкладке Логи дашборда кластера, если выполнены условия:
- В кластере включен модуль локального сбора логов (Vector) (
shturval-log-collector). - В кластере управления работает компонент управления модуля мониторинга Victoria Metrics Agent (
shturval-metrics-collector).
Установка модуля и базовая конфигурация
По умолчанию модуль устанавливается в клиентские кластеры и кластер управления во включенном состоянии. Для настройки конфигурации перейдите на страницу Установленные сервисы раздела Сервисы и репозитории, найдите Модуль локального сбора логов и нажмите Управлять.
Если в кластере модуль отсутствует, перейдите на страницу Доступные чарты раздела Сервисы и репозитории. На вкладке 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-auth | Осуществляет аутентификацию пользователей в платформу “Штурвал”. Публикует записи об аутентификации в стандартный поток вывода 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).
- Чтобы настроить интеграцию, подготовьте ShturvalServicePatch для применения к спецификации (ssc) Модуля локального сбора логов (
shturval-log-collector).
Пример ShturvalServicePatch
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: <имя ресурса>
spec:
shturvalServiceConfigName: shturval-log-collector
customvalues:
shturval:
k8s_audit:
enable: true
sinks:
siem:
type: socket
inputs:
- dedot_specific_fields
address: "<ваше значение параметра>"
mode: <ваше значение параметра>
encoding:
codec: json
journald:
sinks:
siem:
type: socket
inputs:
- journald
address: "<ваше значение параметра>"
mode: <ваше значение параметра>
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: "<ваше значение параметра>"
mode: <ваше значение параметра>
encoding:
codec: json
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
metadata.name |
Имя ShturvalServicePatch | string | shturval-log-collector-siem |
address |
Сокет (IP-адрес и порт) SIEM | string | 10.11.12.13:514 |
mode |
Протокол подключения | string | udp |
В приведенной спецификации в SIEM будут направлены логи: k8s_logs, journald и k8s_audit. Вы можете переопределить перечень направляемых логов. Для этого в блоке shturval удалите ненужный блок с логами.
- В кластере загрузите с помощью импорта манифестов подготовленный ShturvalServicePatch.
Скриншот

После загрузки ShturvalServicePatch потребуется некоторое время для применения изменений.
- Чтобы перейти к просмотру примененного ShturvalServicePatch:
- В кластере из раздела Сервисы и репозитории откройте страницу Установленные сервисы.
- Найдите Модуль локального сбора логов (shturval-log-collector) и перейдите к управлению.
- Когда ShturvalServicePatch будет применен, на вкладке Сервис статус обновится до Patched, а на вкладке Примененные PatchSSC в списке отобразится загруженный ShturvalServicePatch.
Скриншот


Vector имеет систему подтверждения доставки данных. При некорректной доставке данных выполняется повторная отправка, что позволяет нивелировать особенности UDP протокола.
Перенаправление логов
Для настройки перенаправления логов в кластере выполните следующие действия:
- Подготовьте ShturvalServicePatch для применения к спецификации (ssc) Модуля локального сбора логов (
shturval-log-collector), где в customvalues добавьте конфигурациюshturvalи укажите:
- тип логов, которые необходимо перенаправить: auditd, journald, k8s_audit, k8s_events,k8s_logs. В блоке
shturvalдолжны быть перечислены все типы логов, для которых требуется перенаправление. - получателей логов в
sinksи их данные для аутентификации, URL-адрес подключения, настройки TLS-соединения и буфера хранения логов до отправки. - при необходимости преобразования логов перед отправкой настройте конфигурацию в параметре
transforms.
Пример ShturvalServicePatch
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: <имя ресурса>
spec:
shturvalServiceConfigName: shturval-log-collector
customvalues:
shturval:
<ваше значение>: # Тип логов для перенаправления
enable: true # Включает отправку логов elasticsearch
transforms: {} # Преобразование логов
sinks: # Конечные точки для отправки данных
elastic_bank: # Имя получателя данных
type: <ваше значение параметра>
auth: # Настройки аутентификации для подключения к elasticsearch
user: <ваше значение параметра>
password: <ваше значение параметра>
strategy: <ваше значение параметра>
endpoints: # URL-адрес для подключения
- <ваше значение параметра>
tls: # Настройки TLS-соединения
verify_certificate: true
api_version: <ваше значение параметра>
buffer: # Настройка буфера для хранения логов перед отправкой
max_size: <ваше значение параметра>
type: <ваше значение параметра>
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
metadata.name |
Имя ShturvalServicePatch | string | shturval-log-collector-logs |
elastic_bank.type |
Тип получателя данных | string | elasticsearch |
elastic_bank.auth.user |
Имя учетной записи для подключения к Elasticsearch | string | username |
elastic_bank.auth.password |
Пароль учетной записи для подключения к Elasticsearch | string | 1234qwe |
elastic_bank.auth.strategy |
Стратегия аутентификации Elasticsearch | string | basic |
elastic_bank.endpoints |
Список URL-адресов для подключения | array | https://elastic.bank.local:9200/ |
elastic_bank.api_version |
Версия API Elasticsearch | string | v8 |
elastic_bank.buffer.max_size |
Размер буфера для хранения логов перед отправкой | int | 268435488 |
elastic_bank.buffer.type |
Тип буфера для хранения логов перед отправкой | string | disk |
Пример ShturvalServicePatch перенаправления auditd
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: shturval-log-collector-auditd
spec:
shturvalServiceConfigName: shturval-log-collector
customvalues:
shturval:
auditd:
sinks:
elastic_bank:
type: elasticsearch
inputs:
- auditd-fmt
bulk:
index: "{{ .Values.CLUSTER_NAME }}_auditd-%Y.%m.%d"
auth:
user: my_username
password: "my_password"
strategy: basic
endpoints:
- "https://external-opensearch.address:9200"
tls:
verify_certificate: false
api_version: "v8"
buffer:
max_size: 268435488
type: disk
Пример ShturvalServicePatch перенаправления k8s_audit
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: shturval-log-collector-kaudit
spec:
shturvalServiceConfigName: shturval-log-collector
customvalues:
shturval:
k8s_audit:
sinks:
elastic_bank:
type: elasticsearch
inputs:
- dedot_specific_fields
bulk:
index: "{{ .Values.CLUSTER_NAME }}_kaudit-%Y.%m.%d"
auth:
user: my_username
password: "my_password"
strategy: basic
endpoints:
- "https://external-opensearch.address:9200"
tls:
verify_certificate: false
api_version: "v8"
buffer:
max_size: 268435488
type: disk
Пример ShturvalServicePatch перенаправления k8s_events
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: shturval-log-collector-kevents
spec:
shturvalServiceConfigName: shturval-log-collector
customvalues:
shturval:
k8s_events:
sinks:
elastic_bank:
type: elasticsearch
inputs:
- delete_managed_fields
bulk:
index: "{{ .Values.CLUSTER_NAME }}_events-%Y.%m.%d"
auth:
user: my_username
password: "my_password"
strategy: basic
endpoints:
- "https://external-opensearch.address:9200"
tls:
verify_certificate: false
api_version: "v8"
buffer:
max_size: 268435488
type: disk
Пример ShturvalServicePatch перенаправления k8s_logs
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: shturval-log-collector-klogs
spec:
shturvalServiceConfigName: shturval-log-collector
customvalues:
shturval:
k8s_logs:
sinks:
elastic_bank:
type: elasticsearch
inputs:
- post_transforms_system_namespaces
bulk:
index: "{{ .Values.CLUSTER_NAME }}_logs-%Y.%m.%d"
auth:
user: my_username
password: "my_password"
strategy: basic
endpoints:
- "https://external-opensearch.address:9200"
tls:
verify_certificate: false
api_version: "v8"
buffer:
max_size: 268435488
type: disk
user-namespaces:
inputs:
- post_transforms_system_namespaces
bulk:
index: "{{ .Values.CLUSTER_NAME }}_user-logs-%Y.%m.%d"
auth:
user: my_username
password: "my_password"
strategy: basic
endpoints:
- "https://external-opensearch.address:9200"
tls:
verify_certificate: false
api_version: "v8"
buffer:
max_size: 268435488
type: disk
Пример ShturvalServicePatch перенаправления journald
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: shturval-log-collector-journald
spec:
shturvalServiceConfigName: shturval-log-collector
customvalues:
shturval:
journald:
sinks:
elastic_bank:
type: elasticsearch
inputs:
- journald
bulk:
index: "{{ .Values.CLUSTER_NAME }}_journald-%Y.%m.%d"
auth:
user: my_username
password: "my_password"
strategy: basic
endpoints:
- "https://external-opensearch.address:9200"
tls:
verify_certificate: false
api_version: "v8"
buffer:
max_size: 268435488
type: disk
- В кластере загрузите с помощью импорта манифестов подготовленный ShturvalServicePatch.
Скриншот

После загрузки ShturvalServicePatch потребуется некоторое время для применения изменений.
В syslog
Для перенаправления логов в syslog:
- Подготовьте ShturvalServicePatch для применения к спецификации (ssc) Модуля локального сбора логов (
shturval-log-collector), где в customvalues добавьтеshturvalс требуемыми параметрами.
Пример ShturvalServicePatch перенаправления в syslog
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: shturval-log-collector-syslog
spec:
shturvalServiceConfigName: shturval-log-collector
customvalues:
shturval:
k8s_audit:
sinks:
syslog:
type: socket
inputs:
- <ваше значение параметра>
address: <ваше значение параметра>
mode: <ваше значение параметра>
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
k8s_audit.sinks.syslog.inputs |
Преобразования (transforms) для логов k8s_audit. Перечень transforms определены в кастомном ресурсе ClusterVectorPipeline с именем k8s-audit | array | dedot_specific_fields |
k8s_audit.sinks.syslog.address |
Адрес syslog-сервера | string | 11.12.13.14:5000 |
k8s_audit.sinks.syslog.mode |
Тип протокола передачи | string | tcp |
В примере выше приведена настройка с использованием socket. С другими способами конфигурации параметров для перенаправления логов на syslog-сервер вы можете ознакомиться в официальной документации.
- В кластере загрузите с помощью импорта манифестов подготовленный ShturvalServicePatch.
Скриншот

После загрузки ShturvalServicePatch потребуется некоторое время для применения изменений.
Отключить отправку логов
Если необходимо отключить отправку всех логов:
- Подготовьте ShturvalServicePatch для применения к спецификации (ssc) Модуля локального сбора логов (
shturval-log-collector), где в customvalues добавьте конфигурациюshturvalи переопределите значение параметра platform_logs_enable вshturvalс true на false, как приведено ниже.
ShturvalServicePatch
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: shturval-log-collector-disable
spec:
shturvalServiceConfigName: shturval-log-collector
customvalues:
shturval:
platform_logs_enable: false
- В кластере загрузите с помощью импорта манифестов подготовленный ShturvalServicePatch.
Скриншот

После загрузки ShturvalServicePatch потребуется некоторое время для применения изменений.
Если необходимо отключить отправку одного типа логов в кластере
- Подготовьте ShturvalServicePatch для применения к спецификации (ssc) Модуля локального сбора логов (
shturval-log-collector), где в customvalues добавьте конфигурациюshturvalc типом лога и переопределите значение параметра enable с true на false, как приведено в примере.
Пример ShturvalServicePatch отключения логов journald
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: shturval-log-collector-disable-journald
spec:
shturvalServiceConfigName: shturval-log-collector
customvalues:
shturval:
journald:
enable: false
- В кластере загрузите с помощью импорта манифестов подготовленный ShturvalServicePatch.
Скриншот

После загрузки ShturvalServicePatch потребуется некоторое время для применения изменений.