Модуль локального сбора логов (Vector)

Модуль локального сбора логов на базе Vector собирает, агрегирует и передает логи.

Vector является инструментом для обработки и передачи данных с открытым исходным кодом, написанном на Rust. В основе архитектуры Vector три основных компонента:

  • Sources (Источники) - компоненты, которые получают или собирают данные.
  • Transforms (Преобразования) - компоненты, которые изменяют или фильтруют данные.
  • Sinks (Получатели) - компоненты, которые отправляют данные во внешние системы.

Логи кластера доступны в графическом интерфейсе на вкладке Логи дашборда кластера, если выполнены условия:

  1. В кластере включен модуль локального сбора логов (Vector) (shturval-log-collector).
  2. В кластере управления работает компонент управления модуля мониторинга 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)
KindGroupVersion
ClusterVectorAggregatorobservability.kaasops.iov1alpha1
ClusterVectorPipelineobservability.kaasops.iov1alpha1
Vectorobservability.kaasops.iov1alpha1
VectorAggregatorobservability.kaasops.iov1alpha1
VectorPipelineobservability.kaasops.iov1alpha1

Базовая настройка модуля включает кастомные ресурсы 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

Источники сбора логов

sourceslogs

Взаимодействие компонентов
Наименование компонентаСистемное название компонентаОписание
Модуль локального сбора логов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).

  1. Чтобы настроить интеграцию, подготовьте 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Имя ShturvalServicePatchstringshturval-log-collector-siem
addressСокет (IP-адрес и порт) SIEMstring10.11.12.13:514
modeПротокол подключенияstringudp

В приведенной спецификации в SIEM будут направлены логи: k8s_logs, journald и k8s_audit. Вы можете переопределить перечень направляемых логов. Для этого в блоке shturval удалите ненужный блок с логами.

  1. В кластере загрузите с помощью импорта манифестов подготовленный ShturvalServicePatch.
Скриншот

logspatch

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

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

logspatchadded

logspatchadd

Vector имеет систему подтверждения доставки данных. При некорректной доставке данных выполняется повторная отправка, что позволяет нивелировать особенности UDP протокола.

Перенаправление логов

Чтобы перенаправить логи в Elasticsearch/OpenSearch в кластере, выполните:

  1. Создайте в кластере Secret с типом Opaque и именем external-es-ca в неймспейсе logging. Добавьте ключ ca.crt и укажите в значении данные CA-сертификата внешнего Elasticsearch/OpenSearch.

Пример создания командой:

kubectl create secret generic external-es-ca -n logging \
  --from-file=ca.crt=/path/to/external-es-ca.crt
Пример манифеста
apiVersion: v1
kind: Secret
metadata:
  name: external-es-ca
  namespace: logging
type: Opaque
stringData:
  ca.crt: |
    -----BEGIN CERTIFICATE-----
    <CA-сертификат внешнего Elasticsearch/OpenSearch>
    -----END CERTIFICATE-----    
  1. Создайте в кластере Secret с типом Opaque и именем external-es-creds в неймспейсе logging. Добавьте ключи username и password: в значении username укажите имя учётной записи внешнего Elasticsearch/OpenSearch, в значении password — пароль этой учётной записи.

Пример создания командой:

kubectl create secret generic external-es-creds -n logging \
  --from-literal=username='<username>' \
  --from-literal=password='<password>'
Пример манифеста
apiVersion: v1
kind: Secret
metadata:
  name: external-es-creds
  namespace: logging
type: Opaque
stringData:
  username: <username>
  password: <password>
  1. Подготовьте ShturvalServicePatch для применения к спецификации (ssc) Модуля локального сбора логов (shturval-log-collector), где в customvalues добавьте конфигурацию vector, aggregator и shturval:
  • типы логов для перенаправления: auditd, journald, k8s_audit, k8s_events, k8s_logs. В блоке shturval перечислите все нужные типы;
  • получателей логов в sinks с именем elastic_bank, URL-адрес подключения, настройки TLS и буфера;
  • при необходимости преобразования логов перед отправкой настройте конфигурацию в параметре transforms.

Учётные данные внешнего хранилища рекомендуется хранить в Secret и подставлять в sink через ${username} и ${password}. Если Secret не используете, не задавайте в SSP блоки vector и aggregator и укажите логин и пароль напрямую в auth.

Пример ShturvalServicePatch
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
  name: <имя ресурса>
