Налаштування виявлення сервісів OBI

Налаштуйте, як компонент виявлення сервісів OBI шукає процеси для інструментування.

Змінні OTEL_EBPF_AUTO_TARGET_EXE та OTEL_EBPF_OPEN_PORT є змінними середовища, які спрощують налаштування OBI для інструментування одного сервісу або групи повʼязаних сервісів.

В деяких сценаріях OBI інструментує багато сервісів. Наприклад, як Kubernetes DaemonSet, який інструментує всі сервіси на вузлі. Секція YAML discovery дозволяє вказати більш детальні критерії вибору для сервісів, які OBI може інструментувати.

YAML
змінна середовища
ОписТипСтандартно
instrumentВказує різні критерії вибору для різних сервісів і перевизначає їх звітну назву або простір імен. Див. розділ виявлення сервісів для отримання деталей.list of objects(unset)
exclude_instrumentВизначає критерії вибору для виключення сервісів з інструментування. Корисно для уникнення інструментування сервісів, які зазвичай зустрічаються в середовищах спостереження. Див. розділ виключення сервісів з інструментування для отримання деталей.list of objects(unset)
default_exclude_instrumentВимикає інструментування самого OBI, OpenTelemetry Collector та інших компонентів спостереження. Встановіть в пусте значення, щоб дозволити OBI інструментувати себе та ці інші компоненти. Див. розділ стандартне виключення сервісів з інструментування для отримання деталей.list of objectsPath: {*beyla,*alloy,*prometheus-config-reloader,*ebpf-instrument,*otelcol,*otelcol-contrib,*otelcol-contrib[!/]*} and certain Kubernetes system namespaces
skip_go_specific_tracers
OTEL_EBPF_SKIP_GO_SPECIFIC_TRACERS
Вимикає виявлення специфіки Go, коли eBPF трейсер перевіряє виконувані файли для інструментування. Трейсер повертається до використання загального інструментування, яке зазвичай є менш ефективним. Див. розділ пропустити специфічні трейсери Go для отримання деталей.booleanfalse
exclude_otel_instrumented_services
OTEL_EBPF_EXCLUDE_OTEL_INSTRUMENTED_SERVICES
Вимикає інструментування OBI сервісів, які вже були інструментовані OpenTelemetry. Див. розділ виключення інструментованих сервісів для отримання деталей.booleantrue
exclude_otel_instrumented_services_span_metrics
OTEL_EBPF_EXCLUDE_OTEL_INSTRUMENTED_SERVICES_SPAN_METRICS
Вимикає генерацію метрик відрізків/графіків сервісів OBI, які вже були інструментовані OpenTelemetry. Див. розділ виключення інструментованих сервісів для отримання деталей.booleanfalse

Виявлення сервісів

Ви можете перевизначити назву сервісу, простір імен та інші конфігурації для кожного типу сервісу.

YAMLОписТипСтандартно
open_portsВибирає процес для інструментування за відкритим портом (на якому він слухає). Див. відкриті порти.string(unset)
exe_pathВибирає процеси для інструментування за їх шляхом до виконуваного файлу. Див. шлях до виконуваного файлу.string (glob)(unset)
containers_onlyВибирає процеси для інструментування, які працюють в OCI контейнері. Див. тільки контейнери.booleanfalse
k8s_namespaceФільтрує сервіси за простором імен Kubernetes. Див. простір імен K8s.string (glob)(unset)
k8s_pod_nameФільтрує сервіси за імʼям Pod в Kubernetes. Див. імʼя Pod в K8s.string (glob)(unset)
k8s_deployment_nameФільтрує сервіси за імʼям Deployment в Kubernetes. Див. імʼя Deployment в K8s.string (glob)(unset)
k8s_replicaset_nameФільтрує сервіси за імʼям ReplicaSet в Kubernetes. Див. імʼя ReplicaSet в K8s.string (glob)(unset)
k8s_statefulset_nameФільтрує сервіси за імʼям StatefulSet в Kubernetes. Див. імʼя StatefulSet в K8s.string (glob)(unset)
k8s_daemonset_nameФільтрує сервіси за імʼям DaemonSet в Kubernetes. Див. імʼя DaemonSet в K8s.string (glob)(unset)
k8s_owner_nameФільтрує сервіси за імʼям власника Pod в Kubernetes (Deployment, ReplicaSet, DaemonSet або StatefulSet). Див. імʼя власника K8s.string (glob)(unset)
k8s_pod_labelsФільтрує сервіси за мітками Pod в Kubernetes. Див. мітки Pod в K8s.map[string]string (glob)(unset)
k8s_pod_annotationsФільтрує сервіси за анотаціями Pod в Kubernetes. Див. анотації Pod в K8s.map[string]string (glob)(unset)

