<?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%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BB%D0%BE%D0%B3%D0%BE%D0%B2_%D0%BA_%D1%82%D1%80%D0%B0%D1%81%D1%81%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0%D0%BC</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%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BB%D0%BE%D0%B3%D0%BE%D0%B2_%D0%BA_%D1%82%D1%80%D0%B0%D1%81%D1%81%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0%D0%BC"/>
	<link rel="alternate" type="text/html" href="https://doc.ruscomtech.ru/index.php?title=%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BB%D0%BE%D0%B3%D0%BE%D0%B2_%D0%BA_%D1%82%D1%80%D0%B0%D1%81%D1%81%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0%D0%BC&amp;action=history"/>
	<updated>2026-09-16T13:29:10Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://doc.ruscomtech.ru/index.php?title=%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BB%D0%BE%D0%B3%D0%BE%D0%B2_%D0%BA_%D1%82%D1%80%D0%B0%D1%81%D1%81%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0%D0%BC&amp;diff=6553&amp;oldid=prev</id>
		<title>IKuznetsov: Новая страница: «= Подключение данных журналов к трассировкам (Logs Classic) =  Ключ-АСТРОМ может обогатить ваши загруженные данные журналов дополнительной информацией, которая помогает Ключ-АСТРОМ распознавать, сопоставлять и оценивать данные. Обогащение данных журналов п...»</title>
		<link rel="alternate" type="text/html" href="https://doc.ruscomtech.ru/index.php?title=%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BB%D0%BE%D0%B3%D0%BE%D0%B2_%D0%BA_%D1%82%D1%80%D0%B0%D1%81%D1%81%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0%D0%BC&amp;diff=6553&amp;oldid=prev"/>
		<updated>2026-07-30T04:10:02Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «= Подключение данных журналов к трассировкам (Logs Classic) =  Ключ-АСТРОМ может обогатить ваши загруженные данные журналов дополнительной информацией, которая помогает Ключ-АСТРОМ распознавать, сопоставлять и оценивать данные. Обогащение данных журналов п...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Подключение данных журналов к трассировкам (Logs Classic) =&lt;br /&gt;
