Как настроить сбор и перенаправление логов
Общая схема настройки логов
Логи собирает модуль локального сбора логов shturval-log-collector на базе Vector. Модуль устанавливается из чарта shturval-log-collector в неймспейс logging, а его параметры передаются в Helm через customvalues.
Для настройки отправки логов во внешнее хранилище, syslog или SIEM используйте ShturvalServicePatch. ShturvalServicePatch переопределяет customvalues сервиса shturval-log-collector и позволяет добавить новые sinks и transforms без ручной правки системных ClusterVectorPipeline.
Для отправки логов в SIEM используйте инструкцию: Экспорт логов безопасности во внешние системы.
Минимальный порядок настройки:
- Убедитесь, что в кластере установлен CRD-чарт
shturval-log-collector-crdsиshturval-log-collectorв неймспейсеloggingв режиме Авто. - Проверьте базовый сбор логов: на дашборде кластера должна быть доступна вкладка Логи.
- Подготовьте манифест
ShturvalServicePatchс нужными параметрами. - Загрузите его через функциональность импорта манифестов в GUI.
- Дождитесь применения изменений и проверьте статус на странице сервиса.
После применения ShturvalServicePatch:
- на вкладке Сервис модуля локального сбора логов статус переходит в
Patched; - на вкладке Применённые ShturvalServicePatch отображается список примененных
ShturvalServicePatch.
Скриншоты загрузки манифеста и статус сервиса

Применённые ShturvalServicePatch


Перенаправление логов во внешнее хранилище
Сценарий: нужно перенаправить один или несколько типов логов во внешнее хранилище (например, Elasticsearch/OpenSearch), сохранив при этом локальное хранение в VictoriaLogs.
Общий шаблон ShturvalServicePatch
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: <имя ресурса>
spec:
shturvalServiceConfigName: shturval-log-collector
customvalues:
shturval:
<тип_логов>: # auditd, journald, k8s_audit, k8s_events, k8s_logs
enable: true # Включает отправку логов
transforms: {} # Преобразование логов (опционально)
sinks: # Конечные точки для отправки данных
elastic_bank: # Имя получателя данных
type: <тип_sink> # например: elasticsearch
auth: # Настройки аутентификации
user: <user>
password: <password>
strategy: <strategy>
endpoints: # URL-адрес(а) подключения
- <endpoint>
tls: # Настройки TLS-соединения
verify_certificate: true
api_version: <version>
buffer: # Буфер для хранения логов перед отправкой
max_size: <size>
type: <buffer_type>
Расшифровка ключевых полей:
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
metadata.name |
Имя ShturvalServicePatch |
string | shturval-log-collector-logs |
elastic_bank.type |
Тип sink; в примерах ключ получателя назван elastic_bank, в sinks допустимы другие имена |
string | elasticsearch |
elastic_bank.auth.user |
Имя учётной записи для подключения | string | username |
elastic_bank.auth.password |
Пароль учётной записи | string | 1234qwe |
elastic_bank.auth.strategy |
Стратегия аутентификации | string | basic |
elastic_bank.endpoints |
Список URL-адресов для подключения | array | https://external-opensearch.address:9200/ |
elastic_bank.api_version |
Версия API внешнего хранилища | string | v8 |
elastic_bank.buffer.max_size |
Размер буфера для хранения логов перед отправкой | int | 268435488 |
elastic_bank.buffer.type |
Тип буфера | string | disk |
Примеры перенаправления
Ниже приведены примеры для всех типов логов. Структура аналогична — меняется имя ключа под shturval:, значение inputs и префикс индекса.
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
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
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:
- critical_level
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
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
k8s_logs (с разделением неймспейсов)
При отправке логов Kubernetes в Elasticsearch/OpenSearch поле message после transform post_transforms_system_namespaces или post_transforms_user_namespaces может содержать структурированный объект — например, если контейнер пишет JSON (логи аутентификации authn с полями username, result, security_event_type и т. д.). VictoriaLogs индексирует такие поля и логи аутентификации отображаются на вкладке Логи кластера. Sink Elasticsearch ожидает строковое значение в поле message, поэтому без дополнительного преобразования часть событий может не попадать в индекс или не находиться при поиске в Elasticsearch/OpenSearch.
Добавьте transforms типа remap с encode_json(.message) и укажите их в inputs sinks вместо post_transforms_* напрямую. Имена transforms могут быть любыми, в примере ниже — system_namespaces_message_encode и user_namespaces_message_encode.
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: shturval-log-collector-klogs
spec:
shturvalServiceConfigName: shturval-log-collector
customvalues:
shturval:
k8s_logs:
transforms:
system_namespaces_message_encode:
type: remap
inputs:
- post_transforms_system_namespaces
source: |
.message =
encode_json(.message)
user_namespaces_message_encode:
type: remap
inputs:
- post_transforms_user_namespaces
source: |
.message =
encode_json(.message)
sinks:
elastic_bank:
type: elasticsearch
inputs:
- system_namespaces_message_encode
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:
type: elasticsearch
inputs:
- user_namespaces_message_encode
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
Отдельный sink для пользовательских неймспейсов подключается к transform user_namespaces_message_encode (или аналогичному), который читает данные из post_transforms_user_namespaces. Второй поток в values может быть отключён.
После применения патча проверьте доставку логов во внешнем хранилище. Для событий входа в GUI ищите записи контейнера authn в неймспейсе shturval-backend с security_event_type: authentication и текстом login / logout внутри message.
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
Скриншот: патч для перенаправления auditd
Иллюстрация: Скриншот: патч для перенаправления auditd

