В 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