&lt;br /&gt;
Ключ-АСТРОМ может обогатить ваши загруженные данные журналов дополнительной информацией, которая помогает Ключ-АСТРОМ распознавать, сопоставлять и оценивать данные. Обогащение данных журналов приводит к более точному анализу ваших журналов.&lt;br /&gt;
&lt;br /&gt;
Обогащение логов позволяет вам:&lt;br /&gt;
&lt;br /&gt;
* Легко переключаться между контекстами и анализировать отдельные фрагменты кода, транзакции или целые рабочие нагрузки.&lt;br /&gt;
* Расширьте возможности команд разработчиков, упростив и ускорив процесс выявления и определения проблем.&lt;br /&gt;
&lt;br /&gt;
== Автоматическое обогащение журналов ==&lt;br /&gt;
&lt;br /&gt;
Вы можете включить обогащение логов для конкретной технологии, используемой для создания данных логов, и позволить Ключ-АСТРОМ автоматически добавлять дополнительные атрибуты в каждую полученную запись лога. Этот метод рекомендуется для структурированных данных логов известных технологий.&lt;br /&gt;
&lt;br /&gt;
=== Ограничение логарифмического обогащения ===&lt;br /&gt;
&lt;br /&gt;
Используйте функцию переопределения группы процессов, чтобы ограничить обогащение журналов определенной группой процессов или процессом внутри группы процессов.&lt;br /&gt;
&lt;br /&gt;
=== Включение/отключение обогащения журналов для конкретной технологии ===&lt;br /&gt;
&lt;br /&gt;
Чтобы включить обогащение логов для конкретной технологии, можно использовать один из следующих подходов:&lt;br /&gt;
&lt;br /&gt;
==== В глобальном масштабе ====&lt;br /&gt;
# Перейдите в &amp;#039;&amp;#039;&amp;#039;Настройки&amp;#039;&amp;#039;&amp;#039; &amp;gt; &amp;#039;&amp;#039;&amp;#039;Предпочтения&amp;#039;&amp;#039;&amp;#039; &amp;gt; &amp;#039;&amp;#039;&amp;#039;Функции ЕдиногоАгента&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
# Фильтр для обогащения.&lt;br /&gt;
# Включайте/отключайте каждый этап обогащения логов для каждой технологии, которую вы используете для генерации входных данных логов.&lt;br /&gt;
# Нажмите &amp;#039;&amp;#039;&amp;#039;Сохранить изменения&amp;#039;&amp;#039;&amp;#039;, чтобы сохранить конфигурацию.&lt;br /&gt;
&lt;br /&gt;
==== Переопределение группы процессов в ЕдиномАгенте ====&lt;br /&gt;
# Откройте нужную группу процессов.&lt;br /&gt;
# Выберите &amp;#039;&amp;#039;&amp;#039;Дополнительно (…)&amp;#039;&amp;#039;&amp;#039; &amp;gt; &amp;#039;&amp;#039;&amp;#039;Функции ЕдиногоАгента&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
# Фильтр для обогащения.&lt;br /&gt;
# Включайте/отключайте каждый этап обогащения логов для каждой технологии, которую вы используете для генерации входных данных логов.&lt;br /&gt;
# Нажмите &amp;#039;&amp;#039;&amp;#039;Сохранить изменения&amp;#039;&amp;#039;&amp;#039;, чтобы сохранить конфигурацию.&lt;br /&gt;
&lt;br /&gt;
==== Пространство имен Kubernetes ====&lt;br /&gt;
# Перейдите в раздел &amp;#039;&amp;#039;&amp;#039;Наблюдение за инфраструктурой&amp;#039;&amp;#039;&amp;#039; &amp;gt; &amp;#039;&amp;#039;&amp;#039;Kubernetes&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
# Выберите значение &amp;#039;&amp;#039;&amp;#039;Namespaces&amp;#039;&amp;#039;&amp;#039; для вашего кластера &amp;#039;&amp;#039;&amp;#039;Kubernetes&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
# Выберите интересующую вас запись в пространстве имен &amp;#039;&amp;#039;&amp;#039;Kubernetes&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
# В левом верхнем углу страницы перейдите в раздел &amp;#039;&amp;#039;&amp;#039;Дополнительно (…)&amp;#039;&amp;#039;&amp;#039; &amp;gt; &amp;#039;&amp;#039;&amp;#039;Настройки&amp;#039;&amp;#039;&amp;#039; &amp;gt; &amp;#039;&amp;#039;&amp;#039;Функции ЕдиногоАгента&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
# Выберите &amp;#039;&amp;#039;&amp;#039;Добавить переопределение&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
# Выберите технологию обогащения логов из раскрывающегося списка &amp;#039;&amp;#039;&amp;#039;Функция&amp;#039;&amp;#039;&amp;#039; и убедитесь, что переключатель &amp;#039;&amp;#039;&amp;#039;Переопределение функции&amp;#039;&amp;#039;&amp;#039; включен.&lt;br /&gt;
# Выберите &amp;#039;&amp;#039;&amp;#039;Сохранить и закрыть&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
=== Что делает автоматическое обогащение логов? ===&lt;br /&gt;
&lt;br /&gt;
Функция обогащения логов изменяет полученные данные логов и добавляет следующую информацию к каждой обнаруженной записи лога:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;dt.trace_id&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;dt.span_id&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;dt.entity.process_group_instance&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Поддерживаемые платформы ===&lt;br /&gt;
&lt;br /&gt;
Чтобы ознакомиться со списком поддерживаемых фреймворков для обогащения контекста журналов трассировки/пространства, перейдите в раздел «Техническая поддержка».&lt;br /&gt;
&lt;br /&gt;
=== Структурированные данные журнала ===&lt;br /&gt;
&lt;br /&gt;
Для структурированных данных журналов, таких как &amp;#039;&amp;#039;&amp;#039;JSON&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;XML&amp;#039;&amp;#039;&amp;#039; и общепринятые текстовые форматы, Ключ-АСТРОМ добавляет поле атрибута к записи журнала.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Пример обогащенных данных журнала в формате JSON.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Данные журнала в формате &amp;#039;&amp;#039;&amp;#039;JSON&amp;#039;&amp;#039;&amp;#039; обогащаются дополнительными свойствами &amp;lt;code&amp;gt;&amp;amp;lt;dt.trace_id&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;dt.span_id&amp;amp;gt;&amp;lt;/code&amp;gt;, и &amp;lt;code&amp;gt;dt.entity.process_group_instance&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;severity&amp;quot;: &amp;quot;error&amp;quot;,&lt;br /&gt;
  &amp;quot;time&amp;quot;: 1638957438023,&lt;br /&gt;
  &amp;quot;pid&amp;quot;: 1,&lt;br /&gt;
  &amp;quot;hostname&amp;quot;: &amp;quot;paymentservice-788946fdcd-42lgq&amp;quot;,&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;paymentservice-charge&amp;quot;,&lt;br /&gt;
  &amp;quot;dt.trace_id&amp;quot;: &amp;quot;d04b42bc9f4b6ecdbf6bc9f4b6ecdbc&amp;quot;,&lt;br /&gt;
  &amp;quot;dt.span_id&amp;quot;: &amp;quot;9adc716eb808d428&amp;quot;,&lt;br /&gt;
  &amp;quot;dt.entity.process_group_instance&amp;quot;: &amp;quot;PROCESS_GROUP_INSTANCE-27204EFED3D8466E&amp;quot;,&lt;br /&gt;
  &amp;quot;message&amp;quot;: &amp;quot;Неподдерживаемый тип карты для cardNumber=************0454&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Пример обогащенных данных журнала в формате XML.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Данные журнала в формате &amp;#039;&amp;#039;&amp;#039;XML&amp;#039;&amp;#039;&amp;#039; дополняются дополнительными узлами &amp;lt;code&amp;gt;&amp;amp;lt;dt.trace_id&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;dt.span_id&amp;amp;gt;&amp;lt;/code&amp;gt;, и &amp;lt;code&amp;gt;&amp;amp;lt;dt.entity.process_group_instance&amp;amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;windows-1252&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;record&amp;gt;&lt;br /&gt;
    &amp;lt;date&amp;gt;2021-08-24T14:41:36.565218700Z&amp;lt;/date&amp;gt;&lt;br /&gt;
    &amp;lt;millis&amp;gt;1629816096565&amp;lt;/millis&amp;gt;&lt;br /&gt;
    &amp;lt;nanos&amp;gt;218700&amp;lt;/nanos&amp;gt;&lt;br /&gt;
    &amp;lt;sequence&amp;gt;0&amp;lt;/sequence&amp;gt;&lt;br /&gt;
    &amp;lt;logger&amp;gt;com.apm.testapp.logging.jul.XMLLoggingSample&amp;lt;/logger&amp;gt;&lt;br /&gt;
    &amp;lt;level&amp;gt;INFO&amp;lt;/level&amp;gt;&lt;br /&gt;
    &amp;lt;class&amp;gt;com.apm.testapp.logging.jul.BaseLoggingSample&amp;lt;/class&amp;gt;&lt;br /&gt;
    &amp;lt;method&amp;gt;info&amp;lt;/method&amp;gt;&lt;br /&gt;
    &amp;lt;thread&amp;gt;1&amp;lt;/thread&amp;gt;&lt;br /&gt;
    &amp;lt;message&amp;gt;Update successfully completed.&amp;lt;/message&amp;gt;&lt;br /&gt;
    &amp;lt;dt.trace_id&amp;gt;513fcd4e9b08792fcd4e9b08792&amp;lt;/dt.trace_id&amp;gt;&lt;br /&gt;
    &amp;lt;dt.span_id&amp;gt;125840e3125840e3&amp;lt;/dt.span_id&amp;gt;&lt;br /&gt;
    &amp;lt;dt.entity.process_group_instance&amp;gt;PROCESS_GROUP_INSTANCE-27204EFED3D8466E&amp;lt;/dt.entity.process_group_instance&amp;gt;&lt;br /&gt;
