<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://doc.ruscomtech.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85</id>
	<title>Примеры данных - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://doc.ruscomtech.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85"/>
	<link rel="alternate" type="text/html" href="https://doc.ruscomtech.ru/index.php?title=%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;action=history"/>
	<updated>2026-05-11T15:06:01Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://doc.ruscomtech.ru/index.php?title=%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=5830&amp;oldid=prev</id>
		<title>IKuznetsov: Новая страница: «Распределённое приложение под высокой нагрузкой может генерировать огромный объём дан...»</title>
		<link rel="alternate" type="text/html" href="https://doc.ruscomtech.ru/index.php?title=%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=5830&amp;oldid=prev"/>
		<updated>2025-10-08T18:37:24Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «Распределённое приложение под высокой нагрузкой может генерировать огромный объём дан...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Распределённое приложение под высокой нагрузкой может генерировать огромный объём данных наблюдения. Эти данные требуют затрат на генерацию, обработку, передачу и хранение. Однако часто можно использовать выборку, когда используется лишь относительно небольшая часть данных наблюдения и остальные отбрасываются, чтобы снизить затраты и при этом обеспечить эффективный мониторинг приложения.&lt;br /&gt;
&lt;br /&gt;
В '''OpenTelemetry''' существует два основных метода выборки:&lt;br /&gt;
&lt;br /&gt;
* Выборка данных выполняется в вашем приложении с помощью '''OpenTelemetry''' '''SDK''' и обычно включает в себя сохранение случайной выборки транзакций.  Метод отбора данных прост и эффективен, но имеет важные ограничения. Например, поскольку решение о отборе данных принимается в начале транзакции, на него не могут повлиять никакие события, происходящие после этого.&lt;br /&gt;
* Хвостовая выборка используется для принятия решений о выборке на основе информации, неизвестной на момент начала транзакции.  В '''OpenTelemetry''' хвостовая выборка обычно выполняется с помощью сборщика данных, который временно сохраняет полный набор данных мониторинга до завершения транзакции. Затем сборщик принимает решение о сохранении или удалении данных транзакции на основе набора политик выборки.  Поскольку хвостовая выборка обычно не является случайной, важно обеспечить беспристрастность любых рассчитываемых метрик. Это можно сделать, вычислив метрики по всему набору транзакций, как показано ниже, или по отдельному потоку, сформированному случайным образом.&lt;br /&gt;
&lt;br /&gt;
В следующем примере конфигурации показано, как настроить экземпляр '''Collector''' для сбора данных трассировки и импорта их в виде запроса '''OTLP''' в Ключ-АСТРОМ. Он использует [https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.136.0/connector/spanmetricsconnector коннектор﻿ &amp;lt;code&amp;gt;spanmetrics&amp;lt;/code&amp;gt;] для вычисления метрик сервиса на основе трассировок перед сбором данных, чтобы гарантировать их точность.&lt;br /&gt;
&lt;br /&gt;
== Предустановка ==&lt;br /&gt;
&lt;br /&gt;
* Один из следующих дистрибутивов '''Collector''' с процессорами [https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.136.0/processor/transformprocessor transform]﻿, [https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.136.0/processor/filterprocessor filter]﻿, и [https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.136.0/processor/tailsamplingprocessor tail_sampling], а также соединителем [https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.136.0/connector/spanmetricsconnector spanmetrics]﻿: ﻿&lt;br /&gt;
** [[Collector Ключ-АСТРОМ|'''Collector''' Ключ-АСТРОМ]]&lt;br /&gt;
** [[Collector Ключ-АСТРОМ|OpenTelemetry Contrib]]&lt;br /&gt;
** [[Collector Ключ-АСТРОМ|Пользовательская версия Builder]]&lt;br /&gt;
* [[Экспорт с помощью OTLP|URL-адрес конечной точки API Ключ-АСТРОМ]], на которую следует экспортировать данные.&lt;br /&gt;
* [[Экспорт с помощью OTLP|Токен API]] с соответствующей областью доступа (требуется только для '''SaaS''' и АктивногоШлюза)&lt;br /&gt;
&lt;br /&gt;
Информацию о настройке '''Collector''' с использованием указанной ниже конфигурации см. в разделах [[Развертывание Collector|Развертывание коллектора]] и [[Настройка Collector|Конфигурация коллектора]].&lt;br /&gt;
&lt;br /&gt;
== Демо конфигурация ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|receivers:&lt;br /&gt;
&lt;br /&gt;
  otlp:&lt;br /&gt;
&lt;br /&gt;
    protocols:&lt;br /&gt;
&lt;br /&gt;
      grpc:&lt;br /&gt;
&lt;br /&gt;
        endpoint: 0.0.0.0:4317&lt;br /&gt;
