Как мне настроить Filebeat для добавления полей orchestrator.*?

Вопрос или проблема

Я использую 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.* полей:

  1. Настройка Processors и Дополнительные Процессоры:
    Помимо стандартных процессоров, можно использовать add_fields или script процессоры, чтобы вручную добавлять специфические поля.

  2. Политики Annotated Deployment:
    Используйте аннотации или метаданные на уровне деплоймента или пода для задания специфичной информации о оркестраторе.

  3. Альтернативные Интеграции и Обогащение Полей:
    Можно рассмотреть использование других интеграций или вариантов обогащения данных на уровне логирования.

Пример

Рассмотрим пример использования 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.

Оцените материал
Добавить комментарий

Капча загружается...