<?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%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D1%84%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F</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%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D1%84%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F"/>
	<link rel="alternate" type="text/html" href="https://doc.ruscomtech.ru/index.php?title=%D0%9F%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D1%84%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F&amp;action=history"/>
	<updated>2026-09-16T15:57:13Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://doc.ruscomtech.ru/index.php?title=%D0%9F%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D1%84%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F&amp;diff=5836&amp;oldid=prev</id>
		<title>IKuznetsov: Новая страница: «В следующем примере конфигурации показано, как настроить экземпляр &#039;&#039;&#039;Collector&#039;&#039;&#039; для преобра...»</title>
		<link rel="alternate" type="text/html" href="https://doc.ruscomtech.ru/index.php?title=%D0%9F%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D1%84%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F&amp;diff=5836&amp;oldid=prev"/>
		<updated>2025-10-08T21:00:17Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «В следующем примере конфигурации показано, как настроить экземпляр &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; для преобра...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;В следующем примере конфигурации показано, как настроить экземпляр &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; для преобразования и обработки запросов &amp;#039;&amp;#039;&amp;#039;OTLP&amp;#039;&amp;#039;&amp;#039; перед их пересылкой в ​​Ключ-АСТРОМ.&lt;br /&gt;
&lt;br /&gt;
Используя процессоры, показанные в этом примере (&amp;lt;code&amp;gt;filter&amp;lt;/code&amp;gt;и &amp;lt;code&amp;gt;transform&amp;lt;/code&amp;gt;), можно оптимизировать запросы перед их отправкой в ​​Ключ-АСТРОМ и исключить данные, которые могут быть нерелевантными для вашего варианта использования, а также сократить расходы на выставление счетов.&lt;br /&gt;
&lt;br /&gt;
== Предустановка ==&lt;br /&gt;
&lt;br /&gt;
* Один из следующих дистрибутивов &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; с процессорами [https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.136.0/processor/transformprocessor преобразования]﻿ и [https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.136.0/processor/filterprocessor фильтрации]﻿&lt;br /&gt;
** [[Collector Ключ-АСТРОМ|&amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; Ключ-АСТРОМ]]&lt;br /&gt;
** [[Collector Ключ-АСТРОМ|OpenTelemetry Contrib]]&lt;br /&gt;
** [[Collector Ключ-АСТРОМ|Пользовательская версия Builder]]&lt;br /&gt;
* [[Экспорт с помощью OTLP|URL-адрес конечной точки API Ключ-АСТРОМ]], на которую следует экспортировать данные.&lt;br /&gt;
* [[Экспорт с помощью OTLP|Токен API]] с соответствующей областью доступа (требуется только для &amp;#039;&amp;#039;&amp;#039;SaaS&amp;#039;&amp;#039;&amp;#039; и АктивногоШлюза)&lt;br /&gt;
&lt;br /&gt;
Информацию о настройке &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; с использованием указанной ниже конфигурации см. в разделах [[Развертывание 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;
  transform:&lt;br /&gt;
&lt;br /&gt;
    trace_statements:&lt;br /&gt;
&lt;br /&gt;
      - context: resource&lt;br /&gt;
&lt;br /&gt;
        statements:&lt;br /&gt;
&lt;br /&gt;
          # Only keep a certain set of resource attributes&lt;br /&gt;
&lt;br /&gt;
          - keep_matching_keys(attributes, &amp;quot;^(aaa|bbb|ccc).*&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
      - context: span&lt;br /&gt;
&lt;br /&gt;
        statements:&lt;br /&gt;
&lt;br /&gt;
          # Only keep a certain set of span attributes&lt;br /&gt;
&lt;br /&gt;
          - keep_matching_keys(attributes, &amp;quot;(^xyz.pqr$)|(^(aaa|bbb|ccc).*)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
          # Set a static key&lt;br /&gt;
&lt;br /&gt;
          - set(attributes[&amp;quot;svc.marker&amp;quot;], &amp;quot;purchasing&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
          # Delete a specific key&lt;br /&gt;
&lt;br /&gt;
          - delete_key(attributes, &amp;quot;message&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
          # Rewrite a key&lt;br /&gt;
&lt;br /&gt;
          - set(attributes[&amp;quot;purchase.id&amp;quot;], ConvertCase(attributes[&amp;quot;purchase.id&amp;quot;], &amp;quot;upper&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
          # Apply regex replacement&lt;br /&gt;
&lt;br /&gt;
          - replace_pattern(name, &amp;quot;^.*(DataSubmission-\d+).*$&amp;quot;, &amp;quot;$$1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    metric_statements:&lt;br /&gt;
&lt;br /&gt;
      - context: metric&lt;br /&gt;
&lt;br /&gt;
        statements:&lt;br /&gt;
&lt;br /&gt;
          # Rename all metrics containing &amp;#039;_bad&amp;#039; suffix in their name with `_invalid`&lt;br /&gt;
&lt;br /&gt;
          - replace_pattern(name, &amp;quot;(.*)_bad$&amp;quot;, &amp;quot;$${1}_invalid&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  filter:&lt;br /&gt;
&lt;br /&gt;
    error_mode: ignore&lt;br /&gt;
&lt;br /&gt;
    traces:&lt;br /&gt;
&lt;br /&gt;
      span:&lt;br /&gt;
&lt;br /&gt;
        # Filter spans with resource attributes matching the provided regular expression&lt;br /&gt;
&lt;br /&gt;
        - IsMatch(resource.attributes[&amp;quot;k8s.pod.name&amp;quot;], &amp;quot;^my-pod-name.*&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    metrics:&lt;br /&gt;
&lt;br /&gt;
      metric:&lt;br /&gt;
&lt;br /&gt;
        # Filter metrics which contain at least one data point with a &amp;quot;bad.metric&amp;quot; attribute&lt;br /&gt;
&lt;br /&gt;
        - &amp;#039;HasAttrKeyOnDatapoint(&amp;quot;bad.metric&amp;quot;)&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    logs:&lt;br /&gt;
&lt;br /&gt;
      log_record:&lt;br /&gt;
&lt;br /&gt;
        # Filter logs with resource attributes matching the configured names&lt;br /&gt;
&lt;br /&gt;
        - resource.attributes[&amp;quot;service.name&amp;quot;] == &amp;quot;service1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        - resource.attributes[&amp;quot;service.name&amp;quot;] == &amp;quot;service2&amp;quot;&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: &amp;quot;Api-Token ${env:DT_API_TOKEN}&amp;quot;&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: [filter,transform]&lt;br /&gt;
&lt;br /&gt;
      exporters: [otlphttp]&lt;br /&gt;
&lt;br /&gt;
    metrics:&lt;br /&gt;
&lt;br /&gt;
      receivers: [otlp]&lt;br /&gt;
&lt;br /&gt;
      processors: [filter]&lt;br /&gt;
&lt;br /&gt;
      exporters: [otlphttp]&lt;br /&gt;
&lt;br /&gt;
    logs:&lt;br /&gt;
&lt;br /&gt;
      receivers: [otlp]&lt;br /&gt;
&lt;br /&gt;
      processors: [filter]&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.&lt;br /&gt;
&lt;br /&gt;
Это сделано для демонстрации. Вы можете указать здесь любой другой допустимый получатель (например, &amp;lt;code&amp;gt;zipkin&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Процессор ===&lt;br /&gt;
&lt;br /&gt;
==== Преобразование ====&lt;br /&gt;
В разделе &amp;lt;code&amp;gt;processors&amp;lt;/code&amp;gt; мы указываем [https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.136.0/processor/transformprocessor процессор &amp;lt;code&amp;gt;transform&amp;lt;/code&amp;gt;]﻿ с набором различных операторов модификации атрибутов. &amp;lt;code&amp;gt;context&amp;lt;/code&amp;gt; указывает область, к которой должны применяться операторы (в данном случае для атрибутов ресурсов &amp;lt;code&amp;gt;resource&amp;lt;/code&amp;gt;, для атрибутов диапазона &amp;lt;code&amp;gt;span&amp;lt;/code&amp;gt; и для метрик &amp;lt;code&amp;gt;metric&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Более подробную информацию об отдельных параметрах конфигурации см . в [https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/v0.136.0/processor/transformprocessor/README.md документации OpenTelemetry процессора преобразования] ﻿&lt;br /&gt;
&lt;br /&gt;
В приведенном выше примере конфигурации используются следующие операторы:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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/blob/v0.136.0/pkg/ottl/ottlfuncs/README.md#keep_matching_keys keep_matching_keys]&amp;lt;/code&amp;gt;﻿&lt;br /&gt;
|Оценивает имена ключей атрибутов и сохраняет только те, имена которых соответствуют заданным регулярным выражениям &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;^(aaa|bbb|ccc).*&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; для атрибутов ресурсов и &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;(^xyz.pqr$)|(^(aaa|bbb|ccc).*)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; для атрибутов диапазона.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;[https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/v0.136.0/pkg/ottl/ottlfuncs/README.md#set set]&amp;lt;/code&amp;gt;﻿&lt;br /&gt;
|Добавляет/изменяет следующие два атрибута &amp;#039;&amp;#039;&amp;#039;span&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;svc.marker&amp;lt;/code&amp;gt;, со статическим значением &amp;lt;code&amp;gt;purchasing&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;purchase.id&amp;lt;/code&amp;gt;, преобразуя его значение в верхний регистр, используя &amp;lt;code&amp;gt;[https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/v0.136.0/pkg/ottl/ottlfuncs/README.md#convertcase ConvertCase]&amp;lt;/code&amp;gt;﻿&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;[https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/v0.136.0/pkg/ottl/ottlfuncs/README.md#delete_key delete_key]&amp;lt;/code&amp;gt;﻿&lt;br /&gt;
|Удаляет атрибуты с именем &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;[https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/v0.136.0/pkg/ottl/ottlfuncs/README.md#replace_pattern replace_pattern]&amp;lt;/code&amp;gt;﻿&lt;br /&gt;
|Сопоставляет строку с заданным регулярным выражением и выполняет замену строки во всех соответствующих записях.&lt;br /&gt;
&lt;br /&gt;
В нашем примере мы сначала используем его для трассировки, чтобы сопоставить имя с регулярным выражением &amp;lt;code&amp;gt;^.*(DataSubmission-\d+).*$&amp;lt;/code&amp;gt;, и заменяем его содержимое первой группой захвата (&amp;lt;code&amp;gt;$$1&amp;lt;/code&amp;gt;) нашего выражения. По сути, это означает, что мы ищем строки &amp;lt;code&amp;gt;DataSubmission&amp;lt;/code&amp;gt; с суффиксом, содержащим число, и, если найдено, сохраняем только значение найденного совпадения.&lt;br /&gt;
&lt;br /&gt;
Мы также используем функцию для метрик с регулярным выражением &amp;lt;code&amp;gt;(.*)_bad$&amp;lt;/code&amp;gt;, чтобы изменить суффикс &amp;lt;code&amp;gt;_bad&amp;lt;/code&amp;gt; на &amp;lt;code&amp;gt;_invalid&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Фильтр ====&lt;br /&gt;
Кроме того, мы также настраиваем экземпляр [https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.136.0/processor/filterprocessor процессора &amp;lt;code&amp;gt;filter&amp;lt;/code&amp;gt;] для﻿ фильтрации сигнала на основе следующих критериев:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Сигнал&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/blob/v0.136.0/pkg/ottl/ottlfuncs/README.md#ismatch IsMatch]&amp;lt;/code&amp;gt;﻿, отбрасывая интервалы с атрибутами, имена которых начинаются с &amp;lt;code&amp;gt;^my-pod-name.*my-pod-name&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|Метрики&lt;br /&gt;
|Используется для оценки наличия &amp;lt;code&amp;gt;[https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/v0.136.0/processor/filterprocessor/README.md#HasAttrKeyOnDatapoint HasAttrKeyOnDatapoint]&amp;lt;/code&amp;gt; у точек данных атрибутов с именем &amp;lt;code&amp;gt;bad.metric&amp;lt;/code&amp;gt;.﻿&lt;br /&gt;
|-&lt;br /&gt;
|Логи&lt;br /&gt;
|Использует строгое строковое соответствие атрибута ресурса &amp;lt;code&amp;gt;service.name&amp;lt;/code&amp;gt; строкам &amp;lt;code&amp;gt;service1&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;service2&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
Более подробную информацию об отдельных параметрах конфигурации см. в [https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/v0.136.0/processor/filterprocessor/README.md документации OpenTelemetry фильтр-процессора].﻿&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.dynatrace.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; мы собираем объекты приемника, процессора и экспортера в контейнер трассировок, который принимает трассировки &amp;#039;&amp;#039;&amp;#039;OTLP&amp;#039;&amp;#039;&amp;#039; на настроенных конечных точках и преобразует атрибуты трассировок в соответствии с настроенными правилами, а затем пересылает все в Ключ-АСТРОМ с помощью экспортера.&lt;/div&gt;</summary>
		<author><name>IKuznetsov</name></author>
	</entry>
</feed>