Налаштування виявлення сервісів 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 objects | Path: {*beyla,*alloy,*prometheus-config-reloader,*ebpf-instrument,*otelcol,*otelcol-contrib,*otelcol-contrib[!/]*} and certain Kubernetes system namespaces |
skip_go_specific_tracersOTEL_EBPF_SKIP_GO_SPECIFIC_TRACERS | Вимикає виявлення специфіки Go, коли eBPF трейсер перевіряє виконувані файли для інструментування. Трейсер повертається до використання загального інструментування, яке зазвичай є менш ефективним. Див. розділ пропустити специфічні трейсери Go для отримання деталей. | boolean | false |
exclude_otel_instrumented_servicesOTEL_EBPF_EXCLUDE_OTEL_INSTRUMENTED_SERVICES | Вимикає інструментування OBI сервісів, які вже були інструментовані OpenTelemetry. Див. розділ виключення інструментованих сервісів для отримання деталей. | boolean | true |
exclude_otel_instrumented_services_span_metricsOTEL_EBPF_EXCLUDE_OTEL_INSTRUMENTED_SERVICES_SPAN_METRICS | Вимикає генерацію метрик відрізків/графіків сервісів OBI, які вже були інструментовані OpenTelemetry. Див. розділ виключення інструментованих сервісів для отримання деталей. | boolean | false |
Виявлення сервісів
Ви можете перевизначити назву сервісу, простір імен та інші конфігурації для кожного типу сервісу.
| YAML | Опис | Тип | Стандартно |
|---|---|---|---|
open_ports | Вибирає процес для інструментування за відкритим портом (на якому він слухає). Див. відкриті порти. | string | (unset) |
exe_path | Вибирає процеси для інструментування за їх шляхом до виконуваного файлу. Див. шлях до виконуваного файлу. | string (glob) | (unset) |
containers_only | Вибирає процеси для інструментування, які працюють в OCI контейнері. Див. тільки контейнери. | boolean | false |
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: []
Вимкнення всіх стандартних виключень може призвести до збільшення використання ресурсів та потенційних циклів зворотного звʼязку, якщо OBI інструментує себе або інші колектори телеметрії. Використовуйте цю конфігурацію обережно в промислових середовищах.
Пропуск специфічних трейсерів 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 використовує такі критерії в цьому порядку для автоматичного встановлення імені та простору імен сервісу:
- Атрибути ресурсу встановлені через
OTEL_RESOURCE_ATTRIBUTESтаOTEL_SERVICE_NAMEзмінні середовища процесу або контейнера, що інструментується. - У Kubernetes атрибути ресурсу встановлені через такі анотації Pod:
resource.opentelemetry.io/service.nameresource.opentelemetry.io/service.namespace
- У Kubernetes атрибути ресурсу встановлені через такі мітки Pod:
app.kubernetes.io/nameвстановлює імʼя сервісуapp.kubernetes.io/part-ofвстановлює простір імен сервісу
- У Kubernetes атрибути ресурсу обчислюються з метаданих власника Pod, у такому порядку (згідно з їх доступністю):
k8s.deployment.namek8s.replicaset.namek8s.statefulset.namek8s.daemonset.namek8s.cronjob.namek8s.job.namek8s.pod.namek8s.container.name
- Виконуване імʼя інструментованого процесу.
Ви можете перевизначити мітки 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
Вони приймають список імен анотацій та міток, розділених комами.
Відгук
Чи це було корисним?
Дякуємо. Ми цінуємо ваші відгуки!
Будь ласка, дайте нам знати як ми можемо покращити цю сторінку. Ми цінуємо ваші відгуки!