<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Документация Proto Observability Platform – sampling priority</title><link>/docs/tags/sampling-priority/</link><description>Recent content in sampling priority on Документация Proto Observability Platform</description><generator>Hugo -- gohugo.io</generator><language>ru</language><atom:link href="/docs/tags/sampling-priority/index.xml" rel="self" type="application/rss+xml"/><item><title>Instrumentation: Управление сэмплированием трейсов в Proto Observability Platform</title><link>/docs/instrumentation/tracing/sampling/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/instrumentation/tracing/sampling/</guid><description>
&lt;p>На этой странице:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="#%d1%87%d1%82%d0%be-%d1%82%d0%b0%d0%ba%d0%be%d0%b5-%d1%81%d1%8d%d0%bc%d0%bf%d0%bb%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5">Что такое сэмплирование&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%be%d0%b1%d0%bb%d0%b0%d1%81%d1%82%d1%8c-%d0%bf%d1%80%d0%b8%d0%bc%d0%b5%d0%bd%d0%b5%d0%bd%d0%b8%d1%8f">Область применения&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%bf%d1%80%d0%b8%d0%be%d1%80%d0%b8%d1%82%d0%b5%d1%82-%d1%81%d1%8d%d0%bc%d0%bf%d0%bb%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-%d0%b8-%d0%b7%d0%b0%d0%b3%d0%be%d0%bb%d0%be%d0%b2%d0%be%d0%ba-x-protoobp-sampling-priority">Приоритет сэмплирования и заголовок &lt;code>x-protoobp-sampling-priority&lt;/code>&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d1%82%d1%80%d0%b8-%d1%83%d1%80%d0%be%d0%b2%d0%bd%d1%8f-%d0%b3%d0%b4%d0%b5-%d0%bf%d1%80%d0%b8%d0%bd%d0%b8%d0%bc%d0%b0%d0%b5%d1%82%d1%81%d1%8f-%d1%80%d0%b5%d1%88%d0%b5%d0%bd%d0%b8%d0%b5-%d0%be-%d1%81%d0%b1%d0%be%d1%80%d0%b5">Три уровня, где принимается решение о сборе&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%bf%d0%b0%d1%80%d0%b0%d0%bc%d0%b5%d1%82%d1%80%d1%8b-%d1%81%d1%8d%d0%bc%d0%bf%d0%bb%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-%d0%b8-%d0%b7%d0%bd%d0%b0%d1%87%d0%b5%d0%bd%d0%b8%d1%8f-%d0%bf%d0%be-%d1%83%d0%bc%d0%be%d0%bb%d1%87%d0%b0%d0%bd%d0%b8%d1%8e">Параметры сэмплирования и значения по умолчанию&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d0%b3%d0%be-%d1%81%d0%b1%d0%be%d1%80%d0%b0">Настройка полного сбора&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b2%d1%81%d0%b5-%d1%8f%d0%b7%d1%8b%d0%ba%d0%b8">Приложение (все языки)&lt;/a>&lt;/li>
&lt;li>&lt;a href="#nginx">Nginx&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%b0%d0%b3%d0%b5%d0%bd%d1%82">Агент&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b0-%d1%81%d0%b1%d0%be%d1%80%d0%b0-%d0%b4%d0%bb%d1%8f-%d0%b1%d0%b8%d0%b7%d0%bd%d0%b5%d1%81-%d0%bf%d1%80%d0%be%d1%86%d0%b5%d1%81%d1%81%d0%be%d0%b2">Полнота сбора для бизнес-процессов&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d0%b0-%d1%81%d1%8d%d0%bc%d0%bf%d0%bb%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-%d0%bf%d0%be-%d1%81%d0%b5%d1%80%d0%b2%d0%b8%d1%81%d0%b0%d0%bc-%d0%b8-%d0%be%d0%bf%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d1%8f%d0%bc">Правила сэмплирования по сервисам и операциям&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%bf%d1%80%d0%b8%d0%bd%d1%83%d0%b4%d0%b8%d1%82%d0%b5%d0%bb%d1%8c%d0%bd%d0%be%d0%b5-%d1%81%d0%be%d1%85%d1%80%d0%b0%d0%bd%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b8-%d0%be%d1%82%d0%b1%d1%80%d0%b0%d1%81%d1%8b%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d0%b2-%d0%ba%d0%be%d0%b4%d0%b5-force-keep--drop">Принудительное сохранение и отбрасывание в коде (force keep / drop)&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d1%81%d1%8d%d0%bc%d0%bf%d0%bb%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d0%be%d1%82%d0%b4%d0%b5%d0%bb%d1%8c%d0%bd%d1%8b%d1%85-%d1%81%d0%bf%d0%b0%d0%bd%d0%be%d0%b2">Сэмплирование отдельных спанов&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d1%87%d0%b0%d1%81%d1%82%d1%8b%d0%b5-%d0%bf%d1%80%d0%b8%d1%87%d0%b8%d0%bd%d1%8b-%d0%bf%d0%be%d1%82%d0%b5%d1%80%d0%b8-%d1%81%d0%bf%d0%b0%d0%bd%d0%be%d0%b2">Частые причины потери спанов&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%b2%d0%bb%d0%b8%d1%8f%d0%bd%d0%b8%d0%b5-%d0%bf%d0%b5%d1%80%d0%b5%d1%85%d0%be%d0%b4%d0%b0-%d0%bd%d0%b0-%d0%bf%d0%be%d0%bb%d0%bd%d1%8b%d0%b9-%d1%81%d0%b1%d0%be%d1%80">Влияние перехода на полный сбор&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%ba%d0%b0%d0%ba-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%b8%d1%82%d1%8c-%d1%84%d0%b0%d0%ba%d1%82%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%b8%d0%b5-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b8">Как проверить фактические настройки&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="что-такое-сэмплирование">Что такое сэмплирование&lt;/h2>
&lt;p>Сэмплирование — это механизм выборочного сбора трейсов. Чтобы снизить накладные расходы на инструментируемое приложение, сеть и хранилище, трейсер сохраняет и отправляет в агента не все трейсы, а заданную их долю. Остальные трейсы отбрасываются целиком.&lt;/p>
&lt;p>Proto Observability Platform использует &lt;strong>head-based sampling&lt;/strong>: решение о сохранении или отбрасывании трейса принимается один раз, в самом начале трейса (на корневом спане), и затем распространяется по всей цепочке вызовов. Благодаря этому трейс не «разрывается» — сохраняются либо все спаны трейса, либо ни одного.&lt;/p>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Обратите внимание&lt;/h4>
Сэмплирование выполняется на стороне источника — трейсером приложения, трейсером Nginx или агентом. Платформа приёма полученные трейсы не сэмплирует. Поэтому если часть трейсов приходит неполной или не приходит вовсе, настройки нужно искать в конфигурации трейсеров и агента.
&lt;/div>
&lt;h2 id="область-применения">Область применения&lt;/h2>
&lt;p>Правила и параметры, описанные на этой странице, действуют для &lt;strong>трейсеров ProtoOBP и Datadog&lt;/strong> — они используют совместимую модель сэмплирования (head-based sampling, заголовок приоритета &lt;code>*-sampling-priority&lt;/code>, параметры &lt;code>sample_rate&lt;/code> / &lt;code>rate_limit&lt;/code> / &lt;code>sampling_rules&lt;/code>). Это относится ко всем поддерживаемым языкам и средам: &lt;strong>Go, Java, Python, Node.js, PHP, Ruby, .NET и Nginx&lt;/strong>.&lt;/p>
&lt;p>Имена переменных различаются только префиксом семейства:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>ProtoOBP-трейсеры&lt;/strong> — переменные окружения &lt;code>POBP_*&lt;/code>, system properties &lt;code>-Dpobp.*&lt;/code> (для JVM), директива Nginx &lt;code>protoobp_sample_rate&lt;/code>.&lt;/li>
&lt;li>&lt;strong>Datadog-трейсеры&lt;/strong> — переменные окружения &lt;code>DD_*&lt;/code>, system properties &lt;code>-Ddd.*&lt;/code> (для JVM), директива Nginx &lt;code>datadog_sample_rate&lt;/code>.&lt;/li>
&lt;/ul>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">OpenTelemetry и New Relic — другие конвенции&lt;/h4>
Для трейсеров &lt;strong>OpenTelemetry&lt;/strong> сэмплирование настраивается иначе — через сэмплер OTEL (&lt;code>OTEL_TRACES_SAMPLER&lt;/code> / &lt;code>OTEL_TRACES_SAMPLER_ARG&lt;/code>, а в коллекторе — &lt;code>otel-sampler&lt;/code> / &lt;code>otel-sampler-ratio&lt;/code>), см. страницу &lt;a href="../opentelemetry">OpenTelemetry&lt;/a>. Трейсер &lt;strong>New Relic&lt;/strong> использует собственную (адаптивную) выборку, настраиваемую в его конфигурации. Параметры &lt;code>POBP_*&lt;/code> / &lt;code>DD_*&lt;/code> и заголовок &lt;code>x-protoobp-sampling-priority&lt;/code> на них &lt;strong>не распространяются&lt;/strong>.
&lt;/div>
&lt;h2 id="приоритет-сэмплирования-и-заголовок-x-protoobp-sampling-priority">Приоритет сэмплирования и заголовок &lt;code>x-protoobp-sampling-priority&lt;/code>&lt;/h2>
&lt;p>Решение о сохранении трейса передаётся между сервисами в служебном HTTP-заголовке распространения контекста &lt;code>x-protoobp-sampling-priority&lt;/code>. Это не пользовательская настройка и не серверный параметр — значение проставляет трейсер, а нижестоящие сервисы наследуют его, чтобы принять то же решение для своей части трейса.&lt;/p>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Заголовки семейств не взаимозаменяемы&lt;/h4>
ProtoOBP-трейсеры используют заголовок &lt;code>x-protoobp-sampling-priority&lt;/code>, Datadog-трейсеры — &lt;code>x-datadog-sampling-priority&lt;/code>. Платформа приёма понимает оба, но &lt;strong>в пределах одной цепочки&lt;/strong> трейсеры должны использовать один формат распространения: ProtoOBP-модуль не читает &lt;code>x-datadog-*&lt;/code>, и наоборот. Если сервис ProtoOBP-семейства и сервис Datadog-семейства идут в одной цепочке, между ними произойдёт разрыв контекста, если формат распространения не согласован явно. Внутри однородного парка (только ProtoOBP или только Datadog) распространение работает без дополнительной настройки.
&lt;/div>
&lt;p>Заголовок принимает следующие значения:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Значение&lt;/th>
&lt;th>Смысл&lt;/th>
&lt;th>Кто ставит&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>1&lt;/code> (AUTO_KEEP)&lt;/td>
&lt;td>трейс &lt;strong>сохранить&lt;/strong>, все спаны собираются&lt;/td>
&lt;td>трейсер по авто-рейту&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>0&lt;/code> (AUTO_REJECT)&lt;/td>
&lt;td>трейс &lt;strong>отбросить&lt;/strong>, спаны не отправляются&lt;/td>
&lt;td>трейсер по авто-рейту&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>2&lt;/code> (USER_KEEP)&lt;/td>
&lt;td>принудительно сохранить (сработало правило/&lt;code>sample_rate&lt;/code>)&lt;/td>
&lt;td>пользовательское правило&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>-1&lt;/code> (USER_REJECT)&lt;/td>
&lt;td>принудительно отбросить&lt;/td>
&lt;td>пользовательское правило&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Значения &lt;code>0&lt;/code> и &lt;code>1&lt;/code> — это автоматическое решение трейсера по рейтам от агента. Значения &lt;code>2&lt;/code> и &lt;code>-1&lt;/code> появляются, когда сработало явное правило (&lt;code>sampling_rules&lt;/code> или заданный &lt;code>sample_rate&lt;/code>). Приоритет &lt;code>2&lt;/code> (USER_KEEP) важен ещё и тем, что такой трейс &lt;strong>не отбрасывается агентом&lt;/strong> (см. &lt;a href="#%d0%b0%d0%b3%d0%b5%d0%bd%d1%82">уровень агента&lt;/a>).&lt;/p>
&lt;h2 id="три-уровня-где-принимается-решение-о-сборе">Три уровня, где принимается решение о сборе&lt;/h2>
&lt;p>Трейс может быть отброшен на одном из трёх независимых уровней. Их важно различать, потому что каждый настраивается отдельно.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Уровень&lt;/th>
&lt;th>Где работает&lt;/th>
&lt;th>Что делает&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>1. Трейсер приложения&lt;/strong> (Go, Java, Python, Node.js, PHP, Ruby, .NET)&lt;/td>
&lt;td>внутри вашего сервиса&lt;/td>
&lt;td>принимает решение keep/drop, ставит приоритет &lt;code>0&lt;/code>/&lt;code>1&lt;/code>, ограничивает частоту по своему лимиту&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>2. Трейсер Nginx&lt;/strong>&lt;/td>
&lt;td>в Nginx&lt;/td>
&lt;td>то же для входного трафика; настраивается директивой&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>3. Агент&lt;/strong>&lt;/td>
&lt;td>protoobp-agent&lt;/td>
&lt;td>вторичный сэмплер: рассчитывает целевой темп сбора и может дополнительно отбрасывать авто-трейсы&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Решение принимается в «голове» трейса&lt;/h4>
При head-based sampling решение о сохранении трейса принимает &lt;strong>первый сервис в трейсе&lt;/strong> («голова» — тот, кто получил запрос без входящего контекста). Оно проставляется в заголовок &lt;code>x-protoobp-sampling-priority&lt;/code> и распространяется вниз по цепочке. Нижестоящие сервисы &lt;strong>уважают&lt;/strong> это решение и &lt;strong>не пересматривают&lt;/strong> его своим &lt;code>sample_rate&lt;/code> — они продолжают трейс с тем же приоритетом. Поэтому для полного сбора достаточно настроить сбор на &lt;strong>точке входа&lt;/strong> трейса, а не на каждом сервисе по отдельности.
&lt;/div>
&lt;p>Уровни 1 и 2 в таблице — это разные роли одного и того же трейсера: он выступает «головой» (принимает решение), если начинает трейс, и «продолжателем» (наследует решение), если получил контекст от вышестоящего сервиса.&lt;/p>
&lt;h2 id="параметры-сэмплирования-и-значения-по-умолчанию">Параметры сэмплирования и значения по умолчанию&lt;/h2>
&lt;p>JVM-трейсеры (Java) дополнительно принимают те же параметры в форме system property (&lt;code>-Dpobp.*&lt;/code> / &lt;code>-Ddd.*&lt;/code>), которая имеет приоритет над переменной окружения. Nginx настраивается директивой в конфигурационном файле.&lt;/p>
&lt;ul class="nav nav-tabs" id="tabs-4" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link disabled"
id="tabs-04-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-04-00" role="tab"
aria-controls="tabs-04-00" aria-selected="false">
&lt;strong>Трейсер&lt;/strong>:
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-04-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-04-01" role="tab"
data-td-tp-persist="protoobp" aria-controls="tabs-04-01" aria-selected="true">
ProtoOBP
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-04-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-04-02" role="tab"
data-td-tp-persist="datadog" aria-controls="tabs-04-02" aria-selected="false">
Datadog
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-4-content">
&lt;div class="tab-body tab-pane fade"
id="tabs-04-00" role="tabpanel" aria-labelled-by="tabs-04-00-tab" tabindex="4">
&lt;/div>
&lt;div class="tab-body tab-pane fade show active"
id="tabs-04-01" role="tabpanel" aria-labelled-by="tabs-04-01-tab" tabindex="4">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Назначение&lt;/th>
&lt;th>Переменная (env / JVM)&lt;/th>
&lt;th>По умолчанию&lt;/th>
&lt;th>Для 100% сбора&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Заголовок контекста&lt;/td>
&lt;td>&lt;code>x-protoobp-sampling-priority&lt;/code>&lt;/td>
&lt;td>проставляет трейсер&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Глобальная доля сбора&lt;/td>
&lt;td>&lt;code>POBP_TRACE_SAMPLE_RATE&lt;/code>&lt;br>JVM: &lt;code>-Dpobp.trace.sample.rate&lt;/code>&lt;/td>
&lt;td>не задано → авто-сэмплирование агентом&lt;/td>
&lt;td>&lt;code>1.0&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Правила по сервису/операции&lt;/td>
&lt;td>&lt;code>POBP_TRACE_SAMPLING_RULES&lt;/code>&lt;br>JVM: &lt;code>-Dpobp.trace.sampling.rules&lt;/code>&lt;/td>
&lt;td>не задано (правил нет)&lt;/td>
&lt;td>JSON, &lt;code>sample_rate: 1.0&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Формат шаблонов в правилах&lt;/td>
&lt;td>&lt;code>POBP_TRACE_SAMPLING_RULES_FORMAT&lt;/code>&lt;/td>
&lt;td>&lt;code>regex&lt;/code>&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Лимит частоты трейсера&lt;/td>
&lt;td>&lt;code>POBP_TRACE_RATE_LIMIT&lt;/code>&lt;br>JVM: &lt;code>-Dpobp.trace.rate.limit&lt;/code>&lt;/td>
&lt;td>&lt;code>100&lt;/code> трейсов/сек (Nginx — &lt;code>200&lt;/code>)&lt;/td>
&lt;td>поднять&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Директива сбора (Nginx)&lt;/td>
&lt;td>&lt;code>protoobp_sample_rate&lt;/code>&lt;/td>
&lt;td>не задано → делегируется агенту&lt;/td>
&lt;td>&lt;code>protoobp_sample_rate 1.0;&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Отправка трейсов агенту&lt;/td>
&lt;td>&lt;code>POBP_TRACE_ENABLED&lt;/code>&lt;br>JVM: &lt;code>-Dpobp.trace.enabled&lt;/code>&lt;/td>
&lt;td>&lt;code>true&lt;/code>&lt;/td>
&lt;td>не &lt;code>false&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-04-02" role="tabpanel" aria-labelled-by="tabs-04-02-tab" tabindex="4">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Назначение&lt;/th>
&lt;th>Переменная (env / JVM)&lt;/th>
&lt;th>По умолчанию&lt;/th>
&lt;th>Для 100% сбора&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Заголовок контекста&lt;/td>
&lt;td>&lt;code>x-datadog-sampling-priority&lt;/code>&lt;/td>
&lt;td>проставляет трейсер&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Глобальная доля сбора&lt;/td>
&lt;td>&lt;code>DD_TRACE_SAMPLE_RATE&lt;/code>&lt;br>JVM: &lt;code>-Ddd.trace.sample.rate&lt;/code>&lt;/td>
&lt;td>не задано → авто-сэмплирование агентом&lt;/td>
&lt;td>&lt;code>1.0&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Правила по сервису/операции&lt;/td>
&lt;td>&lt;code>DD_TRACE_SAMPLING_RULES&lt;/code>&lt;br>JVM: &lt;code>-Ddd.trace.sampling.rules&lt;/code>&lt;/td>
&lt;td>не задано (правил нет)&lt;/td>
&lt;td>JSON, &lt;code>sample_rate: 1.0&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Формат шаблонов в правилах&lt;/td>
&lt;td>&lt;code>DD_TRACE_SAMPLING_RULES_FORMAT&lt;/code>&lt;/td>
&lt;td>&lt;code>regex&lt;/code>&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Лимит частоты трейсера&lt;/td>
&lt;td>&lt;code>DD_TRACE_RATE_LIMIT&lt;/code>&lt;br>JVM: &lt;code>-Ddd.trace.rate.limit&lt;/code>&lt;/td>
&lt;td>&lt;code>100&lt;/code> трейсов/сек (Nginx — &lt;code>200&lt;/code>)&lt;/td>
&lt;td>поднять&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Директива сбора (Nginx)&lt;/td>
&lt;td>&lt;code>datadog_sample_rate&lt;/code>&lt;/td>
&lt;td>не задано → делегируется агенту&lt;/td>
&lt;td>&lt;code>datadog_sample_rate 1.0;&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Отправка трейсов агенту&lt;/td>
&lt;td>&lt;code>DD_TRACE_ENABLED&lt;/code>&lt;br>JVM: &lt;code>-Ddd.trace.enabled&lt;/code>&lt;/td>
&lt;td>&lt;code>true&lt;/code>&lt;/td>
&lt;td>не &lt;code>false&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/div>
&lt;p>Уровень агента (&lt;code>apm_config.target_traces_per_second&lt;/code>, по умолчанию &lt;code>10&lt;/code> трейсов/сек) настраивается в конфигурации агента и является &lt;strong>общим&lt;/strong> для всех трейсеров в контуре — см. подраздел &lt;a href="#%d0%b0%d0%b3%d0%b5%d0%bd%d1%82">Агент&lt;/a>.&lt;/p>
&lt;p>Значение &lt;code>*_TRACE_SAMPLE_RATE&lt;/code> — число от &lt;code>0.0&lt;/code> до &lt;code>1.0&lt;/code> включительно: &lt;code>0.0&lt;/code> означает «трейсы не собираются», &lt;code>1.0&lt;/code> — «собираются все трейсы», &lt;code>0.6&lt;/code> — «собирается 60% трейсов». Значения вне диапазона отклоняются с предупреждением в логе (не применяются).&lt;/p>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Значение лимита `0` запрещает всё, а не «снимает лимит»&lt;/h4>
&lt;code>*_TRACE_RATE_LIMIT = 0&lt;/code> (и &lt;code>target_traces_per_second: 0&lt;/code> у агента, начиная с 7.35) означает «не пропускать ни одного трейса», а &lt;strong>не&lt;/strong> «без ограничения». Чтобы снять ограничение на пиках, &lt;strong>поднимите&lt;/strong> значение выше пикового темпа трейсов (например, &lt;code>100000&lt;/code>), а не ставьте &lt;code>0&lt;/code>.
&lt;/div>
&lt;h2 id="настройка-полного-сбора">Настройка полного сбора&lt;/h2>
&lt;p>Ниже — как включить полный сбор (&lt;code>sample_rate = 1.0&lt;/code>) по каждому типу трейсера. Напомним: решение принимается в «голове» трейса и распространяется вниз, поэтому в первую очередь настраивается сервис — точка входа (см. подраздел &lt;a href="#%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b0-%d1%81%d0%b1%d0%be%d1%80%d0%b0-%d0%b4%d0%bb%d1%8f-%d0%b1%d0%b8%d0%b7%d0%bd%d0%b5%d1%81-%d0%bf%d1%80%d0%be%d1%86%d0%b5%d1%81%d1%81%d0%be%d0%b2">про бизнес-процессы&lt;/a> о том, где именно применять эти настройки).&lt;/p>
&lt;h3 id="приложение-все-языки">Приложение (все языки)&lt;/h3>
&lt;p>Переменные окружения одинаковы для всех языковых трейсеров (Go, Java, Python, Node.js, PHP, Ruby, .NET) — различается только префикс семейства.&lt;/p>
&lt;ul class="nav nav-tabs" id="tabs-6" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link disabled"
id="tabs-06-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-06-00" role="tab"
aria-controls="tabs-06-00" aria-selected="false">
&lt;strong>Трейсер&lt;/strong>:
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-06-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-06-01" role="tab"
data-td-tp-persist="protoobp" aria-controls="tabs-06-01" aria-selected="true">
ProtoOBP
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-06-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-06-02" role="tab"
data-td-tp-persist="datadog" aria-controls="tabs-06-02" aria-selected="false">
Datadog
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-6-content">
&lt;div class="tab-body tab-pane fade"
id="tabs-06-00" role="tabpanel" aria-labelled-by="tabs-06-00-tab" tabindex="6">
&lt;/div>
&lt;div class="tab-body tab-pane fade show active"
id="tabs-06-01" role="tabpanel" aria-labelled-by="tabs-06-01-tab" tabindex="6">
&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">&lt;span class="nv">POBP_TRACE_SAMPLE_RATE&lt;/span>&lt;span class="o">=&lt;/span>1.0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">POBP_TRACE_RATE_LIMIT&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">100000&lt;/span> &lt;span class="c1"># поднять лимит выше пикового темпа (0 запрещает всё!)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Для JVM-трейсеров (Java) — как system properties при запуске:&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">java -javaagent:/path/pobp-java-agent.jar &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -Dpobp.trace.sample.rate&lt;span class="o">=&lt;/span>1.0 &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -Dpobp.trace.rate.limit&lt;span class="o">=&lt;/span>&lt;span class="m">100000&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -Dpobp.service&lt;span class="o">=&lt;/span>billing-bp &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -jar app.jar
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-06-02" role="tabpanel" aria-labelled-by="tabs-06-02-tab" tabindex="6">
&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">&lt;span class="nv">DD_TRACE_SAMPLE_RATE&lt;/span>&lt;span class="o">=&lt;/span>1.0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">DD_TRACE_RATE_LIMIT&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">100000&lt;/span> &lt;span class="c1"># поднять лимит выше пикового темпа (0 запрещает всё!)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Для JVM-трейсеров (Java) — как system properties при запуске:&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">java -javaagent:/path/dd-java-agent.jar &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -Ddd.trace.sample.rate&lt;span class="o">=&lt;/span>1.0 &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -Ddd.trace.rate.limit&lt;span class="o">=&lt;/span>&lt;span class="m">100000&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -Ddd.service&lt;span class="o">=&lt;/span>billing-bp &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -jar app.jar
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;h3 id="nginx">Nginx&lt;/h3>
&lt;p>Директива наследуется по контекстам &lt;code>http&lt;/code> → &lt;code>server&lt;/code> → &lt;code>location&lt;/code>; директива в более вложенном контексте имеет приоритет. Это позволяет включить полный сбор только на маршрутах БП:&lt;/p>
&lt;ul class="nav nav-tabs" id="tabs-7" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link disabled"
id="tabs-07-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-07-00" role="tab"
aria-controls="tabs-07-00" aria-selected="false">
&lt;strong>Трейсер&lt;/strong>:
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-07-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-07-01" role="tab"
data-td-tp-persist="protoobp" aria-controls="tabs-07-01" aria-selected="true">
ProtoOBP
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-07-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-07-02" role="tab"
data-td-tp-persist="datadog" aria-controls="tabs-07-02" aria-selected="false">
Datadog
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-7-content">
&lt;div class="tab-body tab-pane fade"
id="tabs-07-00" role="tabpanel" aria-labelled-by="tabs-07-00-tab" tabindex="7">
&lt;/div>
&lt;div class="tab-body tab-pane fade show active"
id="tabs-07-01" role="tabpanel" aria-labelled-by="tabs-07-01-tab" tabindex="7">
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-nginx" data-lang="nginx">&lt;span class="line">&lt;span class="cl">&lt;span class="k">http&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kn">protoobp_sample_rate&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="s">.0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1"># база
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kn">server&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kn">location&lt;/span> &lt;span class="s">/business-process/&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kn">protoobp_sample_rate&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="s">.0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1"># гарантированно 100% на маршруте БП
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-07-02" role="tabpanel" aria-labelled-by="tabs-07-02-tab" tabindex="7">
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-nginx" data-lang="nginx">&lt;span class="line">&lt;span class="cl">&lt;span class="k">http&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kn">datadog_sample_rate&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="s">.0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1"># база
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kn">server&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kn">location&lt;/span> &lt;span class="s">/business-process/&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kn">datadog_sample_rate&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="s">.0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1"># гарантированно 100% на маршруте БП
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;h3 id="агент">Агент&lt;/h3>
&lt;p>У агента есть собственный сэмплер с целевым темпом &lt;code>apm_config.target_traces_per_second&lt;/code> (по умолчанию &lt;code>10&lt;/code> трейсов/сек). Он применяется к авто-трейсам (приоритет &lt;code>0&lt;/code>/&lt;code>1&lt;/code>); трейсы, помеченные трейсером как &lt;strong>USER_KEEP&lt;/strong> (&lt;code>2&lt;/code>) через правила или заданный &lt;code>sample_rate&lt;/code>, агент &lt;strong>не дорезает&lt;/strong> — это ещё один довод использовать &lt;a href="#%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d0%b0-%d1%81%d1%8d%d0%bc%d0%bf%d0%bb%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-%d0%bf%d0%be-%d1%81%d0%b5%d1%80%d0%b2%d0%b8%d1%81%d0%b0%d0%bc-%d0%b8-%d0%be%d0%bf%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d1%8f%d0%bc">правила сэмплирования&lt;/a> для критичных БП.&lt;/p>
&lt;p>Параметр задаётся в конфигурационном файле агента &lt;code>protoobp.yaml&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">apm_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">target_traces_per_second&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">100&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>либо переменной окружения &lt;code>POBP_APM_TARGET_TPS&lt;/code>.&lt;/p>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Об именах и значениях у агента&lt;/h4>
&lt;ul>
&lt;li>Устаревший синоним &lt;code>apm_config.max_traces_per_second&lt;/code> (env &lt;code>POBP_APM_MAX_TPS&lt;/code>) ещё работает, но рекомендуется &lt;code>target_traces_per_second&lt;/code>.&lt;/li>
&lt;li>&lt;strong>&lt;code>target_traces_per_second: 0&lt;/code> не отключает лимит&lt;/strong>, а (начиная с 7.35) прекращает отправку трейсов в приёмник. Чтобы снять ограничение — поднимите значение.&lt;/li>
&lt;li>&lt;strong>Ошибочные трейсы&lt;/strong> удерживаются отдельным error-сэмплером (&lt;code>apm_config.errors_per_second&lt;/code>, по умолчанию &lt;code>10&lt;/code> трейсов/сек) независимо от основного лимита.&lt;/li>
&lt;li>&lt;strong>Редкие трейсы&lt;/strong> — отдельный rare-сэмплер (&lt;code>apm_config.enable_rare_sampler&lt;/code>, по умолчанию выключен; при включении удерживает редкие комбинации сервис/операция/ресурс, до 5 трейсов/сек).&lt;/li>
&lt;li>Error- и rare-сэмплеры &lt;strong>игнорируются для сервисов, у которых заданы правила сэмплирования&lt;/strong> (&lt;code>*_TRACE_SAMPLING_RULES&lt;/code>), и по умолчанию не удерживают спаны, отброшенные через &lt;code>manual.drop&lt;/code>.&lt;/li>
&lt;/ul>
&lt;/div>
&lt;h3 id="полнота-сбора-для-бизнес-процессов">Полнота сбора для бизнес-процессов&lt;/h3>
&lt;p>Чтобы трейсы, необходимые для мониторинга бизнес-процесса (БП), всегда содержали полный набор спанов, воспользуйтесь свойством head-based sampling: решение принимается в «голове» трейса и распространяется вниз.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Определите точку входа БП&lt;/strong> — сервис (или Nginx-маршрут), с которого начинается трейс бизнес-процесса. Именно он выступает «головой» и принимает решение о сборе.&lt;/li>
&lt;li>&lt;strong>Включите полный сбор на точке входа&lt;/strong> — &lt;code>sample_rate = 1.0&lt;/code> глобально либо адресным правилом (см. &lt;a href="#%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d0%b0-%d1%81%d1%8d%d0%bc%d0%bf%d0%bb%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-%d0%bf%d0%be-%d1%81%d0%b5%d1%80%d0%b2%d0%b8%d1%81%d0%b0%d0%bc-%d0%b8-%d0%be%d0%bf%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d1%8f%d0%bc">Правила сэмплирования&lt;/a>). Нижестоящие сервисы унаследуют решение автоматически — настраивать каждый из них не требуется.&lt;/li>
&lt;li>&lt;strong>Поднимите лимит частоты&lt;/strong> (&lt;code>*_TRACE_RATE_LIMIT&lt;/code>) на точке входа выше пикового темпа — иначе на пиках нагрузки трейсы БП будут отброшены даже при &lt;code>sample_rate = 1.0&lt;/code>. Не ставьте &lt;code>0&lt;/code> — это запретит все трейсы.&lt;/li>
&lt;li>&lt;strong>Проверьте лимит агента&lt;/strong> (&lt;code>apm_config.target_traces_per_second&lt;/code>) — при высоком темпе БП его тоже нужно поднять.&lt;/li>
&lt;/ol>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Когда нужно настраивать не только точку входа&lt;/h4>
&lt;p>Наследование решения работает, только пока &lt;strong>контекст трейса непрерывно передаётся&lt;/strong> по цепочке. Полный сбор нужно обеспечить дополнительно, если:&lt;/p>
&lt;ul>
&lt;li>в цепочке есть &lt;strong>неинструментированный сервис&lt;/strong> или прокси, &lt;strong>срезающий заголовок&lt;/strong> &lt;code>x-protoobp-sampling-priority&lt;/code> (&lt;code>x-datadog-sampling-priority&lt;/code>), либо участок с &lt;code>protoobp_disable&lt;/code> — за таким разрывом следующий сервис становится новой «головой» и принимает решение заново (может отбросить трейс);&lt;/li>
&lt;li>сервис БП является &lt;strong>самостоятельной точкой входа&lt;/strong> — вызывается не только в рамках этого БП, но и напрямую; тогда для него задаётся собственное правило.&lt;/li>
&lt;/ul>
&lt;p>В этих случаях включите полный сбор (или адресное правило) на соответствующих сервисах, а обрыв инструментирования — устраните.&lt;/p>
&lt;/div>
&lt;p>Рекомендуемый способ — адресные &lt;a href="#%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d0%b0-%d1%81%d1%8d%d0%bc%d0%bf%d0%bb%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-%d0%bf%d0%be-%d1%81%d0%b5%d1%80%d0%b2%d0%b8%d1%81%d0%b0%d0%bc-%d0%b8-%d0%be%d0%bf%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d1%8f%d0%bc">правила сэмплирования&lt;/a> для точки входа БП, а не глобальный &lt;code>sample_rate = 1.0&lt;/code> по всему ландшафту.&lt;/p>
&lt;h2 id="правила-сэмплирования-по-сервисам-и-операциям">Правила сэмплирования по сервисам и операциям&lt;/h2>
&lt;p>Рекомендуемый подход — не включать полный сбор глобально по всему ландшафту, а адресно для сервисов БП. Для этого служит переменная с JSON-массивом правил (формат правил одинаков для обоих семейств):&lt;/p>
&lt;ul class="nav nav-tabs" id="tabs-10" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link disabled"
id="tabs-10-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-10-00" role="tab"
aria-controls="tabs-10-00" aria-selected="false">
&lt;strong>Трейсер&lt;/strong>:
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-10-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-10-01" role="tab"
data-td-tp-persist="protoobp" aria-controls="tabs-10-01" aria-selected="true">
ProtoOBP
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-10-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-10-02" role="tab"
data-td-tp-persist="datadog" aria-controls="tabs-10-02" aria-selected="false">
Datadog
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-10-content">
&lt;div class="tab-body tab-pane fade"
id="tabs-10-00" role="tabpanel" aria-labelled-by="tabs-10-00-tab" tabindex="10">
&lt;/div>
&lt;div class="tab-body tab-pane fade show active"
id="tabs-10-01" role="tabpanel" aria-labelled-by="tabs-10-01-tab" tabindex="10">
&lt;p>&lt;code>POBP_TRACE_SAMPLING_RULES&lt;/code> (JVM: &lt;code>-Dpobp.trace.sampling.rules&lt;/code>).&lt;/p>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-10-02" role="tabpanel" aria-labelled-by="tabs-10-02-tab" tabindex="10">
&lt;p>&lt;code>DD_TRACE_SAMPLING_RULES&lt;/code> (JVM: &lt;code>-Ddd.trace.sampling.rules&lt;/code>).&lt;/p>
&lt;/div>
&lt;/div>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span> &lt;span class="nt">&amp;#34;service&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;billing-bp&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nt">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;http.request&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nt">&amp;#34;resource&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;POST /pay&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nt">&amp;#34;sample_rate&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">1.0&lt;/span> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span> &lt;span class="nt">&amp;#34;service&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;orders-bp&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nt">&amp;#34;resource&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;POST /orders&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nt">&amp;#34;sample_rate&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">1.0&lt;/span> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span> &lt;span class="nt">&amp;#34;sample_rate&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.1&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Поля правила:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Поле&lt;/th>
&lt;th>Обязательное&lt;/th>
&lt;th>Назначение&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>sample_rate&lt;/code>&lt;/td>
&lt;td>да&lt;/td>
&lt;td>Доля сбора &lt;code>0.0&lt;/code>–&lt;code>1.0&lt;/code> для трейсов, попавших под правило. &lt;code>1.0&lt;/code> = все.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>service&lt;/code>&lt;/td>
&lt;td>нет&lt;/td>
&lt;td>Имя сервиса (шаблон, см. ниже). Нет поля → любой сервис.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>name&lt;/code>&lt;/td>
&lt;td>нет&lt;/td>
&lt;td>Имя операции спана (шаблон).&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>resource&lt;/code>&lt;/td>
&lt;td>нет&lt;/td>
&lt;td>Ресурс/эндпоинт (например, &lt;code>POST /orders&lt;/code>) — самая точная адресация под маршрут БП.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tags&lt;/code>&lt;/td>
&lt;td>нет&lt;/td>
&lt;td>Словарь &lt;code>{&amp;quot;тег&amp;quot;:&amp;quot;значение&amp;quot;}&lt;/code>; правило срабатывает при совпадении тегов корневого спана.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Формат шаблонов: по умолчанию regex&lt;/h4>
Поля &lt;code>service&lt;/code>, &lt;code>name&lt;/code>, &lt;code>resource&lt;/code> сопоставляются как &lt;strong>регулярные выражения&lt;/strong> (по всей строке, без учёта регистра) — это формат по умолчанию. Специальные символы regex (&lt;code>.&lt;/code>, &lt;code>*&lt;/code>, &lt;code>?&lt;/code>, &lt;code>+&lt;/code> и т.д.) трактуются соответственно: например, &lt;code>orders-.*&lt;/code> — «&lt;code>orders-&lt;/code> и любой суффикс». Формат можно переключить на glob (&lt;code>*&lt;/code> — любая подстрока, &lt;code>?&lt;/code> — один символ) переменной &lt;code>POBP_TRACE_SAMPLING_RULES_FORMAT=glob&lt;/code> (для Datadog — &lt;code>DD_TRACE_SAMPLING_RULES_FORMAT=glob&lt;/code>). Для точечной адресации сервиса БП надёжнее указывать &lt;strong>точное имя&lt;/strong> (как в примерах) — оно корректно работает в обоих форматах.
&lt;/div>
&lt;p>Ключевые нюансы применения:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Порядок важен: побеждает первое совпавшее правило (сверху вниз).&lt;/strong> Специфичные правила БП размещайте вверху, общее правило с низким рейтом — в конце.&lt;/li>
&lt;li>&lt;strong>Правило применяется к корню трейса&lt;/strong> (root span); принятое решение затем распространяется на все нижестоящие спаны.&lt;/li>
&lt;li>&lt;strong>&lt;code>sample_rate&lt;/code> в правиле переопределяет&lt;/strong> глобальный &lt;code>*_TRACE_SAMPLE_RATE&lt;/code>.&lt;/li>
&lt;li>&lt;strong>Правила не отменяют лимит частоты.&lt;/strong> Даже при &lt;code>sample_rate: 1.0&lt;/code> трейсы сверх &lt;code>*_TRACE_RATE_LIMIT&lt;/code> получат &lt;code>0&lt;/code>. Для БП с высоким RPS лимит нужно поднять отдельно.&lt;/li>
&lt;li>&lt;strong>Пустое правило&lt;/strong> &lt;code>{&amp;quot;sample_rate&amp;quot;: 1.0}&lt;/code> без фильтров ловит всё — держите его последним.&lt;/li>
&lt;/ol>
&lt;p>Пример: сервисы БП собираются на 100%, остальной трафик — на 10%.&lt;/p>
&lt;ul class="nav nav-tabs" id="tabs-12" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link disabled"
id="tabs-12-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-12-00" role="tab"
aria-controls="tabs-12-00" aria-selected="false">
&lt;strong>Трейсер&lt;/strong>:
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-12-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-12-01" role="tab"
data-td-tp-persist="protoobp" aria-controls="tabs-12-01" aria-selected="true">
ProtoOBP
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-12-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-12-02" role="tab"
data-td-tp-persist="datadog" aria-controls="tabs-12-02" aria-selected="false">
Datadog
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-12-content">
&lt;div class="tab-body tab-pane fade"
id="tabs-12-00" role="tabpanel" aria-labelled-by="tabs-12-00-tab" tabindex="12">
&lt;/div>
&lt;div class="tab-body tab-pane fade show active"
id="tabs-12-01" role="tabpanel" aria-labelled-by="tabs-12-01-tab" tabindex="12">
&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">&lt;span class="nv">POBP_TRACE_SAMPLING_RULES&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;[{&amp;#34;service&amp;#34;:&amp;#34;billing-bp&amp;#34;,&amp;#34;sample_rate&amp;#34;:1.0},{&amp;#34;service&amp;#34;:&amp;#34;orders-bp&amp;#34;,&amp;#34;resource&amp;#34;:&amp;#34;POST /orders&amp;#34;,&amp;#34;sample_rate&amp;#34;:1.0},{&amp;#34;sample_rate&amp;#34;:0.1}]&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">POBP_TRACE_RATE_LIMIT&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">100000&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-12-02" role="tabpanel" aria-labelled-by="tabs-12-02-tab" tabindex="12">
&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">&lt;span class="nv">DD_TRACE_SAMPLING_RULES&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;[{&amp;#34;service&amp;#34;:&amp;#34;billing-bp&amp;#34;,&amp;#34;sample_rate&amp;#34;:1.0},{&amp;#34;service&amp;#34;:&amp;#34;orders-bp&amp;#34;,&amp;#34;resource&amp;#34;:&amp;#34;POST /orders&amp;#34;,&amp;#34;sample_rate&amp;#34;:1.0},{&amp;#34;sample_rate&amp;#34;:0.1}]&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">DD_TRACE_RATE_LIMIT&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">100000&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;h2 id="принудительное-сохранение-и-отбрасывание-в-коде-force-keep--drop">Принудительное сохранение и отбрасывание в коде (force keep / drop)&lt;/h2>
&lt;p>Помимо доли и правил, отдельный трейс можно &lt;strong>принудительно&lt;/strong> сохранить или отбросить прямо в коде приложения — это удобно для критичных транзакций (всегда сохранять) и для шумных служебных вызовов вроде health-check (всегда отбрасывать).&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Force keep&lt;/strong> — пометьте спан тегом &lt;code>manual.keep&lt;/code>: этот спан и все дочерние будут собраны. Трейс получает приоритет &lt;code>2&lt;/code> (USER_KEEP) и &lt;strong>не отбрасывается ни лимитом трейсера, ни агентом&lt;/strong>.&lt;/li>
&lt;li>&lt;strong>Force drop&lt;/strong> — тег &lt;code>manual.drop&lt;/code>: ни один дочерний спан не собирается; error- и rare-сэмплеры агента при этом игнорируются.&lt;/li>
&lt;/ul>
&lt;ul class="nav nav-tabs" id="tabs-13" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link disabled"
id="tabs-13-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-13-00" role="tab"
aria-controls="tabs-13-00" aria-selected="false">
&lt;strong>Трейсер&lt;/strong>:
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-13-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-13-01" role="tab"
data-td-tp-persist="protoobp" aria-controls="tabs-13-01" aria-selected="true">
ProtoOBP
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-13-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-13-02" role="tab"
data-td-tp-persist="datadog" aria-controls="tabs-13-02" aria-selected="false">
Datadog
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-13-content">
&lt;div class="tab-body tab-pane fade"
id="tabs-13-00" role="tabpanel" aria-labelled-by="tabs-13-00-tab" tabindex="13">
&lt;/div>
&lt;div class="tab-body tab-pane fade show active"
id="tabs-13-01" role="tabpanel" aria-labelled-by="tabs-13-01-tab" tabindex="13">
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-csharp" data-lang="csharp">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// .NET: всегда сохранять трейс критичной операции&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">using&lt;/span> &lt;span class="nn">Protoobp.Trace&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">using&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">var&lt;/span> &lt;span class="n">scope&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="n">Tracer&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Instance&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">StartActive&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;checkout&amp;#34;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">scope&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Span&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">SetTag&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">Protoobp&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Trace&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Tags&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">ManualKeep&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;true&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// логика операции&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>В других языках — эквивалентный тег &lt;code>manual.keep&lt;/code> / &lt;code>manual.drop&lt;/code> (например, в Java — константа &lt;code>MANUAL_KEEP&lt;/code> из API трейсера).&lt;/p>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-13-02" role="tabpanel" aria-labelled-by="tabs-13-02-tab" tabindex="13">
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-csharp" data-lang="csharp">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// .NET: всегда сохранять трейс критичной операции&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">using&lt;/span> &lt;span class="nn">Datadog.Trace&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">using&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">var&lt;/span> &lt;span class="n">scope&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="n">Tracer&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Instance&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">StartActive&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;checkout&amp;#34;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">scope&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Span&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">SetTag&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">Datadog&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Trace&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Tags&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">ManualKeep&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;true&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// логика операции&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>В других языках — эквивалентный тег &lt;code>manual.keep&lt;/code> / &lt;code>manual.drop&lt;/code> (например, в Java — константа &lt;code>DDTags.MANUAL_KEEP&lt;/code>).&lt;/p>
&lt;/div>
&lt;/div>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Ставьте `manual.keep` до распространения контекста&lt;/h4>
Помечайте спан &lt;strong>на входе трейса (корневом спане), до того как контекст ушёл к нижестоящим сервисам&lt;/strong>. Если пометить позже, трейс может не сохраниться целиком по всей цепочке. Для бизнес-процессов это самый надёжный способ гарантировать полный сбор: &lt;code>manual.keep&lt;/code> на входной операции БП собирает трейс целиком, минуя лимиты трейсера и агента.
&lt;/div>
&lt;h2 id="сэмплирование-отдельных-спанов">Сэмплирование отдельных спанов&lt;/h2>
&lt;p>Если нужен не весь трейс, а конкретный спан (например, для метрик, построенных на спанах), задайте &lt;code>POBP_SPAN_SAMPLING_RULES&lt;/code> (у Datadog-трейсеров — &lt;code>DD_SPAN_SAMPLING_RULES&lt;/code>). Такие правила &lt;strong>сохраняют отдельные спаны, даже когда трейс отброшен&lt;/strong> head-based-сэмплированием. Обратное невозможно: этими правилами нельзя отбросить спан, уже сохранённый head-based-решением.&lt;/p>
&lt;p>Поля правила: &lt;code>service&lt;/code>, &lt;code>name&lt;/code>, &lt;code>sample_rate&lt;/code>, &lt;code>max_per_second&lt;/code> (ограничение спанов в секунду для правила).&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">&lt;span class="nv">POBP_SPAN_SAMPLING_RULES&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;[{&amp;#34;service&amp;#34;:&amp;#34;my-service&amp;#34;,&amp;#34;name&amp;#34;:&amp;#34;http.request&amp;#34;,&amp;#34;sample_rate&amp;#34;:1.0,&amp;#34;max_per_second&amp;#34;:50}]&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="частые-причины-потери-спанов">Частые причины потери спанов&lt;/h2>
&lt;p>Даже при намерении собирать «100%» спаны могут теряться по следующим причинам:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>&lt;code>*_TRACE_SAMPLE_RATE&lt;/code> меньше &lt;code>1.0&lt;/code>&lt;/strong> — собирается лишь часть трейсов; остальные получают приоритет &lt;code>0&lt;/code>. По умолчанию значение не задано, и трейсер использует авто-сэмплирование по рейтам от агента.&lt;/li>
&lt;li>&lt;strong>Лимит частоты трейсера &lt;code>*_TRACE_RATE_LIMIT&lt;/code>&lt;/strong> — по умолчанию &lt;code>100&lt;/code> трейсов/сек &lt;strong>на инстанс сервиса&lt;/strong> (у Nginx-трейсера — &lt;code>200&lt;/code>). При пиках нагрузки трейсы сверх лимита получают &lt;code>0&lt;/code> даже при &lt;code>sample_rate = 1.0&lt;/code>. Это самая частая причина «пропадающих» спанов. Лимит применяется к трейсам, оставленным правилом или глобальным &lt;code>sample_rate&lt;/code> (не к трейсам, оставленным по рейтам агента).&lt;/li>
&lt;li>&lt;strong>Лимит агента &lt;code>target_traces_per_second&lt;/code>&lt;/strong> — по умолчанию &lt;code>10&lt;/code> трейсов/сек; авто-трейсы без явного правила keep подпадают под этот лимит.&lt;/li>
&lt;li>&lt;strong>Значение лимита выставлено в &lt;code>0&lt;/code>&lt;/strong> — это запрещает все трейсы (частая ошибка при попытке «снять лимит»).&lt;/li>
&lt;/ol>
&lt;p>(Здесь &lt;code>*_&lt;/code> — префикс семейства трейсера: &lt;code>POBP_&lt;/code> для ProtoOBP, &lt;code>DD_&lt;/code> для Datadog.)&lt;/p>
&lt;h2 id="влияние-перехода-на-полный-сбор">Влияние перехода на полный сбор&lt;/h2>
&lt;p>&lt;strong>На инструментируемый сервис:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Рост накладных расходов трейсера: CPU и память на формирование и буферизацию спанов, сетевой трафик до агента. Обычно умеренный, но заметен на высоконагруженных сервисах.&lt;/li>
&lt;li>Снятие лимита частоты убирает защиту от всплесков — при резком росте RPS нагрузка на трейсер и агент растёт линейно.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>На Proto Observability Platform:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Кратно возрастает объём принимаемых и хранимых спанов → рост нагрузки на конвейер приёма и на дисковое хранилище.&lt;/li>
&lt;li>При неизменном сроке хранения (retention) объём данных на диске растёт пропорционально — может потребоваться расширение ёмкости хранилища. При недостатке ресурсов возможен рост задержки индексации.&lt;/li>
&lt;/ul>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Рекомендация&lt;/h4>
Включать полный сбор рекомендуется выборочно — через &lt;code>POBP_TRACE_SAMPLING_RULES&lt;/code> для сервисов и операций критичных БП, а не глобально. Это даёт полный набор спанов там, где он нужен, без кратного роста нагрузки на всю платформу. Перед раскаткой на промышленный контур оцените прирост объёма трейсов и, при необходимости, ёмкость хранилища.
&lt;/div>
&lt;h2 id="как-проверить-фактические-настройки">Как проверить фактические настройки&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Трейсеры приложений&lt;/strong> (Go, Java, Python, Node.js, PHP, Ruby, .NET) при старте печатают свою конфигурацию в лог — поля &lt;code>sample_rate&lt;/code>, &lt;code>sampling_rules&lt;/code>, &lt;code>rate_limit&lt;/code> показывают фактические действующие значения (одинаково для семейств ProtoOBP и Datadog).&lt;/li>
&lt;li>&lt;strong>Агент&lt;/strong> — секция &lt;code>apm_config&lt;/code> в конфигурационном файле &lt;code>protoobp.yaml&lt;/code>.&lt;/li>
&lt;/ul></description></item></channel></rss>