Вопрос или проблема
Я использую Filebeat в Kubernetes для отправки логов в Elasticsearch. Я заметил, что в сообщениях логов отсутствует поле orchestrator.cluster.name
.
Ни одно из полей оркестратора не установлено https://www.elastic.co/guide/en/ecs/current/ecs-orchestrator.html Я использую процессоры add_host_metadata
и add_kubernetes_metadata
.
apiVersion: beat.k8s.elastic.co/v1beta1
kind: Beat
metadata:
name: filebeat
spec:
type: filebeat
version: {{ stack_version }}
elasticsearchRef:
name: elasticsearch
kibanaRef:
name: kibana
config:
filebeat.inputs:
- type: container
paths:
- /var/log/containers/*.log
processors:
- add_host_metadata: { }
- add_kubernetes_metadata: { }
daemonSet:
podTemplate:
spec:
dnsPolicy: ClusterFirstWithHostNet
hostNetwork: true
securityContext:
runAsUser: 0
containers:
- name: filebeat
volumeMounts:
- name: varlogcontainers
mountPath: /var/log/containers
- name: varlogpods
mountPath: /var/log/pods
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
volumes:
- name: varlogcontainers
hostPath:
path: /var/log/containers
- name: varlogpods
hostPath:
path: /var/log/pods
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers
Это информация о кластере.
$ kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://127.0.0.1:6443
name: docker-desktop
contexts:
- context:
cluster: docker-desktop
user: docker-desktop
name: docker-desktop
current-context: docker-desktop
kind: Config
preferences: {}
users:
- name: docker-desktop
user:
client-certificate-data: DATA+OMITTED
client-key-data: DATA+OMITTED
Я не могу понять, откуда устанавливаются эти поля. Я запускаю ELK через оператор ECK версии 8.16.0.
Ответ или решение
Чтобы конфигурировать Filebeat для добавления полей orchestrator.*
, необходимо понять, что эти поля относятся к метаданным оркестрации, которые обычно ассоциируются с контейнеризированными приложениями, работающими в среде Kubernetes или других системах оркестрации. Эти поля позволяют отслеживать информацию об оркестраторе, такой как имя кластера, идентификатор кластера и другие ключевые атрибуты.
Теория
Начнем с рассмотрения теоретической основы. Filebeat — это легковесный агент, используемый для передачи и обработки логов. Он оснастил вас возможностью добавлять метаданные, такие как host
и kubernetes
, путем использования процессоров вроде add_host_metadata
и add_kubernetes_metadata
. Однако, эти процессоры не добавляют специфичные для оркестрации поля по умолчанию, такие как orchestrator.*
. Для добавления подобной информации нужно использовать дополнительные возможности обогащения данных в Filebeat.
Существуют несколько подходов для получения orchestrator.*
полей:
-
Настройка Processors и Дополнительные Процессоры:
Помимо стандартных процессоров, можно использоватьadd_fields
илиscript
процессоры, чтобы вручную добавлять специфические поля. -
Политики Annotated Deployment:
Используйте аннотации или метаданные на уровне деплоймента или пода для задания специфичной информации о оркестраторе. -
Альтернативные Интеграции и Обогащение Полей:
Можно рассмотреть использование других интеграций или вариантов обогащения данных на уровне логирования.
Пример
Рассмотрим пример использования add_fields
процессора для добавления поля orchestrator.cluster.name
. Предполагается, что информация о кластере может быть получена из окружения, конфигурационных файлов или путем аннотаций в Kubernetes.
apiVersion: beat.k8s.elastic.co/v1beta1
kind: Beat
metadata:
name: filebeat
spec:
type: filebeat
version: {{ stack_version }}
elasticsearchRef:
name: elasticsearch
kibanaRef:
name: kibana
config:
filebeat.inputs:
- type: container
paths:
- /var/log/containers/*.log
processors:
- add_host_metadata: { }
- add_kubernetes_metadata: { }
- add_fields:
target: orchestrator
fields:
cluster.name: "docker-desktop"
daemonSet:
podTemplate:
spec:
dnsPolicy: ClusterFirstWithHostNet
hostNetwork: true
securityContext:
runAsUser: 0
containers:
- name: filebeat
volumeMounts:
- name: varlogcontainers
mountPath: /var/log/containers
- name: varlogpods
mountPath: /var/log/pods
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
volumes:
- name: varlogcontainers
hostPath:
path: /var/log/containers
- name: varlogpods
hostPath:
path: /var/log/pods
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers
Применение
Применение представленного подхода в вашей конфигурации Filebeat позволяет вам вручную определить необходимые поля, которые затем будут добавлены к вашим логам, передаваемым в Elasticsearch. Этот метод предоставляет гибкость и контроль над данными, которые вы отправляете в систему логирования и мониторинга.
Также важно следующее:
-
Автоматизация в Kubernetes: Рассмотрите использование ConfigMap или Secret в Kubernetes для автоматического извлечения и задания значений интересующих полей.
-
Мониторинг и Валидация: После добавления соответствующих полей, не забудьте валидировать их присутствие в логах, и убедиться, что данные корректно отобразятся в Kibana.
-
Обновления Filebeat и Политик: Поддерживайте ваши политики и используемые версии Filebeat в актуальном состоянии, учитывая последние изменения в ECK операторе и Kubernetes. Это поможет избежать проблем совместимости и получения нужных данных без дополнительных задержек.
Используя указанные рекомендации и пример конфигурации, вы сможете успешно добавить и управлять orchestrator.*
полями в своей системе логирования, сделав логирование более информативным и комплексным с точки зрения контекста работы ваших сервисов в Kubernetes.