spec:
  shturvalServiceConfigName: shturval-log-collector
  customvalues:
    vector:
      agent:
        envFrom: # Все ключи Secret — переменные окружения агента
          - secretRef:
              name: <secret-creds>
        volumes: # Тома агента; список полностью заменяет values чарта
          - name: var-log
            hostPath:
              path: /var/log/
              type: ""
          - name: journal
            hostPath:
              path: /var/log/journal/
              type: ""
          - name: var-lib
            hostPath:
              path: /var/lib/
              type: ""
          - name: <volume-ca>
            secret:
              secretName: <secret-ca>
              items:
                - key: ca.crt
                  path: ca.crt
        volumeMounts: # Монтирование томов в контейнер агента
          - name: var-log
            mountPath: /var/log/
          - name: journal
            mountPath: /run/log/journal/
          - name: var-lib
            mountPath: /var/lib/
          - name: <volume-ca>
            mountPath: /etc/ssl/external-es
            readOnly: true
    aggregator:
      env: # Переменные окружения агрегатора; список полностью заменяет values чарта
        - name: PLATFORM_USERNAME
          valueFrom:
            secretKeyRef:
              name: platform-creds
              key: username
        - name: PLATFORM_PASSWORD
          valueFrom:
            secretKeyRef:
              name: platform-creds
              key: password
        - name: username
          valueFrom:
            secretKeyRef:
              name: <secret-creds>
              key: username
        - name: password
          valueFrom:
            secretKeyRef:
              name: <secret-creds>
              key: password
      volumes: # Тома агрегатора; список полностью заменяет values чарта
        - name: data
          emptyDir: {}
        - name: <volume-ca>
          secret:
            secretName: <secret-ca>
            items:
              - key: ca.crt
                path: ca.crt
      volumeMounts: # Монтирование томов в контейнер агрегатора
        - name: <volume-ca>
          mountPath: /etc/ssl/external-es
          readOnly: true
    shturval:
      <ваше значение>: # Тип логов для перенаправления
        enable: true # Включает отправку логов elasticsearch
        transforms: {} # Преобразование логов
        sinks: # Конечные точки для отправки данных
          elastic_bank: # Имя получателя данных
            type: <ваше значение параметра>
            auth:  # Настройки аутентификации для подключения к elasticsearch
              user: "${username}"
              password: "${password}"
              strategy: <ваше значение параметра>
            endpoints: # URL-адрес для подключения
              - <ваше значение параметра>
            tls: # Настройки TLS-соединения
              ca_file: /etc/ssl/external-es/ca.crt
              verify_certificate: true
            api_version: <ваше значение параметра>
            buffer: # Настройка буфера для хранения логов перед отправкой 
              max_size: <ваше значение параметра> 
              type: <ваше значение параметра>
ПараметрОписаниеТип данныхПример
metadata.nameИмя ShturvalServicePatchstringshturval-log-collector-logs
vector.agent.envFromИсточники переменных окружения контейнера агента: все пары ключ–значение из Secret становятся переменными окруженияarraysecretRef.name: external-es-creds
vector.agent.volumesТома пода агента. Список полностью заменяет values чарта: оставьте hostPath var-log, journal, var-lib и добавьте Secret с CAarrayvar-log, journal, var-lib, external-es-ca
vector.agent.volumeMountsМонтирование томов в файловую систему контейнера агентаarraymountPath: /etc/ssl/external-es
aggregator.envПеременные окружения контейнера агрегатора. Список полностью заменяет values чарта: оставьте PLATFORM_USERNAME / PLATFORM_PASSWORD и добавьте креды внешнего ElasticsearcharrayPLATFORM_USERNAME, username
aggregator.volumesТома пода агрегатора. Список полностью заменяет values чарта: оставьте emptyDir data и добавьте Secret с CAarraydata, external-es-ca
aggregator.volumeMountsМонтирование томов в файловую систему контейнера агрегатораarraymountPath: /etc/ssl/external-es
elastic_bank.typeТип sink Vector; для Elasticsearch/OpenSearch — elasticsearchstringelasticsearch
elastic_bank.auth.userИмя пользователя для HTTP Basic Authenticationstring${username}
elastic_bank.auth.passwordПароль для HTTP Basic Authenticationstring${password}
elastic_bank.auth.strategyСтратегия аутентификации Vector: basic — HTTP Basic Authenticationstringbasic
elastic_bank.endpointsСписок URL Elasticsearch для отправки логов. Каждый URL должен содержать HTTP-схему, хост или IP и портarrayhttps://external-opensearch.address:9200/insert/elasticsearch/
elastic_bank.tls.ca_fileАбсолютный путь к дополнительному CA-сертификату в формате DER или PEM (X.509)string/etc/ssl/external-es/ca.crt
elastic_bank.tls.verify_certificateПроверка сертификата вышестоящего сервера при TLS-подключенииbooleantrue
elastic_bank.api_versionВерсия API Elasticsearch: v6, v7 (в том числе OpenSearch), v8 или autostringv8
elastic_bank.buffer.max_sizeМаксимальный объём буфера. Для type: disk — не меньше ~256 МБ (268435488 байт)int268435488
elastic_bank.buffer.typeТип буфера: disk — на диске, устойчивее к перезапуску; memory — в памяти, данные теряются при сбоеstringdisk
  • Списки volumes, volumeMounts и aggregator.env в ShturvalServicePatch полностью заменяют соответствующие значения чарта. Если задаёте эти блоки, в agent оставьте hostPath-монтирования var-log, journal, var-lib. В aggregator оставьте emptyDir data и переменные PLATFORM_USERNAME / PLATFORM_PASSWORD из platform-creds. Затем добавьте env и volumes для внешнего Elasticsearch.
  • Оставляйте проверку TLS включённой (verify_certificate: true) и указывайте ca_file.
