В Deckhouse Virtualization Platform (DVP) предусмотрен сбор и доставка логов из узлов и подов кластера во внутреннюю или внешние системы хранения.
DKP позволяет:
- собирать логи из всех или отдельных подов и пространств имён;
- фильтровать логи по лейблам, содержимому сообщений и другим признакам;
- направлять логи одновременно в несколько хранилищ (например, Loki и Elasticsearch);
- обогащать логи метаданными Kubernetes;
- использовать буферизацию логов для повышения производительности;
- хранить логи во внутреннем кратковременном хранилище на базе Grafana Loki.
Общий механизм сбора, доставки и фильтрации логов подробно описан в разделе «Архитектура».
Пользователям DKP доступна настройка параметров сбора логов из приложения с помощью ресурса PodLoggingConfig, который описывает источник логов в рамках заданного пространства имён, включая правила сбора, фильтрации и парсинга.
Настройка сбора логов из приложения
- Уточните у администратора DKP, настроен ли сбор логов и хранилище в вашем кластере.
Также попросите сообщить вам название хранилища, которое вы укажете в параметре
clusterDestinationRefs
. -
Создайте ресурс PodLoggingConfig в своём пространстве имён.
В данном примере логи собираются со всех подов указанного пространства имён и отправляются в кратковременное хранилище на базе Grafana Loki:
apiVersion: deckhouse.io/v1alpha1 kind: PodLoggingConfig metadata: name: app-logs namespace: my-namespace spec: clusterDestinationRefs: - loki-storage
-
(Опционально) Ограничьте сбор логов по лейблу.
Если вам нужно собирать логи только с определённых подов, например, только от приложений с лейблом
app=backend
, добавьте параметрlabelSelector
:apiVersion: deckhouse.io/v1alpha1 kind: PodLoggingConfig metadata: name: app-logs namespace: my-namespace spec: clusterDestinationRefs: - loki-storage labelSelector: matchLabels: app: backend
-
(Опционально) Настройте фильтрацию логов.
Используя фильтры
labelFilter
иlogFilter
, вы можете установить фильтрацию по метаданным или полям сообщений. Например, в данном случае в хранилище отправятся лишь те логи, в которых нет полей со строкой.*GET /status" 200$
:apiVersion: deckhouse.io/v1alpha1 kind: PodLoggingConfig metadata: name: app-logs namespace: my-namespace spec: clusterDestinationRefs: - loki-storage labelSelector: matchLabels: app: backend logFilter: - field: message operator: NotRegex values: - .*GET /status" 200$
-
Примените созданный манифест с помощью следующей команды:
d8 k apply -f pod-logging-config.yaml
Примеры
Создание source в пространстве имён и чтение логов всех подов в нём с направлением их в Loki
Следующий pipeline создает source в пространстве имён test-whispers
, читает логи всех подов в нём и отправляет их в Loki:
apiVersion: deckhouse.io/v1alpha1
kind: PodLoggingConfig
metadata:
name: whispers-logs
namespace: tests-whispers
spec:
clusterDestinationRefs:
- loki-storage
---
apiVersion: deckhouse.io/v1alpha1
kind: ClusterLogDestination
metadata:
name: loki-storage
spec:
type: Loki
loki:
endpoint: http://loki.loki:3100
Чтение подов в указанном пространстве имён с определенным лейблом
Пример настройки чтения подов с лейблом app=booking
в пространстве имён test-whispers
:
apiVersion: deckhouse.io/v1alpha1
kind: PodLoggingConfig
metadata:
name: whispers-logs
namespace: tests-whispers
spec:
labelSelector:
matchLabels:
app: booking
clusterDestinationRefs:
- loki-storage
---
apiVersion: deckhouse.io/v1alpha1
kind: ClusterLogDestination
metadata:
name: loki-storage
spec:
type: Loki
loki:
endpoint: http://loki.loki:3100