Модуль локального сбора логов (Vector)
Начиная с версии 2.9 Модуль локального сбора логов на базе Fluentbit заменен на Модуль локального сбора логов на базе 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.
В текущем релизе используется Vector версии 0.44.0, Vector Operator версии 0.1.2.
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 в локальное хранилище |
| Модуль централизованного хранения логов | shturval-logs-operator | Хранит записи журналов регистрации событий. Предоставляет 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).
Обратите внимание! При настроенной интеграции с SIEM логи продолжат маршрутизироваться в Модуль централизованного хранения логов (OpenSearch), если в кластере управления он включен.
Чтобы настроить интеграцию, необходимо внести изменения в спецификацию (ssc) Модуля локального сбора логов.
- В графическом интерфейсе кластера в боковом меню откройте раздел Сервисы и репозитории и перейдите на страницу Установленные сервисы, найдите Модуль локального сбора логов (shturval-log-collector), откройте карточку модуля и в блоке Спецификация сервиса добавьте customvalues, как в приведенном примере ниже.
Пример 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
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
address |
Сокет (IP-адрес и порт) SIEM | string | 10.11.12.13:514 |
mode |
Протокол подключения | string | udp |
В приведенной спецификации в SIEM будут направлены логи: k8s_logs, journald и k8s_audit. Вы можете переопределить перечень направляемых логов. Для этого в блоке shturval удалите ненужный блок с логами.
- Сохраните внесенные изменения.
Vector имеет систему подтверждения доставки данных, он выполняет повторную отправку данных при некорректной доставке. Это позволяет нивелировать особенности UDP протокола.
Перенаправление логов
Для настройки перенаправления логов выполните следующие действия:
-
В кластере, где нужно сделать перенаправление логов, в боковом меню откройте раздел Сервисы и репозитории и перейдите на страницу Установленные сервисы, найдите и откройте Модуль локального сбора логов (shturval-log-collector).
-
В разделе Спецификация сервиса добавьте конфигурацию
shturvalи укажите:
- тип логов, которые необходимо перенаправить: auditd, journald, k8s_audit, k8s_events,k8s_logs. В блоке
shturvalдолжны быть перечислены все типы логов, для которых требуется перенаправление. - получателей логов в
sinksи их данные для аутентификации, URL-адрес подключения, настройки TLS-соединения и буфера хранения логов до отправки. - при необходимости преобразования логов перед отправкой настройте конфигурацию в параметре
transforms.
Пример 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: <ваше значение параметра>
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
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 |
Пример перенаправления auditd
shturval:
auditd:
enable: true
sinks:
platform-opensearch:
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
Пример перенаправления k8s_audit
shturval:
k8s_audit:
enable: true
sinks:
platform-opensearch:
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
Пример перенаправления k8s_events
shturval:
k8s_events:
enable: true
sinks:
platform-opensearch:
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
Пример перенаправления k8s_logs
shturval:
k8s_logs:
enable: true
source_params:
node_annotation_fields:
node_labels: ""
pod_annotation_fields:
pod_annotations: ""
pod_labels: ""
pre_transforms:
source: |
del(.file)
del(.source_type)
type: remap
post_transforms_system_namespaces:
source: |
del(.kubernetes.namespace_labels)
type: remap
post_transforms_user_namespaces:
source: |
del(.kubernetes.namespace_labels)
type: remap
sinks:
platform-opensearch:
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
Пример перенаправления journald
shturval:
journald:
enable: true
sinks:
platform-opensearch:
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
customvalues
vector:
agent:
volumes:
- name: var-log
hostPath:
path: /var/log/
type: ''
- name: journal
hostPath:
path: /var/log/journal/
type: ''
- name: var-lib
hostPath:
path: /var/lib/
type: ''
volumeMounts:
- name: var-log
mountPath: /var/log/
- name: journal
mountPath: /run/log/journal/
- name: var-lib
mountPath: /var/lib/
- Если необходимо отключить отправку логов в Opensearch, переопределите значение sink c именем
platform-opensearchвshturvalдля одного или всех типов логов, как приведено в примере.
Пример customvalues
shturval:
k8s_logs:
enable: true
sinks:
platform-opensearch:
Обратите внимание! Если для kube-audit (k8s_audit) логов отключить направление в Opensearch, то они не будут доступны для просмотра на вкладке “События безопасности” дашбордов в графическом интерфейсе платформы “Штурвал”.
- Для перенаправления логов в syslog добавьте в спецификацию сервиса блок
shturvalс требуемыми параметрами.
Пример перенаправления в syslog
shturval:
k8s_audit:
enable: true
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-сервер вы можете ознакомиться в официальной документации.
- Когда настройка спецификации модуля завершена, сохраните внесенные изменения. Потребуется некоторое время для применения изменений.