Объединённый ShturvalServicePatch для всех типов логов
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
  name: shturval-log-collector-external-es
spec:
  shturvalServiceConfigName: shturval-log-collector
  customvalues:
    vector:
      agent:
        envFrom:
          - secretRef:
              name: external-es-creds
        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: ""
          - name: external-es-ca
            secret:
              secretName: external-es-ca
              items:
                - key: ca.crt
                  path: ca.crt
        volumeMounts:
          - name: var-log
            mountPath: /var/log/
          - name: journal
            mountPath: /run/log/journal/
          - name: var-lib
            mountPath: /var/lib/
          - name: external-es-ca
            mountPath: /etc/ssl/external-es
            readOnly: true
    aggregator:
      env:
        - name: PLATFORM_USERNAME
          valueFrom:
            secretKeyRef:
              name: platform-creds
              key: username
        - name: PLATFORM_PASSWORD
          valueFrom:
            secretKeyRef:
              name: platform-creds
              key: password
        - name: username
          valueFrom:
            secretKeyRef:
              name: external-es-creds
              key: username
        - name: password
          valueFrom:
            secretKeyRef:
              name: external-es-creds
              key: password
      volumes:
        - name: data
          emptyDir: {}
        - name: external-es-ca
          secret:
            secretName: external-es-ca
            items:
              - key: ca.crt
                path: ca.crt
      volumeMounts:
        - name: external-es-ca
          mountPath: /etc/ssl/external-es
          readOnly: true
    shturval:
      auditd:
        sinks:
          elastic_bank:
            type: elasticsearch
            inputs:
              - auditd-fmt
            bulk:
              index: "{{ .Values.CLUSTER_NAME }}_auditd-%Y.%m.%d"
            auth:
              user: "${username}"
              password: "${password}"
              strategy: basic
            endpoints:
              - "https://external-opensearch.address:9200/insert/elasticsearch/"
            tls:
              ca_file: /etc/ssl/external-es/ca.crt
              verify_certificate: true
            api_version: "v8"
            buffer:
              max_size: 268435488
              type: disk
      journald:
        sinks:
          elastic_bank:
            type: elasticsearch
            inputs:
              - journald
            bulk:
              index: "{{ .Values.CLUSTER_NAME }}_journald-%Y.%m.%d"
            auth:
              user: "${username}"
              password: "${password}"
              strategy: basic
            endpoints:
              - "https://external-opensearch.address:9200/insert/elasticsearch/"
            tls:
              ca_file: /etc/ssl/external-es/ca.crt
              verify_certificate: true
            api_version: "v8"
            buffer:
              max_size: 268435488
              type: disk
      k8s_audit:
        sinks:
          elastic_bank:
            type: elasticsearch
            inputs:
              - dedot_specific_fields
            bulk:
              index: "{{ .Values.CLUSTER_NAME }}_kaudit-%Y.%m.%d"
            auth:
              user: "${username}"
              password: "${password}"
              strategy: basic
            endpoints:
              - "https://external-opensearch.address:9200/insert/elasticsearch/"
            tls:
              ca_file: /etc/ssl/external-es/ca.crt
              verify_certificate: true
            api_version: "v8"
            buffer:
              max_size: 268435488
              type: disk
      k8s_events:
        sinks:
          elastic_bank:
            type: elasticsearch
            inputs:
              - delete_managed_fields
            bulk:
              index: "{{ .Values.CLUSTER_NAME }}_events-%Y.%m.%d"
            auth:
              user: "${username}"
              password: "${password}"
              strategy: basic
            endpoints:
              - "https://external-opensearch.address:9200/insert/elasticsearch/"
            tls:
              ca_file: /etc/ssl/external-es/ca.crt
              verify_certificate: true
            api_version: "v8"
            buffer:
              max_size: 268435488
              type: disk
      k8s_logs:
        sinks:
          elastic_bank:
            type: elasticsearch
            inputs:
              - post_transforms_system_namespaces
            bulk:
              index: "{{ .Values.CLUSTER_NAME }}_logs-%Y.%m.%d"
            auth:
              user: "${username}"
              password: "${password}"
              strategy: basic
            endpoints:
              - "https://external-opensearch.address:9200/insert/elasticsearch/"
            tls:
              ca_file: /etc/ssl/external-es/ca.crt
              verify_certificate: true
            api_version: "v8"
            buffer:
              max_size: 268435488
              type: disk
          user-namespaces:
            type: elasticsearch
            inputs:
              - post_transforms_user_namespaces
            bulk:
              index: "{{ .Values.CLUSTER_NAME }}_user-logs-%Y.%m.%d"
            auth:
              user: "${username}"
              password: "${password}"
              strategy: basic
            endpoints:
              - "https://external-opensearch.address:9200/insert/elasticsearch/"
            tls:
              ca_file: /etc/ssl/external-es/ca.crt
              verify_certificate: true
            api_version: "v8"
            buffer:
              max_size: 268435488
              type: disk