Відриті порти

Вибирає процес для інструментування за портом, який він має відкритим (на якому він слухає). Ця властивість приймає список портів, розділених комами, наприклад 80, і діапазони портів, наприклад 8000-8999. Якщо виконуваний файл відповідає лише одному з портів у списку, OBI вважає це збігом.

Наприклад, вказуючи наступну властивість:

discovery:
  instrument:
    - open_ports: 80,443,8000-8999

OBI вибирає будь-який виконуваний файл, який відкриває порт 80, 443 або будь-який з портів від 8000 до 8999 включно.

Якщо ви вказуєте інші селектори в тому ж запису instrument, процеси повинні відповідати всім властивостям селектора.

Якщо виконуваний файл відкриває кілька портів, вам потрібно вказати лише один з цих портів, щоб OBI інструментував усі HTTP/S та gRPC запити на всіх портах програми. В даний час ви не можете обмежити інструментування лише методами, які надаються через конкретний порт.

Шлях до виконуваного файлу

Вибирає процеси для інструментування за їх шляхом до виконуваного файлу. Ця властивість приймає шаблон для порівняння з повним командним рядком виконуваного файлу, включаючи теку, в якій знаходиться виконуваний файл у файловій системі.

OBI намагається інструментувати всі процеси з шляхом до виконуваного файлу, що відповідає цій властивості. Наприклад, встановлення exe_path: * змушує OBI намагатися інструментувати всі виконувані файли на хості.

Якщо ви вказуєте інші селектори в тому ж запису instrument, процеси повинні відповідати всім властивостям селектора.

Тільки контейнери

Вибирає процеси для інструментування, які працюють у контейнері OCI. Щоб виконати цю перевірку, OBI перевіряє простір імен мережі процесу та порівнює його зі своїм власним простором імен мережі. Якщо OBI не має достатніх прав для виконання перевірки простору імен мережі, він ігнорує цю опцію.

Якщо ви вказуєте інші селектори в тому ж запису instrument, процеси повинні відповідати всім властивостям селектора.

Простір імен K8s

Ця властивість селектора обмежує інструментування застосунків, які працюють у просторах імен Kubernetes з імʼям, що відповідає наданому шаблону.

Якщо ви вказуєте інші селектори в тому ж запису instrument, процеси повинні відповідати всім властивостям селектора.

Імʼя Podʼів K8s

Ця властивість селектора обмежує інструментування застосунків, які працюють у Podʼах Kubernetes з імʼям, що відповідає наданому шаблону.

Якщо ви вказуєте інші селектори в тому ж запису instrument, процеси повинні відповідати всім властивостям селектора.

Імʼя K8s deployment

Ця властивість селектора обмежує інструментування застосунків, які працюють у Kubernetes Deployments з імʼям, що відповідає наданому шаблону.

Ця властивість селектора обмежує інструментування застосунків, які працюють у Kubernetes Deployments з імʼям, що відповідає наданому шаблону.

Якщо ви вказуєте інші селектори в тому ж запису instrument, процеси повинні відповідати всім властивостям селектора.

Імʼя K8s replicaset

Ця властивість селектора обмежує інструментування застосунків, які працюють у Kubernetes ReplicaSets з імʼям, що відповідає наданому шаблону.

Якщо ви вказуєте інші селектори в тому ж запису instrument, процеси повинні відповідати всім властивостям селектора.

Імʼя K8s statefulset

Ця властивість селектора обмежує інструментування застосунків, які працюють у Kubernetes StatefulSets з імʼям, що відповідає наданому шаблону.

Якщо ви вказуєте інші селектори в тому ж запису instrument, процеси повинні відповідати всім властивостям селектора.

Імʼя K8s daemonset

Ця властивість селектора обмежує інструментування застосунків, які працюють у Kubernetes DaemonSets з імʼям, що відповідає наданому шаблону.

Якщо ви вказуєте інші селектори в тому ж запису instrument, процеси повинні відповідати всім властивостям селектора.

Імʼя K8s owner

Ця властивість селектора обмежує інструментування застосунків, які працюють у Podʼах, що належать до Deployment, ReplicaSet, DaemonSet або StatefulSet з імʼям, що відповідає наданому шаблону.

Якщо ви вказуєте інші селектори в тому ж запису instrument, процеси повинні відповідати всім властивостям селектора.