&amp;lt;/record&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Неструктурированные данные журналов ===&lt;br /&gt;
&lt;br /&gt;
Перед использованием автоматического обогащения неструктурированных данных журналов проверьте, влияет ли функция обогащения журналов Ключ-АСТРОМ на существующий конвейер обработки данных журналов.&lt;br /&gt;
&lt;br /&gt;
Неструктурированные данные журналов обычно представляют собой необработанный текст в простой текстовой форме, упорядоченный последовательно и предназначенный для чтения людьми. Ключ-АСТРОМ не обогащает неструктурированные данные журналов автоматически. Ключ-АСТРОМ способен обогащать неструктурированные данные журналов, но добавление дополнительной информации к данным журналов может повлиять на работу сторонних инструментов, которые обрабатывают эти же данные.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Пример обогащенных данных журнала в формате необработанного текста.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Данные журнала в необработанном текстовом виде дополняются дополнительной строкой &amp;lt;code&amp;gt;[!dt dt.trace_id=$trace_id, dt.span_id=$span_id, dt.entity.process_group_instance=$dt.entity.process_group_instance]&amp;lt;/code&amp;gt; (атрибутами и их значениями).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
127.0.0.1 - [21/Oct/2021:10:33:28 +0200] GET /index.htm HTTP/1.1 404 597 [!dt dt.trace_id=aa764ee37ebaa764ee37eaa764ee37e,dt.span_id=b93ede8b93ede8, dt.entity.process_group_instance=PROCESS_GROUP_INSTANCE-27204EFED3D8466E]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Обогащение журналов вручную ==&lt;br /&gt;
&lt;br /&gt;
Версия ЕдиногоАгента 1.239+&lt;br /&gt;
&lt;br /&gt;
Вы можете вручную обогатить данные журналов, поступающие в Ключ-АСТРОМ, определив шаблон журнала, включающий поля &amp;lt;code&amp;gt;dt.span_id&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dt.trace_id&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dt.trace_sampled&amp;lt;/code&amp;gt;, и &amp;lt;code&amp;gt;dt.entity.process_group_instance&amp;lt;/code&amp;gt;. Вы можете включить ручное обогащение журналов для конкретной технологии, выполнив действия, описанные в разделе «Обогащение журналов».&lt;br /&gt;
&lt;br /&gt;
Обязательно соблюдайте следующие правила форматирования обогащенных полей в неструктурированном журнале:&lt;br /&gt;
&lt;br /&gt;
* Поля должны быть заключены в квадратные скобки (&amp;lt;code&amp;gt;[]&amp;lt;/code&amp;gt;) с префиксом &amp;lt;code&amp;gt;!dt&amp;lt;/code&amp;gt;. Например, &amp;lt;code&amp;gt;[!dt dt.trace_id=$dt_trace_id,dt.span_id=$dt_span_id, dt.entity.process_group_instance=$dt.entity.process_group_instance]&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Поля должны быть отформатированы без двойных кавычек.&lt;br /&gt;
* Все недопустимые символы в поле и его значении должны быть экранированы.&lt;br /&gt;
* Любые управляющие символы, подобные &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt;, должны быть исключены из определения обогащения.&lt;br /&gt;
&lt;br /&gt;
=== Пример ручного обогащения данных журнала NGINX ===&lt;br /&gt;
&lt;br /&gt;
Предположим, вы хотите вручную обогатить данные логов &amp;#039;&amp;#039;&amp;#039;NGINX&amp;#039;&amp;#039;&amp;#039; с помощью переменных &amp;lt;code&amp;gt;dt.trace_id&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dt.span_id&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;dt.trace_sampled&amp;lt;/code&amp;gt;. Файл конфигурации &amp;#039;&amp;#039;&amp;#039;NGINX&amp;#039;&amp;#039;&amp;#039; содержит множество стандартных переменных &amp;#039;&amp;#039;&amp;#039;NGINX&amp;#039;&amp;#039;&amp;#039;, поэтому определение формата логов должно находиться в разделе &amp;lt;code&amp;gt;log_format&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
log_format custom &amp;#039;$remote_addr - [$time_local] $request $status $body_bytes_sent [!dt dt.trace_id=$dt_trace_id,dt.span_id=$dt_span_id,dt.trace_sampled=$dt_trace_sampled]&amp;#039;;&lt;br /&gt;
access_log logs/access.log custom;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменные &amp;lt;code&amp;gt;$dt_trace_id&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;$dt_span_id&amp;lt;/code&amp;gt;, и &amp;lt;code&amp;gt;$dt_trace_sampled&amp;lt;/code&amp;gt; внедряются ЕдинымАгентом во время выполнения. Если ЕдиныйАгент не сможет их внедрить, например, из-за неработающей инструментации или использования более старой версии ЕдиногоАгента, которая не поддерживает эту функцию, то команды проверки конфигурации &amp;#039;&amp;#039;&amp;#039;NGINX&amp;#039;&amp;#039;&amp;#039;, такие как &amp;lt;code&amp;gt;nginx -t&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;nginx -s reload&amp;lt;/code&amp;gt;, завершатся с ошибкой. Это не влияет на работающий экземпляр &amp;#039;&amp;#039;&amp;#039;NGINX&amp;#039;&amp;#039;&amp;#039; и не является проблемой в производственной среде. В случае возникновения проблем обратитесь в службу поддержки Ключ-АСТРОМ.&lt;br /&gt;
&lt;br /&gt;
В результате будет получен файл &amp;lt;code&amp;gt;access.log&amp;lt;/code&amp;gt;, содержащий обогащенные записи журнала:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
127.0.0.1 - [22/Mar/2022:08:50:45 +0100] GET /index.htm HTTP/1.1 200 30 [!dt dt.trace_id=b9e5c9ec08be5fab5071d76f427be7da,dt.span_id=43c5bb9432593963,dt.trace_sampled=true]&lt;br /&gt;
127.0.0.1 - [22/Mar/2022:08:50:45 +0100] GET /index.htm HTTP/1.1 200 30 [!dt dt.trace_id=01e52950b145d97bf22345e68c5e6c58,dt.span_id=de819d856eecb236,dt.trace_sampled=true]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для версий ЕдиногоАгента 1.237 и более ранних используются другие переменные &amp;#039;&amp;#039;&amp;#039;NGINX&amp;#039;&amp;#039;&amp;#039;. Например:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
log_format custom &amp;#039;$remote_addr - [$time_local] $request $status $body_bytes_sent [!dt dt.trace_id=$trace_id,dt.span_id=$span_id]&amp;#039;; access_log logs/access.log custom&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате будет получен файл &amp;lt;code&amp;gt;access.log&amp;lt;/code&amp;gt;, содержащий обогащенные записи журнала:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
127.0.0.1 - [21/Oct/2021:10:33:28 +0200] GET /index.htm HTTP/1.1 404 597 [!dt dt.trace_id=e1c0afeb0b8a91d7748139aa764ee37e,dt.span_id=e5e6748fab93ede8]&lt;br /&gt;
127.0.0.1 - [21/Oct/2021:10:33:31 +0200] GET /index.html HTTP/1.1 200 1056 [!dt dt.trace_id=81fe7816ba6c38f7aa09aef3684cd941,dt.span_id=3bdacc466ae073cd]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Пример ручного обогащения данных логов Log4j ===&lt;br /&gt;
&lt;br /&gt;
В &amp;#039;&amp;#039;&amp;#039;Log4j&amp;#039;&amp;#039;&amp;#039; PatternFormatter можно указать следующий шаблон для включения информации, обогащенной данными Ключ-АСТРОМ:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;PatternLayout pattern=&amp;quot;%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} dt.trace_id=%X{dt.trace_id} dt.span_id=%X{dt.span_id} dt.entity.process_group_instance=%X{dt.entity.process_group_instance} - %msg%n&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Пример ручного обогащения данных в кодировщике Logstash Logback ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Logback&amp;#039;&amp;#039;&amp;#039; — это преемник проекта &amp;#039;&amp;#039;&amp;#039;log4j&amp;#039;&amp;#039;&amp;#039;. &amp;#039;&amp;#039;&amp;#039;Logstash Logback&amp;#039;&amp;#039;&amp;#039; — это расширение, предоставляющее кодировщики, макеты и аппендеры &amp;#039;&amp;#039;&amp;#039;Logback&amp;#039;&amp;#039;&amp;#039; для записи логов в формате &amp;#039;&amp;#039;&amp;#039;JSON&amp;#039;&amp;#039;&amp;#039; и других форматах, поддерживаемых &amp;#039;&amp;#039;&amp;#039;Jackson&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведён пример ручного обогащения с использованием кодировщика &amp;#039;&amp;#039;&amp;#039;Logstash&amp;#039;&amp;#039;&amp;#039;. Обратите внимание на дополнительное свойство &amp;lt;code&amp;gt;mdc&amp;lt;/code&amp;gt; в файле конфигурации, где можно указать переменные &amp;#039;&amp;#039;&amp;#039;MDC&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;appender name=&amp;quot;COMPOSITEJSONENCODER&amp;quot; class=&amp;quot;ch.qos.logback.core.FileAppender&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;file&amp;gt;compositejsonencoder.log&amp;lt;/file&amp;gt;&lt;br /&gt;
  &amp;lt;encoder class=&amp;quot;net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;providers&amp;gt;&lt;br /&gt;
      &amp;lt;timestamp&amp;gt;&lt;br /&gt;
        &amp;lt;fieldName&amp;gt;timestamp&amp;lt;/fieldName&amp;gt;&lt;br /&gt;
        &amp;lt;timeZone&amp;gt;UTC&amp;lt;/timeZone&amp;gt;&lt;br /&gt;
      &amp;lt;/timestamp&amp;gt;&lt;br /&gt;
      &amp;lt;loggerName&amp;gt;&lt;br /&gt;
        &amp;lt;fieldName&amp;gt;logger&amp;lt;/fieldName&amp;gt;&lt;br /&gt;
      &amp;lt;/loggerName&amp;gt;&lt;br /&gt;
      &amp;lt;logLevel&amp;gt;&lt;br /&gt;
        &amp;lt;fieldName&amp;gt;level&amp;lt;/fieldName&amp;gt;&lt;br /&gt;
      &amp;lt;/logLevel&amp;gt;&lt;br /&gt;
      &amp;lt;threadName&amp;gt;&lt;br /&gt;
        &amp;lt;fieldName&amp;gt;thread&amp;lt;/fieldName&amp;gt;&lt;br /&gt;
      &amp;lt;/threadName&amp;gt;&lt;br /&gt;
      &amp;lt;mdc&amp;gt;&lt;br /&gt;
        &amp;lt;includeMdcKeyName&amp;gt;dt.span_id&amp;lt;/includeMdcKeyName&amp;gt;&lt;br /&gt;
        &amp;lt;includeMdcKeyName&amp;gt;dt.trace_id&amp;lt;/includeMdcKeyName&amp;gt;&lt;br /&gt;
        &amp;lt;includeMdcKeyName&amp;gt;dt.entity.host&amp;lt;/includeMdcKeyName&amp;gt;&lt;br /&gt;
      &amp;lt;/mdc&amp;gt;&lt;br /&gt;
      &amp;lt;stackTrace&amp;gt;&lt;br /&gt;
        &amp;lt;fieldName&amp;gt;stackTrace&amp;lt;/fieldName&amp;gt;&lt;br /&gt;
        &amp;lt;!-- maxLength - ограничивает длину трассировки стека --&amp;gt;&lt;br /&gt;
        &amp;lt;throwableConverter class=&amp;quot;net.logstash.logback.stacktrace.ShortenedThrowableConverter&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;maxDepthPerThrowable&amp;gt;200&amp;lt;/maxDepthPerThrowable&amp;gt;&lt;br /&gt;
          &amp;lt;maxLength&amp;gt;14000&amp;lt;/maxLength&amp;gt;&lt;br /&gt;
          &amp;lt;rootCauseFirst&amp;gt;true&amp;lt;/rootCauseFirst&amp;gt;&lt;br /&gt;
        &amp;lt;/throwableConverter&amp;gt;&lt;br /&gt;
      &amp;lt;/stackTrace&amp;gt;&lt;br /&gt;
      &amp;lt;message/&amp;gt;&lt;br /&gt;
      &amp;lt;throwableClassName&amp;gt;&lt;br /&gt;
        &amp;lt;fieldName&amp;gt;exceptionClass&amp;lt;/fieldName&amp;gt;&lt;br /&gt;
      &amp;lt;/throwableClassName&amp;gt;&lt;br /&gt;
    &amp;lt;/providers&amp;gt;&lt;br /&gt;
  &amp;lt;/encoder&amp;gt;&lt;br /&gt;