&lt;br /&gt;
      http:&lt;br /&gt;
&lt;br /&gt;
        endpoint: 0.0.0.0:4318&lt;br /&gt;
&lt;br /&gt;
processors:&lt;br /&gt;
&lt;br /&gt;
  tail_sampling:&lt;br /&gt;
&lt;br /&gt;
    # This configuration keeps errors, traces longer than 500ms, and 20% of all remaining traces.&lt;br /&gt;
&lt;br /&gt;
    # Adjust with policies of your choice.&lt;br /&gt;
&lt;br /&gt;
    policies:&lt;br /&gt;
&lt;br /&gt;
      - name: policy1-keep-errors&lt;br /&gt;
&lt;br /&gt;
        type: status_code&lt;br /&gt;
&lt;br /&gt;
        status_code: {status_codes: [ERROR, UNSET]}&lt;br /&gt;
&lt;br /&gt;
      - name: policy2-keep-slow-traces&lt;br /&gt;
&lt;br /&gt;
        type: latency&lt;br /&gt;
&lt;br /&gt;
        latency: {threshold_ms: 500}&lt;br /&gt;
&lt;br /&gt;
      - name: policy3-keep-random-sample&lt;br /&gt;
&lt;br /&gt;
        type: probabilistic&lt;br /&gt;
&lt;br /&gt;
        probabilistic: {sampling_percentage: 20}&lt;br /&gt;
&lt;br /&gt;
    decision_wait: 30s&lt;br /&gt;
&lt;br /&gt;
connectors:&lt;br /&gt;
&lt;br /&gt;
  spanmetrics:&lt;br /&gt;
&lt;br /&gt;
    aggregation_temporality: &amp;quot;AGGREGATION_TEMPORALITY_DELTA&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    namespace: &amp;quot;requests&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    metrics_flush_interval: 15s&lt;br /&gt;
&lt;br /&gt;
exporters:&lt;br /&gt;
&lt;br /&gt;
  otlphttp:&lt;br /&gt;
&lt;br /&gt;
    endpoint: ${env:DT_ENDPOINT}&lt;br /&gt;
&lt;br /&gt;
    headers:&lt;br /&gt;
&lt;br /&gt;
      Authorization: Api-Token ${env:DT_API_TOKEN}&lt;br /&gt;
&lt;br /&gt;
service:&lt;br /&gt;
&lt;br /&gt;
  pipelines:&lt;br /&gt;
&lt;br /&gt;
    traces:&lt;br /&gt;
&lt;br /&gt;
      receivers: [otlp]&lt;br /&gt;
&lt;br /&gt;
      processors: [tail_sampling]&lt;br /&gt;
&lt;br /&gt;
      exporters: [otlphttp]&lt;br /&gt;
&lt;br /&gt;
    traces/spanmetrics:&lt;br /&gt;
&lt;br /&gt;
      receivers: [otlp]&lt;br /&gt;
&lt;br /&gt;
      processors: []&lt;br /&gt;
&lt;br /&gt;
      exporters: [spanmetrics]&lt;br /&gt;
&lt;br /&gt;
    metrics:&lt;br /&gt;
&lt;br /&gt;
      receivers: [spanmetrics]&lt;br /&gt;
&lt;br /&gt;
      processors: []&lt;br /&gt;
&lt;br /&gt;
      exporters: [otlphttp]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Компоненты ==&lt;br /&gt;
