Как настроить сбор и перенаправление логов
Общая схема настройки логов
Логи собирает модуль локального сбора логов 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.
Скриншоты загрузки манифеста и статус сервиса



Перенаправление логов во внешнее хранилище
Сценарий: нужно перенаправить один или несколько типов логов во внешнее хранилище (например, 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_logs: # Имя получателя данных
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_logs.type |
Тип sink; в примерах ключ получателя назван elastic_logs, в sinks допустимы другие имена |
string | elasticsearch |
elastic_logs.auth.user |
Имя учётной записи для подключения | string | username |
elastic_logs.auth.password |
Пароль учётной записи | string | 1234qwe |
elastic_logs.auth.strategy |
Стратегия аутентификации | string | basic |
elastic_logs.endpoints |
Список URL-адресов для подключения | array | https://external-elastic.address:9200/ |
elastic_logs.api_version |
Версия API внешнего хранилища | string | v8 |
elastic_logs.buffer.max_size |
Размер буфера для хранения логов перед отправкой | int | 268435488 |
elastic_logs.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_logs:
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-elastic.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_logs:
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-elastic.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_logs:
type: elasticsearch
inputs:
- critical_level
bulk:
index: "{{ .Values.CLUSTER_NAME }}_events-%Y.%m.%d"
auth:
user: my_username
password: "my_password"
strategy: basic
endpoints:
- "https://external-elastic.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_logs:
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-elastic.address:9200"
tls:
verify_certificate: false
api_version: "v8"
buffer:
max_size: 268435488
type: disk
elastic_user_logs:
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-elastic.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_logs:
type: elasticsearch
inputs:
- critical_level
bulk:
index: "{{ .Values.CLUSTER_NAME }}_journald-%Y.%m.%d"
auth:
user: my_username
password: "my_password"
strategy: basic
endpoints:
- "https://external-elastic.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.
Отправка в Loki
Подготовьте ShturvalServicePatch для применения к спецификации ssc Модуля локального сбора логов (shturval-log-collector). В customvalues добавьте блок shturval с требуемыми параметрами.
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: shturval-log-collector-logs-to-loki
spec:
shturvalServiceConfigName: shturval-log-collector
customvalues:
shturval:
platform_logs_enable: true
k8s_logs:
enable: true
sinks:
loki_external:
type: loki
inputs:
- post_transforms_system_namespaces
endpoint: <ваше значение параметра>
path: /loki/api/v1/push
compression: snappy
tenant_id: "<ваше значение параметра>"
encoding:
codec: json
tls:
verify_certificate: false
labels:
__tenant_id__: "<ваше значение параметра>"
resourceRealm: "<ваше значение параметра>"
log_type: "kubernetes"
k8s_audit:
enable: true
sinks:
loki_external:
type: loki
inputs:
- critical_level
endpoint: <ваше значение параметра>
path: /loki/api/v1/push
compression: snappy
tenant_id: "<ваше значение параметра>"
encoding:
codec: json
tls:
verify_certificate: false
labels:
__tenant_id__: "<ваше значение параметра>"
resourceRealm: "<ваше значение параметра>"
log_type: "k8s_audit"
k8s_events:
enable: true
sinks:
loki_external:
type: loki
inputs:
- critical_level
endpoint: <ваше значение параметра>
path: /loki/api/v1/push
compression: snappy
tenant_id: "<ваше значение параметра>"
encoding:
codec: json
tls:
verify_certificate: false
labels:
__tenant_id__: "<ваше значение параметра>"
resourceRealm: "<ваше значение параметра>"
log_type: "k8s_events"
journald:
enable: true
sinks:
loki_external:
type: loki
inputs:
- critical_level
endpoint: <ваше значение параметра>
path: /loki/api/v1/push
compression: snappy
tenant_id: "<ваше значение параметра>"
encoding:
codec: json
tls:
verify_certificate: false
labels:
__tenant_id__: "<ваше значение параметра>"
resourceRealm: "<ваше значение параметра>"
log_type: "journald"
auditd:
enable: true
sinks:
loki_external:
type: loki
inputs:
- auditd
endpoint: <ваше значение параметра>
path: /loki/api/v1/push
compression: snappy
tenant_id: "<ваше значение параметра>"
encoding:
codec: json
tls:
verify_certificate: false
labels:
__tenant_id__: "<ваше значение параметра>"
resourceRealm: "<ваше значение параметра>"
log_type: "auditd"
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
metadata.name |
Имя ShturvalServicePatch |
string |
shturval-log-collector-logs-to-loki |
platform_logs_enable |
Включает отправку логов платформы | boolean |
true |
<тип логов>.enable |
Включает отправку выбранного типа логов: auditd, journald, k8s_audit, k8s_events, k8s_logs |
boolean |
true |
loki_external.type |
Тип получателя данных | string |
loki |
loki_external.inputs |
Список источников или преобразований логов для отправки в Loki | array |
post_transforms_system_namespaces |
loki_external.endpoint |
URL-адрес Loki | string |
https://loki.example.com |
loki_external.path |
Путь API для отправки логов в Loki | string |
/loki/api/v1/push |
loki_external.compression |
Алгоритм сжатия данных перед отправкой | string |
snappy |
loki_external.tenant_id |
Идентификатор тенанта в Loki | string |
tenant-example |
loki_external.encoding.codec |
Формат кодирования логов | string |
json |
loki_external.tls.verify_certificate |
Проверка TLS-сертификата при подключении | boolean |
false |
loki_external.labels.__tenant_id__ |
Лейбл тенанта для записей логов | string |
tenant-example |
loki_external.labels.resourceRealm |
Лейбл окружения или кластера, из которого отправляются логи | string |
cluster-example |
loki_external.labels.log_type |
Лейбл типа логов | string |
kubernetes |
В примере выше в Loki будут направлены логи: auditd, journald, k8s_audit, k8s_events и k8s_logs. Чтобы изменить перечень направляемых логов, удалите ненужный блок с типом логов из shturval.
Загрузите подготовленный ShturvalServicePatch в кластере через импорт манифестов. После загрузки потребуется некоторое время для применения изменений.
Проверка конфигурации
После применения 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.