&amp;lt;/appender&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Пример ручного обогащения данных логов для Winston (Node.js) ===&lt;br /&gt;
&lt;br /&gt;
Чтобы включить обогащение логов для &amp;#039;&amp;#039;&amp;#039;Winston&amp;#039;&amp;#039;&amp;#039;, активируйте функцию &amp;#039;&amp;#039;&amp;#039;ЕдиногоАгента Node.js - Trace/span context enrichment for unstructured logs&amp;#039;&amp;#039;&amp;#039;. Вы можете адаптировать транспорт &amp;#039;&amp;#039;&amp;#039;Winston&amp;#039;&amp;#039;&amp;#039;, чтобы точно определить место добавления обогащения, как показано в приведенном ниже примере кода.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
const winston = require(&amp;quot;winston&amp;quot;);&lt;br /&gt;
const Transport = require(&amp;quot;winston-transport&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
class CustomTransport extends Transport {&lt;br /&gt;
  log(info, next) {&lt;br /&gt;
    let myLogLine = `MyLogLine: ${info.timestamp} level=${info.level}: ${info.message}`;&lt;br /&gt;
    // Это важно, поскольку приведенная выше строка извлекает только метку времени, уровень и сообщение, но ничего больше из метаданных.&lt;br /&gt;
    if (info[&amp;quot;dt.trace_id&amp;quot;]) {&lt;br /&gt;
      myLogLine = `[!dt dt.trace_id=${info[&amp;quot;dt.trace_id&amp;quot;]},dt.span_id=${info[&amp;quot;dt.span_id&amp;quot;]},dt.trace_sampled=${info[&amp;quot;dt.trace_sampled&amp;quot;]}] ${myLogLine}`;&lt;br /&gt;
    }&lt;br /&gt;
    console.log(myLogLine);&lt;br /&gt;
    next();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
const logger = winston.createLogger({&lt;br /&gt;
  level: &amp;quot;info&amp;quot;,&lt;br /&gt;
  format: winston.format.timestamp(),&lt;br /&gt;
  transports: [&lt;br /&gt;
    new CustomTransport(),&lt;br /&gt;
    // Этот транспорт включает все метаданные (включая идентификатор трассировки, добавленный Ключ-АСТРОМ и т. д.).&lt;br /&gt;
    new winston.transport.Console({&lt;br /&gt;
      format: winston.format.simple()&lt;br /&gt;
    })&lt;br /&gt;
  ]&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Входящий трафик NGINX с использованием Kubernetes ===&lt;br /&gt;
&lt;br /&gt;
Вы можете обогатить свои логи, используя &amp;#039;&amp;#039;&amp;#039;NGINX Ingress&amp;#039;&amp;#039;&amp;#039; в &amp;#039;&amp;#039;&amp;#039;Kubernetes&amp;#039;&amp;#039;&amp;#039;, в два этапа:&lt;br /&gt;
&lt;br /&gt;
# Выполните инструкции инструментария &amp;#039;&amp;#039;&amp;#039;ingress-nginx&amp;#039;&amp;#039;&amp;#039; в &amp;#039;&amp;#039;&amp;#039;Kubernetes&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
# Добавьте в файл &amp;lt;code&amp;gt;configmap.yaml&amp;lt;/code&amp;gt; для входящего трафика &amp;#039;&amp;#039;&amp;#039;NGINX&amp;#039;&amp;#039;&amp;#039; следующую команду.&lt;br /&gt;
&lt;br /&gt;
Добавление строки &amp;lt;code&amp;gt;main-snippet&amp;lt;/code&amp;gt; включает в себя загрузку данных в ЕдиныйАгент и является необязательным, если вы уже следовали инструкциям по ручной настройке.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
main-snippet: load_module /opt/astromkey/oneagent/agent/bin/current/linux-musl-x86-64/liboneagentnginx.so;&lt;br /&gt;
log-format-upstream: &amp;#039;$remote_addr - $remote_user [$time_local] &amp;quot;$request&amp;quot; [!dt dt.trace_id=$dt_trace_id,dt.span_id=$dt_span_id,dt.trace_sampled=$dt_trace_sampled] $status $body_bytes_sent &amp;quot;$http_referer&amp;quot; &amp;quot;$http_user_agent&amp;quot; $request_length&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменные &amp;lt;code&amp;gt;$dt_trace_id&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;$dt_span_id&amp;lt;/code&amp;gt;, и &amp;lt;code&amp;gt;$dt_trace_sampled&amp;lt;/code&amp;gt; внедряются ЕдинымАгентом во время выполнения. Если ЕдиныйАгент не сможет их внедрить — например, из-за неработающей инструментации или использования более старой версии ЕдиногоАгента, которая не поддерживает эту функцию, — то команды проверки конфигурации &amp;#039;&amp;#039;&amp;#039;NGINX&amp;#039;&amp;#039;&amp;#039;, такие как &amp;lt;code&amp;gt;nginx -t&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;nginx -s reload&amp;lt;/code&amp;gt;, завершатся с ошибкой. Это не влияет на работающий экземпляр &amp;#039;&amp;#039;&amp;#039;NGINX&amp;#039;&amp;#039;&amp;#039; и не является проблемой в производственной среде. В случае возникновения проблем обратитесь в службу поддержки Ключ-АСТРОМ.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Пример файла configmap.yaml&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
kind: Namespace&lt;br /&gt;
metadata:&lt;br /&gt;
  name: prod-ingress-nginx&lt;br /&gt;
  labels:&lt;br /&gt;
    app.kubernetes.io/name: ingress-nginx&lt;br /&gt;
    app.kubernetes.io/instance: ingress-nginx&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
# Источник: ingress-nginx/templates/controller-serviceaccount.yaml&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
kind: ServiceAccount&lt;br /&gt;
metadata:&lt;br /&gt;
  labels:&lt;br /&gt;
    helm.sh/chart: ingress-nginx-4.0.6&lt;br /&gt;
    app.kubernetes.io/name: ingress-nginx&lt;br /&gt;
    app.kubernetes.io/instance: ingress-nginx&lt;br /&gt;
    app.kubernetes.io/version: 1.0.4&lt;br /&gt;
    app.kubernetes.io/managed-by: Helm&lt;br /&gt;
    app.kubernetes.io/component: controller&lt;br /&gt;
  name: ingress-nginx&lt;br /&gt;
  namespace: prod-ingress-nginx&lt;br /&gt;
automountServiceAccountToken: true&lt;br /&gt;
---&lt;br /&gt;
# Источник: ingress-nginx/templates/controller-configmap.yaml&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
kind: ConfigMap&lt;br /&gt;
metadata:&lt;br /&gt;
  labels:&lt;br /&gt;
    helm.sh/chart: ingress-nginx-4.0.6&lt;br /&gt;
    app.kubernetes.io/name: ingress-nginx&lt;br /&gt;
    app.kubernetes.io/instance: ingress-nginx&lt;br /&gt;
    app.kubernetes.io/version: 1.0.4&lt;br /&gt;
    app.kubernetes.io/managed-by: Helm&lt;br /&gt;
    app.kubernetes.io/component: controller&lt;br /&gt;
  name: ingress-nginx-controller&lt;br /&gt;
  namespace: prod-ingress-nginx&lt;br /&gt;
data:&lt;br /&gt;
  allow-snippet-annotations: &amp;#039;true&amp;#039;&lt;br /&gt;
  main-snippet: load_module /opt/astromkey/oneagent/agent/bin/current/linux-musl-x86-64/liboneagentnginx.so;&lt;br /&gt;
  log-format-upstream: &amp;#039;$remote_addr - $remote_user [$time_local] &amp;quot;$request&amp;quot; [!dt dt.trace_id=$dt_trace_id,dt.span_id=$dt_span_id,dt.trace_sampled=$dt_trace_sampled] $status $body_bytes_sent &amp;quot;$http_referer&amp;quot; &amp;quot;$http_user_agent&amp;quot; $request_length&amp;#039;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Получение идентификаторов трассировки и пакетов данных =&lt;br /&gt;
&lt;br /&gt;
Чтобы Ключ-АСТРОМ сопоставлял журналы с соответствующими трассировками, вы можете включить идентификаторы сегмента и трассировки в сообщения журнала, используя нотацию &amp;lt;code&amp;gt;[!dt]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В следующих примерах показано, как получить идентификаторы трассировки и пакетов данных с помощью &amp;#039;&amp;#039;&amp;#039;OpenTelemetry&amp;#039;&amp;#039;&amp;#039; или SDK ЕдиногоАгента.&lt;br /&gt;
&lt;br /&gt;
== Python с OpenTelemetry ==&lt;br /&gt;
В приведенном ниже примере создана функция &amp;lt;code&amp;gt;dt_log&amp;lt;/code&amp;gt; для обогащения заданного сообщения журнала информацией &amp;lt;code&amp;gt;trace_id&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;span_id&amp;lt;/code&amp;gt;. Вывод этого обогащенного сообщения в настроенный приемник журналов связывает сообщение журнала с текущим активным сегментом в веб-интерфейсе Ключ-АСТРОМ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import logging&lt;br /&gt;
from opentelemetry import trace&lt;br /&gt;
&lt;br /&gt;
def dt_log(self, record):&lt;br /&gt;
    if (not self.disabled) and self.filter(record):&lt;br /&gt;
        ctx = trace.get_current_span().get_span_context()&lt;br /&gt;
        if ctx.is_valid:&lt;br /&gt;
            trace_id = &amp;quot;{0:032X}&amp;quot;.format(ctx.trace_id)&lt;br /&gt;
            span_id = &amp;quot;{0:016X}&amp;quot;.format(ctx.span_id)&lt;br /&gt;
            record.msg = f&amp;quot;[!dt dt.trace_id={trace_id}, dt.span_id={span_id}] - {record.msg}&amp;quot;&lt;br /&gt;
    self.callHandlers(record)&lt;br /&gt;
&lt;br /&gt;
logging.Logger.handle = dt_log&lt;br /&gt;
&lt;br /&gt;
def lambda_handler(event, context):&lt;br /&gt;
    logger = logging.getLogger()&lt;br /&gt;
    logger.warning(&amp;quot;Hello world&amp;quot;)&lt;br /&gt;
    return {&lt;br /&gt;
        &amp;quot;statusCode&amp;quot;: 200,&lt;br /&gt;
        &amp;quot;body&amp;quot;: &amp;quot;Hello from lambda&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== JavaScript (Node.js) с OpenTelemetry ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
const opentelemetry = require(&amp;#039;@opentelemetry/api&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
function dtLog(msg) {&lt;br /&gt;
  const spanContext = opentelemetry.trace.getSpanContext(opentelemetry.context.active()) ?? opentelemetry.INVALID_SPAN_CONTEXT;&lt;br /&gt;
  console.log(`[!dt dt.trace_id=${spanContext.traceId}, dt.span_id=${spanContext.spanId}] - ${msg}`);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
exports.handler = function(event, context) {&lt;br /&gt;
  const msg = &amp;quot;Hello World&amp;quot;&lt;br /&gt;
  dtLog(msg);&lt;br /&gt;
  context.success({&lt;br /&gt;
    statusCode: 200,&lt;br /&gt;
    body: msg&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Java с OpenTelemetry ==&lt;br /&gt;
В приведенном ниже примере создан метод &amp;lt;code&amp;gt;dtLog&amp;lt;/code&amp;gt; для обогащения заданного сообщения журнала информацией &amp;lt;code&amp;gt;TraceId&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;SpanId&amp;lt;/code&amp;gt;. Вывод этого обогащенного сообщения с помощью &amp;lt;code&amp;gt;System.out&amp;lt;/code&amp;gt; связывает сообщение журнала с текущим активным сегментом в веб-интерфейсе Ключ-АСТРОМ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package com.amazonaws.lambda.demo;&lt;br /&gt;
&lt;br /&gt;
import com.amazonaws.services.lambda.runtime.Context;&lt;br /&gt;
import com.amazonaws.services.lambda.runtime.RequestHandler;&lt;br /&gt;
import io.opentelemetry.api.trace.Span;&lt;br /&gt;
import io.opentelemetry.api.trace.SpanContext;&lt;br /&gt;
&lt;br /&gt;
public class HelloJava implements RequestHandler&amp;lt;Object, String&amp;gt; {&lt;br /&gt;
&lt;br /&gt;
  private static void dtLog(final String msg) {&lt;br /&gt;
    SpanContext spanContext = Span.current().getSpanContext();&lt;br /&gt;
    System.out.printf(&lt;br /&gt;
      &amp;quot;[!dt dt.trace_id=%s,dt.span_id=%s] - %s%n&amp;quot;,&lt;br /&gt;
      spanContext.getTraceId(),&lt;br /&gt;
      spanContext.getSpanId(),&lt;br /&gt;
      msg&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  @Override&lt;br /&gt;
  public String handleRequest(Object input, Context context) {&lt;br /&gt;
    String msg = &amp;quot;Hello World&amp;quot;;&lt;br /&gt;
    dtLog(msg);&lt;br /&gt;
    return msg;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Используйте SDK ЕдиногоАгента (Go) ==&lt;br /&gt;
В приведенном ниже примере обработчик &amp;#039;&amp;#039;&amp;#039;HTTP&amp;#039;&amp;#039;&amp;#039; использует &amp;lt;code&amp;gt;Printf()&amp;lt;/code&amp;gt; для вывода ответа в стандартный поток вывода и дополняет эту информацию идентификаторами трассировки и сегмента, полученными из &amp;lt;code&amp;gt;oneagentsdk.GetTraceContextInfo()&amp;lt;/code&amp;gt;. Вывод этого дополненного сообщения связывает сообщение журнала с текущим активным сегментом в веб-интерфейсе Ключ-АСТРОМ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package main&lt;br /&gt;
&lt;br /&gt;
import (&lt;br /&gt;
  &amp;quot;fmt&amp;quot;&lt;br /&gt;
  &amp;quot;log&amp;quot;&lt;br /&gt;
  &amp;quot;net/http&amp;quot;&lt;br /&gt;
  &amp;quot;github.com/astromkey/OneAgent-SDK-for-Go/sdk&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
func main() {&lt;br /&gt;
  // Создание экземпляра API OneAgent SDK&lt;br /&gt;
  var oneagentsdk = sdk.CreateInstance()&lt;br /&gt;
&lt;br /&gt;
  http.HandleFunc(&amp;quot;/&amp;quot;, func(w http.ResponseWriter, _ *http.Request) {&lt;br /&gt;
    // Получить TraceContextInfo из входящего HTTP-запроса&lt;br /&gt;
    // для получения идентификатора трассировки (Trace ID) и идентификатора трассировки (Span ID) активного контекста распределенной трассировки&lt;br /&gt;
    traceContext := oneagentsdk.GetTraceContextInfo()&lt;br /&gt;
&lt;br /&gt;
    msg := &amp;quot;Hello World&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    // Вывести в консоль&lt;br /&gt;
    fmt.Printf(&amp;quot;[!dt dt.trace_id=%s,dt.span_id=%s] - %s\n&amp;quot;, traceContext.GetTraceId(), traceContext.GetSpanId(), msg)&lt;br /&gt;
&lt;br /&gt;
    // Запись HTTP-тела&lt;br /&gt;
    fmt.Fprintf(w, msg)&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  fmt.Println(&amp;quot;Запуск HTTP-сервера на порту 8080...&amp;quot;)&lt;br /&gt;
  log.Fatal(http.ListenAndServe(&amp;quot;:8080&amp;quot;, nil))&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Получить идентификатор экземпляра группы процессов =&lt;br /&gt;
&lt;br /&gt;
Получить поле &amp;lt;code&amp;gt;dt.entity.process_group_instance&amp;lt;/code&amp;gt; можно с помощью команды &amp;#039;&amp;#039;&amp;#039;Python OpenTelemetry&amp;#039;&amp;#039;&amp;#039;, содержащей &amp;lt;code&amp;gt;merged&amp;lt;/code&amp;gt;. Значение &amp;lt;code&amp;gt;process_group_instance&amp;lt;/code&amp;gt; получается в виде одного из атрибутов, предоставляемых в &amp;lt;code&amp;gt;merged&amp;lt;/code&amp;gt;, как показано в примере ниже.&lt;br /&gt;
&lt;br /&gt;
С помощью ЕдиногоАгента вы можете просто указать локальную конечную точку без токена аутентификации, чтобы включить сбор трассировочных данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import json&lt;br /&gt;
&lt;br /&gt;
from opentelemetry import trace as OpenTelemetry&lt;br /&gt;
from opentelemetry.exporter.otlp.proto.http.trace_exporter import (&lt;br /&gt;
    OTLPSpanExporter,&lt;br /&gt;
)&lt;br /&gt;
from opentelemetry.sdk.resources import Resource&lt;br /&gt;
from opentelemetry.sdk.trace import TracerProvider, sampling&lt;br /&gt;
from opentelemetry.sdk.trace.export import (&lt;br /&gt;
    BatchSpanProcessor,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
merged = dict()&lt;br /&gt;
for name in [&amp;quot;dt_metadata_e617c525669e072eebe3d0f08212e8f2.json&amp;quot;, &amp;quot;/var/lib/astromkey/enrichment/dt_metadata.json&amp;quot;]:&lt;br /&gt;
    try:&lt;br /&gt;
        data = &amp;#039;&amp;#039;&lt;br /&gt;
        with open(name) as f:&lt;br /&gt;
          data = json.load(f if name.startswith(&amp;quot;/var&amp;quot;) else open(f.read()))&lt;br /&gt;
        merged.update(data)&lt;br /&gt;
    except:&lt;br /&gt;
        pass&lt;br /&gt;
&lt;br /&gt;
merged.update({&lt;br /&gt;
    &amp;quot;service.name&amp;quot;: &amp;quot;python-quickstart&amp;quot;, #TODO Замените на название вашего приложения&lt;br /&gt;
    &amp;quot;service.version&amp;quot;: &amp;quot;1.0.1&amp;quot;, #TODO Замените на версию вашего приложения&lt;br /&gt;
})&lt;br /&gt;
resource = Resource.create(merged)&lt;br /&gt;
&lt;br /&gt;
tracer_provider = TracerProvider(sampler=sampling.ALWAYS_ON, resource=resource)&lt;br /&gt;
OpenTelemetry.set_tracer_provider(tracer_provider)&lt;br /&gt;
&lt;br /&gt;
tracer_provider.add_span_processor(&lt;br /&gt;
    BatchSpanProcessor(OTLPSpanExporter(&lt;br /&gt;
        endpoint=&amp;quot;http://localhost:14499/otlp/v1/traces&amp;quot;&lt;br /&gt;
    ))&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При использовании ЕдиногоАгента обязательно включите общедоступный контроллер выполнения расширений в настройках Ключ-АСТРОМ, иначе данные отправляться не будут.&lt;br /&gt;
&lt;br /&gt;
Перейдите в &amp;#039;&amp;#039;&amp;#039;Настройки&amp;#039;&amp;#039;&amp;#039; &amp;gt; &amp;#039;&amp;#039;&amp;#039;Предпочтения&amp;#039;&amp;#039;&amp;#039; &amp;gt; &amp;#039;&amp;#039;&amp;#039;Контроллер выполнения расширений&amp;#039;&amp;#039;&amp;#039;. Переключатели &amp;#039;&amp;#039;&amp;#039;Включить контроллер выполнения расширений&amp;#039;&amp;#039;&amp;#039; и &amp;#039;&amp;#039;&amp;#039;Включить локальный API для сбора метрик PIPE/HTTP и логов&amp;#039;&amp;#039;&amp;#039; должны быть активны.&lt;/div&gt;</summary>
		<author><name>IKuznetsov</name></author>
	</entry>
</feed>