Логи
Компонент хранения логов (VLogs)
Архитектурно логи хранятся в кластере управления, но для каждого кластера теперь создается свой экземпляр хранения логов.
В этом релизе за развертывание экземпляра хранения логов отвечает компонент управления модуля мониторинга Victoria Metrics Agent (shturval-metrics-collector).
Логи кластера доступны в графическом интерфейсе на вкладке "Логи" дашборда кластера, если выполнены условия:
- В кластере включен модуль локального сбора логов Vector (shturval-log-collector).
- В кластере управления работает компонент управления модуля мониторинга Victoria Metrics Agent (shturval-metrics-collector).
Ротация логов
Экземпляр VictoriaLogs запускается в неймспейсе кластера (клиентского или управления) и контролируется оператором посредством кастомного ресурса "VLogs: logs" API-группы operator.victoriametrics.com (рисунок 524). Для управления нужно перейти в кластер управления, раздел "Администрирование" на страницу "Кастомные ресурсы". Затем следует выбрать экземпляр VLogs кластера, расположенного в неймспейсе с именем требуемого для конфигурации кластера (рисунок 10).

Рисунок 524 ‒ Оператор operator.victoriametrics.com

Рисунок 525 ‒ Выбор экземпляра VLogs кластера
Для настройки ротации журналов доступны следующие параметры:
- Срок хранения ‒ может принимать значения от 1d (один день) до 100y (сто лет):
spec: retentionPeriod: 1d - Максимальный объём данных, при котором происходит удаление разделов за предыдущие периоды:
spec: extraArgs: retention.maxDiskSpaceUsageBytes: 10MB - Общий размер диска, доступный для хранения журналов:
spec: storage: resources: requests: storage: 3Gi
Модуль локального сбора логов (Vector)
Модуль локального сбора логов собирает, агрегирует и передает логи.
Vector является инструментом для обработки и передачи данных с открытым исходным кодом, написанном на Rust. В основе архитектуры Vector три основных компонента:
- Sources (Источники) ‒ компоненты, которые получают или собирают данные;
- Transforms (Преобразования) ‒ компоненты, которые изменяют или фильтруют данные;
- Sinks (Получатели) ‒ компоненты, которые отправляют данные во внешние системы.
Логи кластера доступны в графическом интерфейсе на вкладке "Логи" дашборда кластера, если выполнены условия:
- В кластере включен модуль локального сбора логов (Vector) (shturval-log-collector).
- В кластере управления работает компонент управления модуля мониторинга Victoria Metrics Agent (shturval-metrics-collector).
Установка модуля и базовая конфигурация
По умолчанию модуль устанавливается в клиентские кластеры и кластер управления во включенном состоянии.
Для настройки конфигурации нужно:
- перейти в графический интерфейс кластера, в боковом меню открыть раздел "Сервисы и репозитории" и перейти на страницу "Установленные сервисы";
- найти "Модуль локального сбора логов" и нажать
Управлять; - если в кластере модуль отсутствует, в боковом меню открыть раздел "Сервисы и репозитории" и перейти на страницу "Доступные чарты"; на вкладке "shturval" выбрать чарт shturval-log-collector и нажать
Установить; - выбрать необходимую версию чарта, а также неймспейс logging;
- после выбора версии чарта в правой части экрана отобразятся "Доступные параметры конфигурации для сервиса (values)". Следует прописать в блоке "Спецификация сервиса" необходимые параметры в качестве customvalues (таблица 80).
Важно ‒ Для работы модуля должен быть включен CRD для модуля сбора логов (shturval-log-collector-crds).
Для настройки модуля локального сбора логов (Vector) используется Vector Operator.
Базовая настройка модуля включает кастомные ресурсы ClusterVectorPipeline и Vector, определяющие его конфигурацию. Просмотреть ClusterVectorPipeline и Vector можно в графическом интерфейсе Комплекса. Для этого в вашем кластере нужно открыть страницу "Кастомные ресурсы" раздела "Администрирование", найти и раскрыть API-группу observability.kaasops.io, выбрать CRD ClusterVectorPipeline или Vector, на странице со списком кастомных ресурсов перейти к манифесту объекта.
Следует обратить внимание, что изменение базовой настройки может привести к ошибкам сбора, агрегации и анализа логов. При необходимости можно задать конфигурацию с помощью создания нового ClusterVectorPipeline.
В текущем релизе используется Vector версии 0.44.0, Vector Operator версии 0.1.2.
ClusterVectorPipeline в Комплексе
Модуль локального сбора логов осуществляет сбор записей журналов из стандартного потока вывода stdout системных сервисов кластера.
Преднастроенные кастомные ресурсы ClusterVectorPipeline собирают и агрегируют логи кластера в соответствии с их типами (таблица 81).
Источники сбора логов
Взаимодействие компонентов Комплекса при сборе логов показано на рисунке 526. Описание компонентов приведено в таблице 82.