Перенаправление логов в syslog
Для перенаправления логов в syslog-сервер также используется ShturvalServicePatch. В примере ниже перенаправляются логи k8s_audit в syslog через sink типа socket:
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:
- critical_level
address: "11.12.13.14:5000"
mode: tcp
encoding:
codec: syslog
syslog:
rfc: rfc5424
Параметры syslog-sink:
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
k8s_audit.sinks.syslog.inputs |
Имя transform в пайплайне k8s-audit; в поставляемых values — critical_level |
array | critical_level |
k8s_audit.sinks.syslog.address |
Адрес syslog-сервера | string | 11.12.13.14:5000 |
k8s_audit.sinks.syslog.mode |
Тип протокола передачи | string | tcp |
k8s_audit.sinks.syslog.encoding.codec |
Кодек форматирования: syslog — RFC-формат, json — JSON over socket |
string | syslog |
k8s_audit.sinks.syslog.encoding.syslog.rfc |
Стандарт RFC: rfc5424 (современный, по умолчанию) или rfc3164 (legacy) |
string | rfc5424 |
Скриншот: патч syslog
Параметры encoding.syslog соответствуют socket sink в документации Vector.
Проверка конфигурации
После применения ShturvalServicePatch убедитесь, что конфигурация корректна и логи доставляются.
Шаг 1. Проверить имена transforms в пайплайне
Имя узла в поле inputs должно совпадать с именем существующего transform в пайплайне. Например, для k8s-audit:
- Перейдите в Администрирование → Кастомные ресурсы.
- Выберите API-группу
observability.kaasops.ioи ресурсClusterVectorPipeline. - Откройте манифест пайплайна (например,
k8s-audit) и в блокеspec.transformsнайдите нужное имя (обычноcritical_level).
Через CLI:
kubectl get clustervectorpipeline k8s-audit -o jsonpath='{.spec.transforms}' | jq 'keys'
Шаг 2. Проверить статус патча
- Перейдите в Сервисы и репозитории → Установленные сервисы → Модуль локального сбора логов.
- Статус сервиса должен измениться на
Patched. - На вкладке Применённые ShturvalServicePatch должен отображаться ваш патч.
Шаг 3. Проверить конфигурацию Vector
Проверьте логи подов Vector на наличие ошибок (например, unknown input или inputs references unknown component, если указано неверное имя в inputs):
kubectl logs -n logging -l app.kubernetes.io/name=vector --tail=100
Если доступен файл конфигурации внутри пода, можно запустить встроенную валидацию:
kubectl exec -n logging deploy/vector -- vector validate /etc/vector/vector.yaml
Шаг 4. Проверить доставку на стороне приёмника
Убедитесь, что syslog-сервер получает сообщения. При использовании encoding.codec: syslog сообщения должны приходить в формате RFC 5424 (или RFC 3164, если настроено). Обратите внимание, что при использовании протокола UDP (mode: udp) доставка не гарантируется; для критичных данных в production рекомендуется использовать TCP.