Імʼя власника K8s

Ця властивість селектора обмежує інструментування застосунків, які працюють у Podʼах, що належать до Deployment, ReplicaSet, DaemonSet або StatefulSet з імʼям, що відповідає наданому шаблону.

Якщо ви вказуєте інші селектори в тому ж запису instrument, процеси повинні відповідати всім властивостям селектора.

Мітки Podʼів K8s

Ця властивість селектора обмежує інструментування застосунків, які працюють у Podʼах з мітками, що відповідають наданому шаблону.

Якщо ви вказуєте інші селектори в тому ж запису instrument, процеси повинні відповідати всім властивостям селектора.

Наприклад:

discovery:
  instrument:
    - k8s_namespace: frontend
      k8s_pod_labels:
        instrument: obi

Приклад виявляє всі Podʼи у просторі імен frontend, які мають мітку instrument зі значенням, що відповідає шаблону obi.

Анотації Podʼів K8s

Ця властивість селектора обмежує інструментування застосунків, які працюють у Podʼах з анотаціями, що відповідають наданому шаблону.

Якщо ви вказуєте інші селектори в тому ж запису instrument, процеси повинні відповідати всім властивостям селектора.

Наприклад:

discovery:
  instrument:
    - k8s_namespace: backend
      k8s_pod_annotations:
        obi.instrument: 'true'

Приклад виявляє всі Podʼи у просторі імен backend, які мають анотацію obi.instrument зі значенням, що відповідає шаблону true.

Виключення сервісів з інструментування

Розділ exclude_instrument дозволяє вказати критерії вибору для виключення сервісів з інструментування. Він слідує тому ж формату визначення, як описано в розділі discovery services цього документа.

Ця опція допомагає уникнути інструментування сервісів, які зазвичай зустрічаються в середовищах спостереження. Наприклад, використовуйте цю опцію, щоб виключити інструментування Prometheus.

Приклад: Виключення конкретних просторів імен

discovery:
  instrument:
    - k8s_namespace: '*' # Інструментувати всі простори імен
  exclude_instrument:
    - k8s_namespace: development # Виключити простір імен development
    - k8s_namespace: staging # І простір імен staging

Приклад: Виключення сервісів за мітками

discovery:
  rules:
    - match:
        k8s_namespace: production
      exclude:
        k8s_pod_labels:
          skip-instrumentation: 'true'

В цьому прикладі skip-instrumentation — це мітка користувача на Kubernetes Pod. Ви можете використовувати будь-який ключ користувача і значення мітки для отримання збігу або виключення, залежно від домовленостей у вашій організації щодо позначень.

Приклад: Виключення конкретних виконуваних файлів

discovery:
  rules:
    - match:
        open_ports: 80,443,8080
      exclude:
        exe_path: '*prometheus*'
        exe_path: '*grafana*'

Стандартне виключення сервісів з інструментування

Розділ default_exclude_instrument вимикає інструментування самого OBI (самоінструментацію), OpenTelemetry Collector та інших компонентів спостереження. Він також вимикає інструментування різних системних просторів імен Kubernetes, щоб зменшити загальні витрати на генерацію метрик. Наступні розділи містять усі виключені компоненти:

  • Сервіси, виключені за exe_path: *beyla, *alloy, *ebpf-instrument, *otelcol, *otelcol-contrib, *otelcol-contrib[!/]*.
  • Сервіси, виключені за k8s_namespace: kube-system, kube-node-lease, local-path-storage, grafana-alloy, cert-manager, monitoring, gke-connect, gke-gmp-system, gke-managed-cim, gke-managed-filestorecsi, gke-managed-metrics-server, gke-managed-system, gke-system, gke-managed-volumepopulator, gatekeeper-system.

Змініть цю опцію, щоб дозволити OBI інструментувати себе або деякі з інших виключених компонентів.

Примітка: щоб увімкнути таку самоінструментацію, вам все ще потрібно включити їх у розділ instrument, або Ці компоненти повинні бути частиною всеосяжних критеріїв включення.

Приклад: Увімкнення інструментування для простору імен, який стандартно виключений

Для увімкнення інструментування для простору імен, який стандартно виключений (наприклад, monitoring), вам потрібно одночасно видалити його зі стандартних виключень та додати до розділу instrument.

Наступний приклад увімкне інструментування для простору імен monitoring:

