Модуль локального сбора логов (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 протокола.