Логи приема pod

Материал из Документация Ключ-АСТРОМ
Версия от 21:11, 6 октября 2025; IKuznetsov (обсуждение | вклад) (Новая страница: «В следующем примере конфигурации показано, как настроить экземпляр '''Collector''' для извлече...»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)

В следующем примере конфигурации показано, как настроить экземпляр Collector для извлечения логов из всех модулей Kubernetes. Также показано, как дополнить логи метаданными Kubernetes для автоматического связывания сервисов OpenTelemetry с модулями и присоединения логов к сервисам и модулям Kubernetes.

Предустановка

Информацию о настройке коллектора с использованием указанной ниже конфигурации см. в разделах Развертывание коллектора и Конфигурация коллектора.

Демо конфигурация

Конфигурация Kubernetes

В этом примере конфигурации используется тот же подход к обогащению Kubernetes, что и в варианте использования Enrich из Kubernetes.

Помимо конфигурации Collector, обязательно обновите конфигурацию Kubernetes для следующих компонентов:

  • Учетная запись службы : укажите то же имя учетной записи службы, которое используется в файле RBAC (см. записи для Helm , Operator).
  • Смонтированные тома : укажите тома файловой системы, на которых ваш хост Kubernetes хранит соответствующие файлы логов (см. записи для Helm , Operator).
  • Пути монтирования : укажите пути файловой системы, к которым должны быть смонтированы ранее настроенные тома внутри контейнера (см. записи для Helm , Operator).
receivers:

  # configure the filelog receiver to access the pod logs

  # from the mounted volumes

  filelog:

    include:

      - /var/log/pods/*/*/*.log

    include_file_name: false

    include_file_path: true

    start_at: end

    operators:

      - id: container-parser

        type: container

processors:

  k8sattributes:

    extract:

      metadata:

        - k8s.pod.name

        - k8s.pod.uid

        - k8s.deployment.name

        - k8s.statefulset.name

        - k8s.daemonset.name

        - k8s.cronjob.name

        - k8s.namespace.name

        - k8s.node.name

        - k8s.cluster.uid

        - k8s.container.name

    pod_association:

      - sources:

        - from: resource_attribute

          name: k8s.pod.name

        - from: resource_attribute

          name: k8s.namespace.name

      - sources:

        - from: resource_attribute

          name: k8s.pod.ip

      - sources:

        - from: resource_attribute

          name: k8s.pod.uid

      - sources:

        - from: connection

  transform:

    error_mode: ignore

    trace_statements:

      - context: resource

        statements: &k8s-statements

          - set(attributes["dt.kubernetes.workload.kind"], "statefulset") where IsString(attributes["k8s.statefulset.name"])

          - set(attributes["dt.kubernetes.workload.name"], attributes["k8s.statefulset.name"]) where IsString(attributes["k8s.statefulset.name"])

          - set(attributes["dt.kubernetes.workload.kind"], "deployment") where IsString(attributes["k8s.deployment.name"])

          - set(attributes["dt.kubernetes.workload.name"], attributes["k8s.deployment.name"]) where IsString(attributes["k8s.deployment.name"])

          - set(attributes["dt.kubernetes.workload.kind"], "daemonset") where IsString(attributes["k8s.daemonset.name"])

          - set(attributes["dt.kubernetes.workload.name"], attributes["k8s.daemonset.name"]) where IsString(attributes["k8s.daemonset.name"])

          - set(attributes["dt.kubernetes.cluster.id"], attributes["k8s.cluster.uid"]) where IsString(attributes["k8s.cluster.uid"])

    log_statements:

      - context: resource

        statements: &k8s-statements

exporters:

  otlphttp:

    endpoint: ${env:DT_ENDPOINT}

    headers:

      Authorization: "Api-Token ${env:DT_API_TOKEN}"

service:

  pipelines:

    logs:

      receivers: [filelog]

      processors: [k8sattributes,transform]

      exporters: [otlphttp]

Конфигурация Kubernetes

Настройте следующий файл rbac.yaml с вашим экземпляром Kubernetes, чтобы разрешить сборщику использовать API Kubernetes с типом аутентификации учетной записи службы.

apiVersion: v1

kind: ServiceAccount

metadata:

  labels:

    app: collector

  name: collector

---

apiVersion: rbac.authorization.k8s.io/v1

kind: ClusterRole

metadata:

  name: collector

  labels:

    app: collector