discovery:
  # Включити простір імен monitoring у інструментування
  instrument:
    - k8s_namespace: monitoring

  # Перевизначити стандартні виключення, щоб видалити простір імен monitoring
  # Цей список зберігає інші стандартні виключення, але видаляє monitoring
  default_exclude_instrument:
    - exe_path: '{*beyla,*alloy,*ebpf-instrument,*otelcol,*otelcol-contrib,*otelcol-contrib[!/]*}'
    - k8s_namespace: kube-system
    - k8s_namespace: kube-node-lease
    - k8s_namespace: local-path-storage
    - k8s_namespace: grafana-alloy
    - k8s_namespace: cert-manager
    # простір імен monitoring видалено з цього списку
    - k8s_namespace: gke-connect
    - k8s_namespace: gke-gmp-system
    - k8s_namespace: gke-managed-cim
    - k8s_namespace: gke-managed-filestorecsi
    - k8s_namespace: gke-managed-metrics-server
    - k8s_namespace: gke-managed-system
    - k8s_namespace: gke-system
    - k8s_namespace: gke-managed-volumepopulator
    - k8s_namespace: gatekeeper-system

Приклад: Вимкнення всіх стандартних виключень

Для вимкнення всіх стандартних виключень і дозволу OBI інструментувати будь-який відповідний сервіс (включаючи себе та інші компоненти спостереження), встановіть default_exclude_instrument як порожній список:

discovery:
  instrument:
    - k8s_namespace: '*' # або вкажіть простір імен чи селектори

  # Порожній список вимикає всі стандартні виключення
  default_exclude_instrument: []

Пропуск специфічних трейсерів Go

Опція skip_go_specific_tracers вимикає виявлення специфіки Go, коли трейсери eBPF перевіряють виконувані файли для інструментування. Трейсер повертається до використання загального інструментування, яке зазвичай є менш ефективним.

Виключення сервісів інструментованих OTel

Опція exclude_otel_instrumented_services вимикає інструментування OBI для сервісів, які вже були інструментовані за допомогою OpenTelemetry. Оскільки OBI часто розгортається для моніторингу всіх сервісів у кластері Kubernetes, моніторинг вже інструментованих сервісів може призвести до дублювання телеметричних даних, якщо ви не обережно розробите критерії вибору (або виключення). Щоб уникнути непотрібних витрат на конфігурацію, OBI моніторить виклики SDK OpenTelemetry для публікації метрик і трейсів, і автоматично вимикає інструментування сервісів, які публікують свої власні телеметричні дані. Вимкніть цю опцію, якщо ваші телеметричні дані, згенеровані застосунком, не конфліктують з даними, згенерованими OBI.

Перевизначення імені та простору імен сервісу

Якщо ви експортуєте дані інструментування через OpenTelemetry або Prometheus, OBI дотримується домовленості іменування сервісів з оператора OpenTelemetry для покращення взаємодії з іншими рішеннями для інструментування.

OBI використовує такі критерії в цьому порядку для автоматичного встановлення імені та простору імен сервісу:

  1. Атрибути ресурсу встановлені через OTEL_RESOURCE_ATTRIBUTES та OTEL_SERVICE_NAME змінні середовища процесу або контейнера, що інструментується.
  2. У Kubernetes атрибути ресурсу встановлені через такі анотації Pod:
    • resource.opentelemetry.io/service.name
    • resource.opentelemetry.io/service.namespace
  3. У Kubernetes атрибути ресурсу встановлені через такі мітки Pod:
    • app.kubernetes.io/name встановлює імʼя сервісу
    • app.kubernetes.io/part-of встановлює простір імен сервісу
  4. У Kubernetes атрибути ресурсу обчислюються з метаданих власника Pod, у такому порядку (згідно з їх доступністю):
    • k8s.deployment.name
    • k8s.replicaset.name
    • k8s.statefulset.name
    • k8s.daemonset.name
    • k8s.cronjob.name
    • k8s.job.name
    • k8s.pod.name
    • k8s.container.name
  5. Виконуване імʼя інструментованого процесу.

Ви можете перевизначити мітки Kubernetes з попереднього пункту 3 через конфігурацію.

У YAML:

attributes:
  kubernetes:
    resource_labels:
      service.name:
        # отримує імʼя сервісу з першої існуючої мітки Pod
        - override-svc-name
        - app.kubernetes.io/name
      service.namespace:
        # отримує простір імен сервісу з першої існуючої мітки Pod
        - override-svc-ns
        - app.kubernetes.io/part-of

Вони приймають список імен анотацій та міток, розділених комами.


Востаннє змінено December 26, 2024: [uk] Ukrainian documentation for OpenTelemetry (2a3c5648)