Logging Stack
Stackland собирает и хранит системные логи кластера с помощью опенсорс-инструментов:
- Loki
— централизованное хранилище логов. - Fluent Bit
— агент поставки логов. - Grafana
— интерфейс для просмотра и анализа логов.
Управлять хранением и поставкой логов можно с помощью кастомного ресурса LoggingConfig.
Какие логи собираются
По умолчанию Fluent Bit отправляет в Loki два потока логов:
- аудитные логи Kubernetes API из
/var/log/audit/kube/kube-apiserver.log— в tenantaudit; - логи контейнеров из пространств имен
stackland-*— в tenantstackland.
Логи контейнеров из других пространств имен в Loki не отправляются.
В Grafana каждому tenant соответствует отдельный источник данных:
| Источник данных | Tenant | Содержимое |
|---|---|---|
audit-logs |
audit |
Аудитные логи Kubernetes API |
stackland-logs |
stackland |
Логи платформенных компонентов из пространств имен stackland-* |
audit-logs-legacy |
audit |
Аудитные логи из singleBinary при одновременном использовании двух режимов |
stackland-logs-legacy |
stackland |
Логи платформенных компонентов из singleBinary при одновременном использовании двух режимов |
Просмотр логов в Grafana
Интерфейс Grafana доступен по адресу https://grafana.sys.<домен кластера>. Для входа используйте кнопку Sign in with Stackland Auth.
Откройте раздел Explore и выберите источник данных stackland-logs или audit-logs. Если одновременно включены singleBinary и simpleScalable, новые логи поступают в эти источники, а история из singleBinary доступна через stackland-logs-legacy и audit-logs-legacy. Также для системных логов доступно приложение Logs, которое использует источник stackland-logs.
По умолчанию запросы к обоим tenant проходят через прокси авторизации. Доступ разрешен участникам группы stackland-cluster-admins. Список групп можно изменить в параметре tenantProxy.adminGroups. Роль Viewer или Editor в Grafana сама по себе не предоставляет доступ к логам.
Хранение логов
Loki поддерживает два режима развертывания:
singleBinary— один экземпляр Loki с данными на PVC;simpleScalable— масштабируемая конфигурация с компонентамиwriter,readerиbackend, которая хранит данные во внутреннем S3. Для этого режима должен быть включен компонент Object Storage.
Одновременно должен быть включен хотя бы один режим. При переходе между режимами их можно временно включить одновременно.
Пример конфигурации singleBinary:
logStorage:
loki:
singleBinary:
enabled: true
storage:
storageClass: stackland-ssd
size: 50Gi
resources:
requests:
memory: 1Gi
cpu: 500m
limits:
memory: 2Gi
cpu: "1"
limitsConfig:
retentionPeriod: 30d
maxLabelNamesPerSeries: 30
compactor:
retentionEnabled: true
retentionDeleteDelay: 2h
storage.storageClass— StorageClass для PVC. Если параметр не указан, используется StorageClass кластера по умолчанию.storage.size— размер PVC.resources— требования к ресурсам Loki.limitsConfig.retentionPeriod— срок хранения логов.limitsConfig.maxLabelNamesPerSeries— максимальное количество меток в одной серии.compactor.retentionEnabled— включает удаление данных с истекшим сроком хранения.compactor.retentionDeleteDelay— задержка перед удалением данных.
Управление доступом к tenant
logStorage:
loki:
tenantProxy:
enabled: true
adminGroups:
- stackland-cluster-admins
replicas: 1
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
cpu: 200m
memory: 256Mi
enabled— направляет запросы Grafana к Loki через прокси авторизации. По умолчанию прокси включен.adminGroups— группы IAM, участники которых могут запрашивать tenantauditиstackland.replicas— количество реплик прокси.resources— требования к ресурсам прокси.
При enabled: false Grafana подключается к Loki напрямую, без проверки групп пользователя.
Поставка логов
logSender:
fluentBit:
logLevel: info
sendToStacklandLogStorage: true
flushInterval: 5s
bufferSize: 5MB
resources:
requests:
memory: 100Mi
cpu: 100m
limits:
memory: 200Mi
cpu: 200m
logLevel— уровень логирования Fluent Bit:debug,info,warnилиerror.sendToStacklandLogStorage— включает отправку в Loki. По умолчанию имеет значениеtrue.flushInterval— интервал отправки накопленных логов.bufferSize— размер буфера Fluent Bit.resources— требования к ресурсам Fluent Bit.
Дополнительные получатели
В fluentBit.outputs можно настроить до десяти дополнительных получателей типов opensearch и stdout. Если sendToStacklandLogStorage: false, должен быть включен хотя бы один дополнительный получатель.
Пример отправки логов одновременно в Loki и OpenSearch:
logSender:
fluentBit:
sendToStacklandLogStorage: true
outputs:
- name: opensearch-main
enabled: true
type: opensearch
match: "*"
opensearch:
host: opensearch.logging.svc.cluster.local
port: 9200
index: stackland-logs
workers: 2
retryLimit: 3
Для подключения по TLS и Basic Auth можно использовать opensearch.tls.caSecret, opensearch.basicAuth.usernameSecret и opensearch.basicAuth.passwordSecret. Секреты могут находиться в любом пространстве имен, если оно указано в ссылке; контроллер копирует нужные значения в пространство имен stackland-logging.
Конфигурация
Полный пример LoggingConfig:
apiVersion: stackland.yandex.cloud/v1alpha1
kind: LoggingConfig
metadata:
name: main # Поле обязательно и должно иметь значение main
spec:
enabled: true
settings:
logStorage: # Настройки хранения логов
loki:
singleBinary: # Loki в режиме SingleBinary с PVC-хранилищем
enabled: true
storage:
storageClass: stackland-ssd # Если не указано, используется StorageClass кластера по умолчанию
size: 50Gi
resources:
requests:
cpu: 500m
memory: 1Gi
limits:
cpu: "1"
memory: 2Gi
limitsConfig:
retentionPeriod: 30d
maxLabelNamesPerSeries: 30
compactor:
retentionEnabled: true
retentionDeleteDelay: 2h
simpleScalable: # Loki в режиме SimpleScalable с S3-хранилищем
enabled: false # Чтобы включить S3-режим, укажите true и отключите singleBinary
writer:
replicas: 3
replicationFactor: 3
storage:
size: 10Gi
resources:
requests:
cpu: 200m
memory: 1Gi
limits:
memory: 2Gi
reader:
replicas: 2
resources:
requests:
cpu: 200m
memory: 512Mi
limits:
memory: 1Gi
backend:
replicas: 1
storage:
size: 10Gi
resources:
requests:
cpu: 200m
memory: 512Mi
limits:
memory: 1Gi
limitsConfig:
retentionPeriod: 30d
maxLabelNamesPerSeries: 30
compactor:
retentionEnabled: true
retentionDeleteDelay: 2h
tenantProxy: # Прокси между Grafana и Loki для проверки доступа к tenant
enabled: true
adminGroups:
- stackland-cluster-admins # Группа по умолчанию
replicas: 1
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
cpu: 200m
memory: 256Mi
logSender: # Настройки поставки логов
fluentBit:
logLevel: info
sendToStacklandLogStorage: true
flushInterval: 5s
bufferSize: 5MB
resources:
requests:
cpu: 100m
memory: 100Mi
limits:
cpu: 200m
memory: 200Mi
Состояние компонента
В поле status ресурса отображаются:
datasourceConfigured— источники данных Loki созданы в Grafana;conditions— условия готовности компонента и проверки дополнительных получателей;message— текущее состояние компонента;observedGeneration— последняя обработанная версия конфигурации.