Рисунок 526 ‒ Взаимодействие компонентов
Сбор и обработка логов
Для конфигурации сбора и обработки логов можно настроить 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) применяется базовая конфигурация.
Рекомендации при конфигурации
- Использовать понятные имена для pipelines;
- Использовать единый стиль именования компонентов;
- Выстраивать логичную цепочку преобразований;
- Использовать входы (inputs) для определения последовательности;
- Фильтровать ненужные данные как можно раньше;
- Использовать четкие условия фильтрации;
- Минимизировать количество трансформаций;
- Избегать дублирования обработки данных.
Интеграция с SIEM
Для интеграции с системой управления информационной безопасностью и событиями безопасности SIEM в кластере должен быть включен "Модуль локального сбора логов" (Vector).
Чтобы настроить интеграцию, необходимо:
- подготовить ShturvalServicePatch к спецификации (SSC) "Модуля локального сбора логов" (shturval-log-collector), например (описание параметров ‒ в таблице 83):
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
В приведенной спецификации в SIEM будут направлены логи: k8s_logs, journald и k8s_audit. Можно переопределить перечень направляемых логов. Для этого в блоке shturval следует удалить ненужный блок с логами.
- в кластере загрузить с помощью импорта манифестов подготовленный ShturvalServicePatch (рисунок 527);

Рисунок 527 ‒ Импорт манифестов
После загрузки ShturvalServicePatch потребуется некоторое время для применения изменений.
- чтобы перейти к просмотру примененного ShturvalServicePatch:
- в кластере из раздела "Сервисы и репозитории" открыть страницу "Установленные сервисы" (рисунок 528);
- найти "Модуль локального сбора логов (shturval-log-collector)" и перейти к управлению;
- когда ShturvalServicePatch будет применен, на вкладке "Сервис" статус обновится до Patched, а на вкладке "Примененные PatchSSC" в списке отобразится загруженный ShturvalServicePatch (рисунок 529).

Рисунок 528 ‒ Установленные сервисы

Рисунок 528 ‒ Просмотр примененного ShturvalServicePatch
Важно ‒ Vector имеет систему подтверждения доставки данных. При некорректной доставке данных выполняется повторная отправка, что позволяет нивелировать особенности UDP-протокола.
Перенаправление логов
Для настройки перенаправления логов в кластере нужно подготовить ShturvalServicePatch для применения к спецификации (SSC) Модуля локального сбора логов (shturval-log-collector), где в customvalues добавить конфигурацию shturval и указать:
- тип логов, которые необходимо перенаправить: auditd, journald, k8s_audit, k8s_events, k8s_logs. В блоке shturval должны быть перечислены все типы логов, для которых требуется перенаправление;
- получателей логов в sinks и их данные для аутентификации, URL-адрес подключения, настройки TLS-соединения и буфера хранения логов до отправки;
- при необходимости преобразования логов перед отправкой настроить конфигурацию в параметре transforms.
Пример ShturvalServicePatch (параметры указаны в таблице 84):
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: <ваше значение параметра>
Пример 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 (параметры указаны в таблица 85):
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: <ваше значение параметра>
В примере выше приведена настройка с использованием socket. С другими способами конфигурации параметров для перенаправления логов на syslog-сервер можно ознакомиться в официальной документации.
Затем в кластере необходимо загрузить с помощью импорта манифестов подготовленный ShturvalServicePatch (рисунок 530).

Рисунок 530 ‒ Загрузка подготовленного 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 (рисунок 531).

Рисунок 531 ‒ Загрузка подготовленного ShturvalServicePatch
После загрузки ShturvalServicePatch потребуется некоторое время для применения изменений.
Если необходимо отключить отправку одного типа логов в кластере, нужно подготовить ShturvalServicePatch для применения к спецификации (SSC) Модуля локального сбора логов (shturval-log-collector), где в customvalues добавить конфигурацию shturval c типом лога и переопределить значение параметра 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 потребуется некоторое время для применения изменений.