<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Документация Proto Observability Platform – zero-code</title><link>/docs/tags/zero-code/</link><description>Recent content in zero-code on Документация Proto Observability Platform</description><generator>Hugo -- gohugo.io</generator><language>ru</language><atom:link href="/docs/tags/zero-code/index.xml" rel="self" type="application/rss+xml"/><item><title>Instrumentation: Zero-code инструментация с OpenTelemetry eBPF (OBI)</title><link>/docs/instrumentation/tracing/opentelemetry-ebpf/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/instrumentation/tracing/opentelemetry-ebpf/</guid><description>
&lt;p>На этой странице:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="#%d0%b2%d0%b2%d0%b5%d0%b4%d0%b5%d0%bd%d0%b8%d0%b5">Введение&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d1%87%d1%82%d0%be-%d0%b2%d1%8b-%d0%bf%d0%be%d0%bb%d1%83%d1%87%d0%b8%d1%82%d0%b5">Что вы получите&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%ba%d0%b0%d0%ba-%d1%8d%d1%82%d0%be-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0%d0%b5%d1%82">Как это работает&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d1%82%d1%80%d0%b5%d0%b1%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f">Требования&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d1%88%d0%b0%d0%b3-1-%d0%b2%d0%ba%d0%bb%d1%8e%d1%87%d0%b8%d1%82%d0%b5-%d0%bf%d1%80%d0%b8%d1%91%d0%bc-otlp-%d0%bd%d0%b0-%d0%b0%d0%b3%d0%b5%d0%bd%d1%82%d0%b5">Шаг 1. Включите приём OTLP на агенте&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d1%88%d0%b0%d0%b3-2-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%b8%d1%82%d0%b5-obi-%d1%87%d0%b5%d1%80%d0%b5%d0%b7-helm">Шаг 2. Установите OBI через Helm&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d1%88%d0%b0%d0%b3-3-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d1%82%d0%b5-valuesyaml">Шаг 3. Настройте &lt;code>values.yaml&lt;/code>&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#%d1%87%d1%82%d0%be-%d0%b8%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d1%82%d1%8c-discovery">Что инструментировать (discovery)&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%ba%d1%83%d0%b4%d0%b0-%d0%be%d1%82%d0%bf%d1%80%d0%b0%d0%b2%d0%bb%d1%8f%d1%82%d1%8c-%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d0%b5-otlp-endpoint">Куда отправлять данные (OTLP endpoint)&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%b3%d1%80%d1%83%d0%bf%d0%bf%d0%b8%d1%80%d0%be%d0%b2%d0%ba%d0%b0-%d0%bc%d0%b0%d1%80%d1%88%d1%80%d1%83%d1%82%d0%be%d0%b2-routes">Группировка маршрутов (routes)&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#%d1%88%d0%b0%d0%b3-4-%d0%b4%d0%be%d0%b1%d0%b0%d0%b2%d1%8c%d1%82%d0%b5-%d1%82%d0%b5%d0%b3%d0%b8-%d0%b8-%d0%bf%d1%80%d0%b8%d0%b2%d1%8f%d0%b7%d0%ba%d1%83-%d0%ba-%d0%b8%d0%bd%d1%84%d1%80%d0%b0%d1%81%d1%82%d1%80%d1%83%d0%ba%d1%82%d1%83%d1%80%d0%b5">Шаг 4. Добавьте теги и привязку к инфраструктуре&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#%d0%b8%d0%bc%d1%8f-%d0%ba%d0%bb%d0%b0%d1%81%d1%82%d0%b5%d1%80%d0%b0">Имя кластера&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%be%d0%ba%d1%80%d1%83%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b3%d1%80%d1%83%d0%bf%d0%bf%d0%b0-%d1%81%d0%b5%d1%80%d0%b2%d0%b8%d1%81%d0%be%d0%b2-%d0%b8-%d0%bf%d1%80%d0%be%d0%b8%d0%b7%d0%b2%d0%be%d0%bb%d1%8c%d0%bd%d1%8b%d0%b5-%d1%82%d0%b5%d0%b3%d0%b8">Окружение, группа сервисов и произвольные теги&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d1%82%d0%b5%d0%b3-%d1%83%d0%b7%d0%bb%d0%b0-node">Тег узла (node)&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d1%82%d0%b5%d0%b3%d0%b8-%d0%bf%d0%be%d0%b4%d0%b0-%d0%b8-namespace">Теги пода и namespace&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%bf%d1%80%d0%b8%d0%b2%d1%8f%d0%b7%d0%ba%d0%b0-%d0%bb%d0%be%d0%b3%d0%be%d0%b2-%d1%81%d0%b5%d1%80%d0%b2%d0%b8%d1%81%d0%b0-service--env--version">Привязка логов сервиса (service / env / version)&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#%d0%bf%d0%be%d0%bb%d0%bd%d1%8b%d0%b9-%d0%bf%d1%80%d0%b8%d0%bc%d0%b5%d1%80-valuesyaml">Полный пример &lt;code>values.yaml&lt;/code>&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d1%88%d0%b0%d0%b3-5-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b0">Шаг 5. Проверка&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d1%81%d1%81%d1%8b%d0%bb%d0%ba%d0%b8">Ссылки&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="введение">Введение&lt;/h2>
&lt;p>&lt;a href="https://opentelemetry.io/docs/zero-code/obi/" target="_blank" rel="noopener noreferrer">OpenTelemetry eBPF Instrumentation (OBI)&lt;/a> — это
zero-code инструментация на основе eBPF. OBI автоматически отслеживает сетевые
запросы приложения (HTTP/HTTPS, gRPC и др.) на уровне ядра Linux и сам формирует
трейсы и метрики в формате OpenTelemetry (OTLP) — &lt;strong>без изменения кода приложения,
пересборки образов или подключения SDK/агентов внутрь контейнера&lt;/strong>.&lt;/p>
&lt;p>Это удобно, когда:&lt;/p>
&lt;ul>
&lt;li>приложение написано на языке, для которого нет (или неудобно подключать) трейсер;&lt;/li>
&lt;li>нет возможности менять код или образ (legacy, сторонний софт, прокси вроде NGINX/Apache);&lt;/li>
&lt;li>нужно быстро получить базовую observability по входящим/исходящим HTTP-запросам.&lt;/li>
&lt;/ul>
&lt;p>Сформированную телеметрию OBI отправляет по OTLP в агент Proto Observability
Platform, который умеет принимать OTLP (см.
&lt;a href="../opentelemetry/">Подключение OpenTelemetry&lt;/a>).&lt;/p>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Обратите внимание&lt;/h4>
OBI даёт инструментацию на уровне протоколов (входящие/исходящие запросы). Для
полной трассировки внутри процесса (спаны по функциям, запросам к БД из кода и т. п.)
по-прежнему используйте языковые трейсеры из этого раздела.
&lt;/div>
&lt;h2 id="что-вы-получите">Что вы получите&lt;/h2>
&lt;p>Несмотря на zero-code инструментацию, Proto Observability Platform &lt;strong>полностью&lt;/strong>
выполняет задачи мониторинга производительности сервисов, инструментированных с
помощью eBPF (OBI): обзорный дашборд сервиса, карта взаимодействия сервисов,
распределённые трейсы, анализ производительности эндпоинтов и сбор логов.&lt;/p>
&lt;p>Обзорный дашборд сервиса:&lt;/p>
&lt;p>&lt;img src="../images/ebpf-service-dashboard.png" alt="Обзорный дашборд сервиса, инструментированного с помощью OBI">&lt;/p>
&lt;p>Карта взаимодействия сервисов:&lt;/p>
&lt;p>&lt;img src="../images/ebpf-obi-01.png" alt="Карта взаимодействия сервисов, инструментированных с помощью OBI">&lt;/p>
&lt;p>Трейс сервиса:&lt;/p>
&lt;p>&lt;img src="../images/ebpf-obi-02.png" alt="Трейс сервиса, инструментированного с помощью OBI">&lt;/p>
&lt;p>Анализ производительности эндпоинтов сервиса:&lt;/p>
&lt;p>&lt;img src="../images/ebpf-obi-03.png" alt="Анализ производительности эндпоинтов сервиса">&lt;/p>
&lt;p>Логи сервиса:&lt;/p>
&lt;p>&lt;img src="../images/ebpf-logs.png" alt="Логи сервиса, инструментированного с помощью OBI, в интерфейсе ProtoOBP">&lt;/p>
&lt;p>Ниже описано, как развернуть и настроить OBI, чтобы получить такой результат.&lt;/p>
&lt;h2 id="как-это-работает">Как это работает&lt;/h2>
&lt;p>OBI разворачивается в кластере как &lt;strong>DaemonSet&lt;/strong> (по одному поду на узел). Под OBI
запускается привилегированным и с &lt;code>hostPID&lt;/code>, чтобы через eBPF подключаться к
процессам приложений, работающим на этом же узле. Обнаружение процессов и
обогащение телеметрии метаданными Kubernetes выполняется автоматически по правилам
discovery.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl"> ваше приложение (под) агент ProtoOBP
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌───────────────────┐ eBPF (zero-code) (DaemonSet, OTLP receiver)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ процесс (nginx, │◄─────────┐ ┌──────────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ java, go, ...) │ │ │ OTLP 4317 gRPC / │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └───────────────────┘ ┌───────┴───────┐ │ 4318 HTTP │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ OBI DaemonSet │──┴──► OTLP traces+metrics │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └────────────────┘ └──────────────────────┘
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="требования">Требования&lt;/h2>
&lt;ul>
&lt;li>Кластер Kubernetes и Helm 3.&lt;/li>
&lt;li>Узлы на Linux с ядром, поддерживающим eBPF (рекомендуется 5.8 и новее).&lt;/li>
&lt;li>Установленный и работающий &lt;a href="../../../setup/agent">агент ProtoOBP&lt;/a> с включённым
приёмом OTLP (см. &lt;a href="#%d1%88%d0%b0%d0%b3-1-%d0%b2%d0%ba%d0%bb%d1%8e%d1%87%d0%b8%d1%82%d0%b5-%d0%bf%d1%80%d0%b8%d1%91%d0%bc-otlp-%d0%bd%d0%b0-%d0%b0%d0%b3%d0%b5%d0%bd%d1%82%d0%b5">Шаг 1&lt;/a>).&lt;/li>
&lt;li>OBI запускается &lt;strong>привилегированным DaemonSet с &lt;code>hostPID&lt;/code>&lt;/strong> — это требование
eBPF-инструментации (нужны права на подключение к процессам узла).&lt;/li>
&lt;/ul>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Обратите внимание&lt;/h4>
OBI работает с &lt;code>hostPID&lt;/code> и видит все процессы узла. Инструментируются только те
процессы, которые соответствуют правилам &lt;code>discovery&lt;/code> (см. ниже). Разворачивайте OBI
с осознанием того, что это привилегированная рабочая нагрузка.
&lt;/div>
&lt;h2 id="шаг-1-включите-приём-otlp-на-агенте">Шаг 1. Включите приём OTLP на агенте&lt;/h2>
&lt;p>OBI отправляет данные по OTLP, поэтому на агенте ProtoOBP должен быть включён OTLP
receiver на портах &lt;code>4317&lt;/code> (gRPC) и/или &lt;code>4318&lt;/code> (HTTP). Подробно это описано на
странице &lt;a href="../opentelemetry/#%d0%b2%d0%ba%d0%bb%d1%8e%d1%87%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bf%d0%be%d0%b4%d0%b4%d0%b5%d1%80%d0%b6%d0%ba%d0%b8-opentelemetry-%d0%bd%d0%b0-%d0%b0%d0%b3%d0%b5%d0%bd%d1%82%d0%b5">Подключение OpenTelemetry → Включение поддержки OpenTelemetry на агенте&lt;/a>.&lt;/p>
&lt;p>Кратко, в &lt;code>values.yaml&lt;/code> Helm-чарта агента:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">protoobp&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">otlp&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">receiver&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">protocols&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">grpc&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">endpoint&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">0.0.0.0&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="m">4317&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">enabled&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">http&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">endpoint&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">0.0.0.0&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="m">4318&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">enabled&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>После изменения обновите релиз агента, например:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">helm upgrade protoobp -f values.yaml protoobp/protoobp --namespace protoobp
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="шаг-2-установите-obi-через-helm">Шаг 2. Установите OBI через Helm&lt;/h2>
&lt;p>Для Kubernetes используется официальный Helm-чарт OpenTelemetry:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">helm repo update
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">helm upgrade --install obi open-telemetry/opentelemetry-ebpf-instrumentation &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --namespace &amp;lt;ваш-namespace&amp;gt; &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -f obi-values.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Файл &lt;code>obi-values.yaml&lt;/code> описан ниже. OBI должен работать в том же кластере, что и
инструментируемые приложения; правила discovery указывают, какие именно рабочие
нагрузки инструментировать.&lt;/p>
&lt;h2 id="шаг-3-настройте-valuesyaml">Шаг 3. Настройте &lt;code>values.yaml&lt;/code>&lt;/h2>
&lt;p>Минимальная конфигурация чарта: режим &lt;code>application&lt;/code>, привилегированный режим и
блок &lt;code>config.data&lt;/code> с настройками OBI.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">preset&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">application&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">privileged&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">config&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">create&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">data&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">attributes&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">kubernetes&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">enable&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">discovery&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">instrument&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">namespace&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">&amp;lt;ваш-namespace&amp;gt;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">k8s_deployment_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">&amp;lt;имя-deployment&amp;gt;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">otel_metrics_export&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">endpoint&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">http://protoobp.protoobp.svc.cluster.local:4318&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">otel_traces_export&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">endpoint&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">http://protoobp.protoobp.svc.cluster.local:4318&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="что-инструментировать-discovery">Что инструментировать (discovery)&lt;/h3>
&lt;p>Блок &lt;code>discovery.instrument&lt;/code> — это список правил, какие рабочие нагрузки подключать.
Правила можно задавать по имени деплоймента и namespace:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">discovery&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">instrument&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">namespace&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">payments&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">k8s_deployment_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">api-gateway&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">namespace&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">payments&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">k8s_deployment_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">checkout&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>При &lt;code>attributes.kubernetes.enable: true&lt;/code> OBI автоматически добавляет к телеметрии
метаданные Kubernetes (&lt;code>k8s.namespace.name&lt;/code>, &lt;code>k8s.pod.name&lt;/code>, &lt;code>k8s.deployment.name&lt;/code>,
&lt;code>k8s.node.name&lt;/code> и др.). Чтобы это работало, ServiceAccount OBI должен иметь права
на чтение &lt;code>pods&lt;/code>, &lt;code>services&lt;/code>, &lt;code>nodes&lt;/code> и &lt;code>replicasets&lt;/code> — официальный чарт создаёт
нужные &lt;code>ClusterRole&lt;/code>/&lt;code>ClusterRoleBinding&lt;/code> автоматически.&lt;/p>
&lt;h3 id="куда-отправлять-данные-otlp-endpoint">Куда отправлять данные (OTLP endpoint)&lt;/h3>
&lt;p>OBI определяет протокол OTLP &lt;strong>по порту эндпоинта&lt;/strong>: порт, оканчивающийся на &lt;code>4317&lt;/code>,
трактуется как gRPC, на &lt;code>4318&lt;/code> — как HTTP/protobuf.&lt;/p>
&lt;p>При стандартной установке агента (Helm-релиз &lt;code>protoobp&lt;/code> в namespace &lt;code>protoobp&lt;/code>) в
кластере присутствуют:&lt;/p>
&lt;ul>
&lt;li>Service &lt;code>protoobp&lt;/code> в namespace &lt;code>protoobp&lt;/code> (FQDN &lt;code>protoobp.protoobp.svc.cluster.local&lt;/code>)
с OTLP-портами &lt;code>4317&lt;/code> (gRPC) и &lt;code>4318&lt;/code> (HTTP);&lt;/li>
&lt;li>DaemonSet &lt;code>protoobp&lt;/code> (поды вида &lt;code>protoobp-&amp;lt;hash&amp;gt;&lt;/code>), работающий в режиме &lt;code>hostNetwork&lt;/code>,
поэтому OTLP-порты доступны и на IP узла.&lt;/li>
&lt;/ul>
&lt;p>Есть два рабочих варианта адреса агента:&lt;/p>
&lt;ul class="nav nav-tabs" id="tabs-2" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-02-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-02-00" role="tab"
data-td-tp-persist="по host ip узла (рекомендуется)" aria-controls="tabs-02-00" aria-selected="true">
По host IP узла (рекомендуется)
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-02-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-02-01" role="tab"
data-td-tp-persist="по имени service" aria-controls="tabs-02-01" aria-selected="false">
По имени Service
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-2-content">
&lt;div class="tab-body tab-pane fade show active"
id="tabs-02-00" role="tabpanel" aria-labelled-by="tabs-02-00-tab" tabindex="2">
&lt;p>Агент ProtoOBP, как правило, развёрнут как DaemonSet в режиме &lt;code>hostNetwork&lt;/code>, поэтому
доступен на IP-адресе узла. Официальный чарт OBI уже прокидывает в под переменную
&lt;code>HOST_IP&lt;/code> (из &lt;code>status.hostIP&lt;/code>), поэтому достаточно задать стандартную переменную
OpenTelemetry &lt;code>OTEL_EXPORTER_OTLP_ENDPOINT&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">env&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">OTEL_EXPORTER_OTLP_ENDPOINT&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;http://$(HOST_IP):4318&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># HTTP; для gRPC используйте :4317&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>В этом случае поля &lt;code>otel_metrics_export.endpoint&lt;/code> / &lt;code>otel_traces_export.endpoint&lt;/code> в
&lt;code>config.data&lt;/code> можно не указывать. Этот вариант соответствует рекомендации из
&lt;a href="../opentelemetry/#%d0%be%d1%82%d0%bf%d1%80%d0%b0%d0%b2%d0%ba%d0%b0-%d1%82%d1%80%d0%b5%d0%b9%d1%81%d0%be%d0%b2-%d0%b8-%d0%bc%d0%b5%d1%82%d1%80%d0%b8%d0%ba-opentelemetry-%d0%b0%d0%b3%d0%b5%d0%bd%d1%82%d1%83-protoobp">Подключение OpenTelemetry для Kubernetes&lt;/a>.&lt;/p>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-02-01" role="tabpanel" aria-labelled-by="tabs-02-01-tab" tabindex="2">
&lt;p>У агента есть ClusterIP Service &lt;code>protoobp&lt;/code> в namespace &lt;code>protoobp&lt;/code>, поэтому можно
указать его DNS-имя прямо в конфиге OBI:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">config&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">data&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">otel_metrics_export&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">endpoint&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">http://protoobp.protoobp.svc.cluster.local:4318&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">otel_traces_export&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">endpoint&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">http://protoobp.protoobp.svc.cluster.local:4318&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="alert alert-info" role="alert">
&lt;pre>&lt;code>&amp;lt;code&amp;gt;protoobp.protoobp&amp;lt;/code&amp;gt; — это &amp;lt;code&amp;gt;&amp;amp;lt;имя-Service&amp;amp;gt;.&amp;amp;lt;namespace&amp;amp;gt;&amp;lt;/code&amp;gt; при стандартной установке
&lt;/code>&lt;/pre>
&lt;p>агента (релиз &lt;code>protoobp&lt;/code> в namespace &lt;code>protoobp&lt;/code>). Если ваш релиз/namespace другой —
подставьте свои значения.&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h3 id="группировка-маршрутов-routes">Группировка маршрутов (routes)&lt;/h3>
&lt;p>Чтобы идентификаторы в путях (ID пользователя, заказа и т. п.) не «раздували»
имена спанов и значения меток метрик, задайте низкокардинальные шаблоны маршрутов:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">config&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">data&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">routes&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">patterns&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">/users/:user_id/home&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">/api/orders/:order_id&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">/api/products/:product_id/reviews&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">unmatched&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">path&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Параметры в шаблоне обозначаются через &lt;code>:имя&lt;/code>. Запросы, не подошедшие ни под один
шаблон, обрабатываются согласно &lt;code>unmatched&lt;/code> (например, &lt;code>path&lt;/code> — оставить путь как есть).&lt;/p>
&lt;h2 id="шаг-4-добавьте-теги-и-привязку-к-инфраструктуре">Шаг 4. Добавьте теги и привязку к инфраструктуре&lt;/h2>
&lt;p>Чтобы в интерфейсе Proto Observability Platform у спанов отображались ссылки на
инфраструктурные сущности (кластер, узел, namespace, под) и удобная группировка,
к телеметрии нужно добавить соответствующие теги. Для этого используются:&lt;/p>
&lt;ul>
&lt;li>поле &lt;code>config.data.attributes.kubernetes.cluster_name&lt;/code> — для имени кластера;&lt;/li>
&lt;li>стандартная переменная &lt;code>OTEL_RESOURCE_ATTRIBUTES&lt;/code> — для статических тегов
(окружение, группа сервисов и т. д.).&lt;/li>
&lt;/ul>
&lt;p>Перечисленные в &lt;code>OTEL_RESOURCE_ATTRIBUTES&lt;/code> атрибуты добавляются ко &lt;strong>всей&lt;/strong>
телеметрии данного пода OBI и становятся тегами на агенте.&lt;/p>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Соглашение по именам тегов&lt;/h4>
Имена тегов (&lt;code>env&lt;/code>, &lt;code>service_group&lt;/code>, &lt;code>kube_cluster_name&lt;/code> и др.) указывайте согласно
&lt;a href="../tags_naming_convention/">конвенции наименования тегов&lt;/a>.
&lt;/div>
&lt;h3 id="имя-кластера">Имя кластера&lt;/h3>
&lt;p>Без явного имени кластера OBI пишет предупреждение &lt;code>can't fetch Kubernetes Cluster Name&lt;/code>, поле &lt;code>k8s.cluster.name&lt;/code> остаётся пустым, и ссылка на кластер в интерфейсе не
строится. Задайте имя кластера:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">config&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">data&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">attributes&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">kubernetes&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">enable&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">cluster_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">&amp;lt;имя-кластера&amp;gt;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Дополнительно продублируйте имя кластера тегом &lt;code>kube_cluster_name&lt;/code> (см. ниже) —
именно по этому тегу строится ссылка на кластер.&lt;/p>
&lt;h3 id="окружение-группа-сервисов-и-произвольные-теги">Окружение, группа сервисов и произвольные теги&lt;/h3>
&lt;p>Статические теги задаются через &lt;code>OTEL_RESOURCE_ATTRIBUTES&lt;/code> в блоке &lt;code>env&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">env&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">OTEL_RESOURCE_ATTRIBUTES&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;deployment.environment=&amp;lt;env&amp;gt;,kube_cluster_name=&amp;lt;имя-кластера&amp;gt;,service_group=&amp;lt;группа&amp;gt;&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Где:&lt;/p>
&lt;ul>
&lt;li>&lt;code>deployment.environment&lt;/code> → тег &lt;code>env&lt;/code> (логическое окружение: &lt;code>production&lt;/code>, &lt;code>demo&lt;/code> и т. д.);&lt;/li>
&lt;li>&lt;code>kube_cluster_name&lt;/code> → ссылка на кластер в интерфейсе;&lt;/li>
&lt;li>&lt;code>service_group&lt;/code> → группировка сервисов;&lt;/li>
&lt;li>можно добавить любые свои пары &lt;code>ключ=значение&lt;/code> через запятую.&lt;/li>
&lt;/ul>
&lt;h3 id="тег-узла-node">Тег узла (node)&lt;/h3>
&lt;p>Так как OBI — это DaemonSet с &lt;code>hostPID&lt;/code>, каждый под OBI инструментирует процессы
&lt;strong>только своего узла&lt;/strong>. Значит имя узла одинаково для всех его спанов и его можно
взять из downward API. Официальный чарт поддерживает блок &lt;code>envValueFrom&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">envValueFrom&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">NODE_NAME&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">fieldRef&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">fieldPath&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">spec.nodeName&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">env&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># NODE_NAME подставляется из envValueFrom (объявлен раньше env), Kubernetes&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># раскрывает $(NODE_NAME) во время запуска контейнера.&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">OTEL_RESOURCE_ATTRIBUTES&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;deployment.environment=&amp;lt;env&amp;gt;,kube_cluster_name=&amp;lt;имя-кластера&amp;gt;,service_group=&amp;lt;группа&amp;gt;,node=$(NODE_NAME)&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Тег &lt;code>node&lt;/code> даёт ссылку на узел в интерфейсе.&lt;/p>
&lt;h3 id="теги-пода-и-namespace">Теги пода и namespace&lt;/h3>
&lt;p>Теги пода и namespace (&lt;code>pod_name&lt;/code>, &lt;code>kube_namespace&lt;/code>) задавать вручную &lt;strong>не нужно&lt;/strong> —
они различаются для каждого инструментируемого пода, и OBI проставляет их
автоматически из метаданных Kubernetes (&lt;code>k8s.pod.name&lt;/code>, &lt;code>k8s.namespace.name&lt;/code>) при
&lt;code>attributes.kubernetes.enable: true&lt;/code>.&lt;/p>
&lt;h3 id="привязка-логов-сервиса-service--env--version">Привязка логов сервиса (service / env / version)&lt;/h3>
&lt;p>OBI формирует трейсы и метрики, но &lt;strong>не&lt;/strong> собирает логи приложения — их собирает
сам агент ProtoOBP (при включённом сборе логов контейнеров). По умолчанию агент
тегирует такие логи именем образа (например, &lt;code>nginx&lt;/code>, &lt;code>httpd&lt;/code>), поэтому на вкладке
«Логи» сервиса (запрос вида &lt;code>service:&amp;quot;&amp;lt;имя-сервиса&amp;gt;&amp;quot;&lt;/code>) они не находятся.&lt;/p>
&lt;p>Чтобы логи привязались к тому же сервису, что и трейсы OBI, добавьте метки
&lt;a href="../tags_naming_convention/">Unified Service Tagging&lt;/a> в шаблон пода
&lt;strong>инструментируемого приложения&lt;/strong> (не пода OBI):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">template&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">labels&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># = имя, под которым сервис виден в Proto Observability Platform&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># (по умолчанию OBI использует имя deployment).&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">tags.proto.group/service&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">&amp;lt;имя-сервиса&amp;gt;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">tags.proto.group/env&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">&amp;lt;env&amp;gt; &lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># то же окружение, что и в OBI&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">tags.proto.group/version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">&amp;lt;version&amp;gt;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>После этого логи контейнера тегируются &lt;code>service&lt;/code> / &lt;code>env&lt;/code> / &lt;code>version&lt;/code> и отображаются
на вкладке «Логи» соответствующего сервиса. Значение &lt;code>tags.proto.group/service&lt;/code>
должно точно совпадать с именем сервиса в APM, а &lt;code>tags.proto.group/env&lt;/code> — с
окружением, заданным для OBI (&lt;code>deployment.environment&lt;/code>), чтобы трейсы, метрики и
логи сходились на одном сервисе.&lt;/p>
&lt;h2 id="полный-пример-valuesyaml">Полный пример &lt;code>values.yaml&lt;/code>&lt;/h2>
&lt;p>Ниже — собранный воедино пример для официального чарта
&lt;code>open-telemetry/opentelemetry-ebpf-instrumentation&lt;/code>. Замените значения в угловых
скобках на свои.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">preset&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">application&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">privileged&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">config&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">create&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">data&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">attributes&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">kubernetes&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">enable&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">cluster_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">&amp;lt;имя-кластера&amp;gt;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">discovery&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">instrument&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">namespace&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">&amp;lt;ваш-namespace&amp;gt;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">k8s_deployment_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">&amp;lt;имя-deployment&amp;gt;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">routes&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">patterns&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">/users/:user_id/home&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">/api/orders/:order_id&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">unmatched&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">path&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># Если используете отправку по host IP (ниже, через OTEL_EXPORTER_OTLP_ENDPOINT),&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># эти два поля можно не указывать. Альтернатива — слать на Service агента&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># (релиз protoobp в namespace protoobp):&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># otel_metrics_export:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># endpoint: http://protoobp.protoobp.svc.cluster.local:4318&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># otel_traces_export:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># endpoint: http://protoobp.protoobp.svc.cluster.local:4318&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="c"># Имя узла из downward API — для тега node.&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">envValueFrom&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">NODE_NAME&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">fieldRef&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">fieldPath&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">spec.nodeName&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">env&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># Отправка в агент по host IP узла (HOST_IP чарт подставляет сам).&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">OTEL_EXPORTER_OTLP_ENDPOINT&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;http://$(HOST_IP):4318&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># Прочие настройки OBI.&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">OTEL_EBPF_DISCOVERY_POLL_INTERVAL&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;5s&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">OTEL_EBPF_METRICS_INTERVAL&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;30s&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">OTEL_EBPF_NAME_RESOLVER_SOURCES&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;k8s,dns&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># Теги для группировки и привязки к инфраструктуре.&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">OTEL_RESOURCE_ATTRIBUTES&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;deployment.environment=&amp;lt;env&amp;gt;,kube_cluster_name=&amp;lt;имя-кластера&amp;gt;,service_group=&amp;lt;группа&amp;gt;,node=$(NODE_NAME)&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Установка/обновление:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">helm upgrade --install obi open-telemetry/opentelemetry-ebpf-instrumentation &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --namespace &amp;lt;ваш-namespace&amp;gt; &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -f obi-values.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="шаг-5-проверка">Шаг 5. Проверка&lt;/h2>
&lt;ol>
&lt;li>
&lt;p>Под OBI запущен и привязался к процессам:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">kubectl -n &amp;lt;ваш-namespace&amp;gt; rollout status ds/obi-opentelemetry-ebpf-instrumentation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">kubectl -n &amp;lt;ваш-namespace&amp;gt; logs ds/obi-opentelemetry-ebpf-instrumentation &lt;span class="p">|&lt;/span> grep -i &lt;span class="s2">&amp;#34;instrumenting process&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>В логах появятся строки &lt;code>msg=&amp;quot;instrumenting process&amp;quot;&lt;/code> для обнаруженных процессов.
Предупреждение про &lt;code>bpffs&lt;/code> (если есть) не критично — трейсы и метрики работают;
оно лишь отключает дополнительные функции (например, обогащение логов).&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Нет ошибок экспорта OTLP:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">kubectl -n &amp;lt;ваш-namespace&amp;gt; logs ds/obi-opentelemetry-ebpf-instrumentation &lt;span class="p">|&lt;/span> grep -iE &lt;span class="s2">&amp;#34;export|otlp&amp;#34;&lt;/span> &lt;span class="p">|&lt;/span> grep -i error
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Пустой вывод — ошибок нет.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>В интерфейсе Proto Observability Platform появятся сервисы с трейсами и
HTTP-метриками, сгруппированными по маршруту и &lt;code>http.response.status_code&lt;/code>, а у
спанов — теги и ссылки на инфраструктуру (кластер, узел, namespace, под).
Примеры того, как это выглядит, приведены в начале страницы, в разделе
&lt;a href="#%d1%87%d1%82%d0%be-%d0%b2%d1%8b-%d0%bf%d0%be%d0%bb%d1%83%d1%87%d0%b8%d1%82%d0%b5">«Что вы получите»&lt;/a>.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h2 id="ссылки">Ссылки&lt;/h2>
&lt;ul>
&lt;li>Документация OBI: &lt;a href="https://opentelemetry.io/docs/zero-code/obi/" target="_blank" rel="noopener noreferrer">https://opentelemetry.io/docs/zero-code/obi/&lt;/a>&lt;/li>
&lt;li>Официальные примеры (NGINX, Apache) и манифесты Kubernetes:
&lt;a href="https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/tree/v0.9.0/examples" target="_blank" rel="noopener noreferrer">https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/tree/v0.9.0/examples&lt;/a>&lt;/li>
&lt;li>Helm-чарт OBI:
&lt;a href="https://github.com/open-telemetry/opentelemetry-helm-charts/tree/main/charts/opentelemetry-ebpf-instrumentation" target="_blank" rel="noopener noreferrer">https://github.com/open-telemetry/opentelemetry-helm-charts/tree/main/charts/opentelemetry-ebpf-instrumentation&lt;/a>&lt;/li>
&lt;li>&lt;a href="../opentelemetry/">Подключение OpenTelemetry (включение OTLP на агенте)&lt;/a>&lt;/li>
&lt;li>&lt;a href="../tags_naming_convention/">Конвенция наименования тегов&lt;/a>&lt;/li>
&lt;/ul></description></item></channel></rss>