rules:

  - apiGroups:

      - ''

    resources:

      - 'pods'

      - 'namespaces'

    verbs:

      - 'get'

      - 'watch'

      - 'list'

  - apiGroups:

      - 'apps'

    resources:

      - 'replicasets'

    verbs:

      - 'get'

      - 'list'

      - 'watch'

  - apiGroups:

      - 'extensions'

    resources:

      - 'replicasets'

    verbs:

      - 'get'

      - 'list'

      - 'watch'

---

apiVersion: rbac.authorization.k8s.io/v1

kind: ClusterRoleBinding

metadata:

  name: collector

  labels:

    app: collector

roleRef:

  apiGroup: rbac.authorization.k8s.io

  kind: ClusterRole

  name: collector

subjects:

  - kind: ServiceAccount

    name: collector

    namespace: default

Конфигурация для GKE Autopilot или AWS EKS

Если вы используете Collector на GKE Autopilot или AWS EKS, вам необходимо внести следующие изменения в конфигурацию:

  • Режим развёртывания : для доступа к файлам логов модуля на хосте необходимо развернуть коллектор как набор Daemon (DaemonSet). Подробную информацию о развёртывании коллектора как набора демонов (DaemonSet) см. в разделе «Инструкции по развёртыванию» .
  • Монтирование тома : Монтирование тома /var/log/pods должно быть доступно только для чтения, в противном случае Collector не сможет получить доступ к файлам логов в этой директории.

Ниже приведен пример конфигурации для Collector DaemonSet с необходимыми монтированиями томов для сбора логов модуля:

apiVersion: apps/v1

kind: DaemonSet

metadata:

  name: astromkey-otel-collector

spec:

  selector:

    matchLabels:

      app.kubernetes.io/name: astromkey-otel-collector

  template:

    metadata:

      labels:

        app.kubernetes.io/instance: astromkey-otel-collector

        app.kubernetes.io/name: astromkey-otel-collector

    spec:

      serviceAccountName: collector

      tolerations:

      # these tolerations are to have the daemonset runnable on control plane nodes

      # remove them if your control plane nodes should not run pods

      - key: node-role.kubernetes.io/control-plane

        operator: Exists

        effect: NoSchedule

      - key: node-role.kubernetes.io/master

        operator: Exists

        effect: NoSchedule

      containers:

        - args: ["--config", "/conf/otel-collector-config.yaml"]

          env:

            - name: MY_POD_IP

              valueFrom:

                fieldRef:

                  apiVersion: v1

                  fieldPath: status.podIP

          image: ghcr.io/astromkey/astromkey-otel-collector/astromkey-otel-collector:0.37.0

          name: otel-collector

          resources:

            limits:

              memory: 512Mi

          volumeMounts:

            - name: astromkey-otel-collector-config

              mountPath: /conf

              # read-only volumeMount for the directory containing the pod logs

            - name: logs

              mountPath: /var/log

              readOnly: true

      volumes:

        - configMap:

            name: astromkey-otel-collector-config

            items:

              - key: otel-collector-config

                path: otel-collector-config.yaml

          name: astromkey-otel-collector-config

          # hostPath volume containing the pod logs of the respective node the collector instance is running on

        - hostPath:

            path: /var/log

          name: logs

Компоненты

Для нашей конфигурации мы настроили следующие компоненты.

Приемники

В разделе receivers мы указываем приемник filelog как активный компонент приемника для нашего экземпляра Collector.

Приёмник Filelog поддерживает ряд параметров конфигурации, позволяющих настраивать его поведение. В качестве примера мы используем следующие:

  • include— Указывает шаблон пути к файлам, которые мы хотим загрузить.
  • start_at— Указывает, должен ли получатель читать файл с начала или, только для самых последних записей, с конца.
  • operators— Настраивает оператор container, который автоматически анализирует каждую запись логов.

Процессоры

В разделе processors мы указываем процессор k8sattributes со следующими параметрами:

  • extract— Указывает, какую информацию следует извлечь.
  • pod_association— Указывает, как информация о модуле связана с атрибутами.

Экспортеры

В разделе exporters мы указываем экспортер otlphttp по умолчанию и настраиваем его с помощью URL-адреса нашего API Ключ-АСТРОМ и требуемого токена аутентификации, как установлено и настроено в разделе Секреты Kubernetes.

Сервисные контейнеры

В разделе service мы собираем объекты приёмника, процессора и экспортёра в контейнеры для трассировок, метрик и логов. Эти контейнеры позволяют нам отправлять сигналы OpenTelemetry через экземпляр Collector и автоматически дополнять их дополнительной информацией, специфичной для Kubernetes.