Для нашей конфигурации мы настраиваем следующие компоненты.&lt;br /&gt;
&lt;br /&gt;
=== Приемники ===&lt;br /&gt;
В разделе &amp;lt;code&amp;gt;receivers&amp;lt;/code&amp;gt; мы указываем стандартный приемник &amp;lt;code&amp;gt;otlp&amp;lt;/code&amp;gt; в качестве активного компонента приемника для нашего экземпляра '''Collector''' и настраиваем его на прием запросов '''OTLP''' по '''gRPC''' и '''HTTP'''.&lt;br /&gt;
&lt;br /&gt;
=== Процессоры ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;[https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.136.0/processor/tailsamplingprocessor tail_sampling]&amp;lt;/code&amp;gt;﻿ для выборки распределенных следов на основе свойств следа.&lt;br /&gt;
&lt;br /&gt;
=== Разъемы ===&lt;br /&gt;
В разделе &amp;lt;code&amp;gt;connectors&amp;lt;/code&amp;gt; мы указываем [https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.136.0/connector/spanmetricsconnector соединитель &amp;lt;code&amp;gt;spanmetrics&amp;lt;/code&amp;gt;]﻿ для вычисления показателей сервиса из диапазонов.&lt;br /&gt;
&lt;br /&gt;
=== Экспортеры ===&lt;br /&gt;
В разделе &amp;lt;code&amp;gt;exporters&amp;lt;/code&amp;gt; мы указываем [https://github.com/open-telemetry/opentelemetry-collector/tree/v0.136.0/exporter/otlphttpexporter экспортер &amp;lt;code&amp;gt;otlphttp&amp;lt;/code&amp;gt;]﻿ по умолчанию и настраиваем его с помощью URL-адреса нашего API Ключ-АСТРОМ и требуемого токена аутентификации.&lt;br /&gt;
&lt;br /&gt;
Для этой цели мы устанавливаем следующие две переменные среды и ссылаемся на них в значениях конфигурации для &amp;lt;code&amp;gt;endpoint&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;Authorization&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;DT_ENDPOINT&amp;lt;/code&amp;gt; содержит базовый URL-адрес конечной точки API Ключ-АСТРОМ (например, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://{your-environment-id}.live.astromkey.com/api/v2/otlp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;DT_API_TOKEN&amp;lt;/code&amp;gt; содержит токен API&lt;br /&gt;
&lt;br /&gt;
=== Сервисные контейнеры ===&lt;br /&gt;
Под &amp;lt;code&amp;gt;service&amp;lt;/code&amp;gt;, мы собираем три контейнера:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt; собирает приемник '''OTLP''', процессор выборки хвостов и экспортер &amp;lt;code&amp;gt;otlphttp&amp;lt;/code&amp;gt; для отправки выборочных диапазонов в Ключ-АСТРОМ.&lt;br /&gt;
* &amp;lt;code&amp;gt;traces/spanmetrics&amp;lt;/code&amp;gt; использует тот же приемник '''OTLP''' и соединитель &amp;lt;code&amp;gt;spanmetrics&amp;lt;/code&amp;gt; для вычисления метрик обслуживания из полученных диапазонов без выборки и пересылает вычисленные метрики в &amp;lt;code&amp;gt;metrics&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;metrics&amp;lt;/code&amp;gt; использует процессоры &amp;lt;code&amp;gt;transform&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;filter&amp;lt;/code&amp;gt;, и &amp;lt;code&amp;gt;transform/spanmetrics&amp;lt;/code&amp;gt; для форматирования метрик для приема метрик Ключ-АСТРОМ перед отправкой метрик в Ключ-АСТРОМ с помощью экспортера &amp;lt;code&amp;gt;otlphttp&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Рекомендации по выборке OpenTelemetry ==&lt;br /&gt;
&lt;br /&gt;
=== Смешанный режим выборки ===&lt;br /&gt;
'''OpenTelemetry''' и ЕдиныйАгент используют несовместимые подходы к выборке, которые не следует смешивать. Если распределённая трассировка, которая может включать несколько приложений и служб, использует какой-либо из этих методов лишь частично, это, скорее всего, приведёт к несогласованным результатам и неполным распределённым трассировкам. Для обеспечения полного сбора данных каждая распределённая трассировка должна быть оцифрована только одним из методов.&lt;br /&gt;
&lt;br /&gt;
=== Метрики сервисов, полученные с помощью трассировки ===&lt;br /&gt;
Показатели, полученные с помощью трассировки Ключ-АСТРОМ, рассчитываются на основе данных трассировки после их загрузки в Ключ-АСТРОМ.&lt;br /&gt;
&lt;br /&gt;
При выборочной выборке трассировок '''OpenTelemetry''' метрики, полученные из трассировки, рассчитываются только на основе выбранного подмножества данных трассировки. Это означает, что некоторые метрики, полученные из трассировки, могут быть смещенными или неверными.&lt;br /&gt;
&lt;br /&gt;
Например, вероятностный сэмплер, экономящий 5% трафика, приведёт к метрике пропускной способности, составляющей 5% от фактической. Если вы используете хвостовую выборку '''OpenTelemetry''' для сбора 100% медленных или ошибочных трасс, ваши сервисные метрики будут не только показывать неверную пропускную способность, но и будут неправильно определять частоту ошибок и время отклика.&lt;br /&gt;
&lt;br /&gt;
Чтобы снизить эту проблему, если вы хотите сэмплировать трассировки '''OpenTelemetry''', следует рассчитать метрики сервиса перед сэмплированием и использовать их, а не метрики, полученные из трассировки, рассчитанные Ключ-АСТРОМ. Если для сэмплирования используется '''Collector''', метрики, полученные из трассировки, должны быть рассчитаны '''Collector''' до применения сэмплирования или '''SDK'''. Это можно сделать с помощью [https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.136.0/connector/spanmetricsconnector коннектора﻿ &amp;lt;code&amp;gt;spanmetrics&amp;lt;/code&amp;gt;], как показано в примере выше.&lt;/div&gt;</summary>
		<author><name>IKuznetsov</name></author>
	</entry>
</feed>