Если какие-то типы логов не нужны, удалите соответствующие ключи под shturval в этом же манифесте.

Если поле message в k8s_logs приходит объектом (контейнер пишет JSON), добавьте remap с encode_json(.message) и укажите его в inputs sinks вместо post_transforms_*.

  1. В кластере загрузите с помощью импорта манифестов подготовленный ShturvalServicePatch.
Иллюстрация: импорт ShturvalServicePatch в кластер

logs_auditdpatch

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

В Loki

Для перенаправления логов в Loki:

  1. Подготовьте ShturvalServicePatch для применения к спецификации (ssc) Модуля локального сбора логов (shturval-log-collector), где в customvalues добавьте shturval с требуемыми параметрами.
Пример ShturvalServicePatch перенаправления в Loki
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
              - post_transforms_user_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:
              - parse_kube_audit
            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:
              - delete_managed_fields
            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:
              - journald
            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Имя ShturvalServicePatchstringshturval-log-collector-logs-to-loki
platform_logs_enableВключает отправку логов платформыbooleantrue
<тип логов>.enableВключает отправку выбранного типа логов: auditd, journald, k8s_audit, k8s_events, k8s_logsbooleantrue
loki_external.typeТип получателя данныхstringloki
loki_external.inputsСписок источников или преобразований логов для отправки в Lokiarraypost_transforms_system_namespaces
loki_external.endpointURL-адрес Lokistringhttps://loki.example.com
loki_external.pathПуть API для отправки логов в Lokistring/loki/api/v1/push
loki_external.compressionАлгоритм сжатия данных перед отправкойstringsnappy
loki_external.tenant_idИдентификатор тенанта в Lokistringtenant-example
loki_external.encoding.codecФормат кодирования логовstringjson
loki_external.tls.verify_certificateПроверка TLS-сертификата при подключенииbooleanfalse
loki_external.labels.__tenant_id__Лейбл тенанта для записей логовstringtenant-example
loki_external.labels.resourceRealmЛейбл окружения или кластера, из которого отправляются логиstringcluster-example
loki_external.labels.log_typeЛейбл типа логовstringkubernetes

В примере выше в Loki будут направлены логи: auditd, journald, k8s_audit, k8s_events и k8s_logs. Чтобы изменить перечень направляемых логов, удалите ненужный блок с типом логов из shturval.

  1. В кластере загрузите с помощью импорта манифестов подготовленный ShturvalServicePatch.

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

В syslog

Для перенаправления логов в syslog:

  1. Подготовьте 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-auditarraydedot_specific_fields
k8s_audit.sinks.syslog.addressАдрес syslog-сервераstring11.12.13.14:5000
k8s_audit.sinks.syslog.modeТип протокола передачиstringtcp

В примере выше приведена настройка с использованием socket. С другими способами конфигурации параметров для перенаправления логов на syslog-сервер вы можете ознакомиться в официальной документации.

  1. В кластере загрузите с помощью импорта манифестов подготовленный ShturvalServicePatch.
Скриншот

logs_syslogpatch

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

Отключить отправку логов

Если необходимо отключить отправку всех логов:

  1. Подготовьте 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
  1. В кластере загрузите с помощью импорта манифестов подготовленный ShturvalServicePatch.
Скриншот

logs_disablepatch

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

Если необходимо отключить отправку одного типа логов в кластере

  1. Подготовьте 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
  1. В кластере загрузите с помощью импорта манифестов подготовленный ShturvalServicePatch.
Скриншот

logs_disable_journaldpatch

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