<?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%9C%D0%B0%D1%81%D1%88%D1%82%D0%B0%D0%B1%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_Collector</id>
	<title>Масштабирование Collector - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://doc.ruscomtech.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%B0%D1%81%D1%88%D1%82%D0%B0%D0%B1%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_Collector"/>
	<link rel="alternate" type="text/html" href="https://doc.ruscomtech.ru/index.php?title=%D0%9C%D0%B0%D1%81%D1%88%D1%82%D0%B0%D0%B1%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_Collector&amp;action=history"/>
	<updated>2026-09-16T15:07:34Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://doc.ruscomtech.ru/index.php?title=%D0%9C%D0%B0%D1%81%D1%88%D1%82%D0%B0%D0%B1%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_Collector&amp;diff=5843&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%9C%D0%B0%D1%81%D1%88%D1%82%D0%B0%D0%B1%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_Collector&amp;diff=5843&amp;oldid=prev"/>
		<updated>2025-10-08T22:28:08Z</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;Kubernetes&amp;#039;&amp;#039;&amp;#039;. Обратите внимание, что рекомендации и примеры в этой документации носят общий характер и могут не обеспечить оптимальной производительности в вашем конкретном случае; вам потребуется проанализировать свои системы, чтобы определить наилучший способ их масштабирования.&lt;br /&gt;
&lt;br /&gt;
Более общую информацию в документации &amp;#039;&amp;#039;&amp;#039;OpenTelemetry&amp;#039;&amp;#039;&amp;#039; можно найти на странице «[https://opentelemetry.io/docs/collector/scaling/ Масштабирование Collector]»﻿ на веб-сайте &amp;#039;&amp;#039;&amp;#039;OpenTelemetry&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== Определение того, когда следует масштабировать ==&lt;br /&gt;
Вам следует рассмотреть возможность масштабирования, когда вы приблизитесь к пределам ресурсов, выделенных вашему &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039;. Для отслеживания этого будут полезны метрики самоконтроля, доступные в &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039;, и метрики, доступные в среде хоста (например, &amp;#039;&amp;#039;&amp;#039;Kubernetes&amp;#039;&amp;#039;&amp;#039;). Подробнее о сборе этих данных см. на нашей странице, [[Самоконтроль OpenTelemetry Collector|посвященной самоконтролю &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039;]] . Ниже приведены несколько метрик, на которые стоит обратить внимание:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;otelcol_processor_refused_spans&amp;lt;/code&amp;gt;: Если у вас включен [https://github.com/open-telemetry/opentelemetry-collector/blob/v0.136.0/processor/memorylimiterprocessor процессор-ограничитель памяти]﻿, эта метрика (или эквивалент для других сигналов) будет указывать на то, что &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; требуется больше памяти для продолжения обработки текущей нагрузки.&lt;br /&gt;
* &amp;lt;code&amp;gt;otelcol_exporter_queue_capacity&amp;lt;/code&amp;gt;и &amp;lt;code&amp;gt;otelcol_exporter_queue_size&amp;lt;/code&amp;gt;: Когда размер очереди экспортера приближается к её ёмкости или превышает её, это означает, что у &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; возникают проблемы с отправкой данных на бэкенд. Это происходит либо из-за нехватки рабочих процессов для отправки данных, либо из-за перегрузки самого бэкенда. Возможно, вам потребуется увеличить вычислительную мощность &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; для продолжения обработки этого объёма данных.&lt;br /&gt;
* &amp;lt;code&amp;gt;k8s.resource_quota.used&amp;lt;/code&amp;gt;: Если вы отслеживаете свой кластер &amp;#039;&amp;#039;&amp;#039;Kubernetes&amp;#039;&amp;#039;&amp;#039; с помощью [https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.136.0/receiver/k8sclusterreceiver Kubernetes Cluster Receiver]﻿ , это можно использовать для определения объема квоты ЦП/памяти, используемой вашим &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
* &amp;lt;code&amp;gt;container.cpu.usage&amp;lt;/code&amp;gt;и &amp;lt;code&amp;gt;container.memory.usage&amp;lt;/code&amp;gt;: Если вы отслеживаете свой кластер с помощью [https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.136.0/receiver/kubeletstatsreceiver Kubelet Stats Receiver]﻿ , они могут сообщить вам, приближается ли конкретный контейнер &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; к пределам своей квоты или достигает их.&lt;br /&gt;
&lt;br /&gt;
== Масштабирование Collector ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Kubernetes&amp;#039;&amp;#039;&amp;#039; предоставляет несколько типов объектов, позволяющих масштабировать &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; в соответствии с потребностями конкретных сценариев. Для простого масштабирования можно использовать &amp;#039;&amp;#039;&amp;#039;Deployments&amp;#039;&amp;#039;&amp;#039; или &amp;#039;&amp;#039;&amp;#039;ReplicaSets&amp;#039;&amp;#039;&amp;#039;, чтобы создать пул &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039;, который &amp;#039;&amp;#039;&amp;#039;Kubernetes&amp;#039;&amp;#039;&amp;#039; может планировать без особых усилий. Более общую информацию об архитектурах развертывания &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; см. в нашем руководстве по [[Развертывание Collector|развертыванию Collector]].&lt;br /&gt;
&lt;br /&gt;
Большинство рекомендаций в этом документе относятся к горизонтальному масштабированию &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; путем создания дополнительных экземпляров &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; или распределения экземпляров по машинам. Однако, если в вашем текущем развертывании для выполнения всех вычислений используется один экземпляр &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039;, следует сначала определить, достаточно ли вертикального масштабирования &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; для ожидаемой нагрузки. Вертикальное масштабирование &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; имеет более низкие ограничения на объемы вычислительной мощности и памяти, которые можно выделить &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039;, но при этом оно проще. В &amp;#039;&amp;#039;&amp;#039;Kubernetes&amp;#039;&amp;#039;&amp;#039; это можно сделать, увеличив ограничения на процессор и память для пода &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
=== Масштабирование Collector без сохранения состояния ===&lt;br /&gt;
Масштабировать &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; без сохранения состояния сравнительно легко: поскольку неважно, какие данные передаются какому &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039;, решение о том, какому коллектору отправить полезную нагрузку, может быть принято независимо от содержимого данных. В результате любой стандартный балансировщик нагрузки для данного протокола передачи должен подойти.&lt;br /&gt;
&lt;br /&gt;
Самый простой способ балансировки нагрузки — использовать объект &amp;#039;&amp;#039;&amp;#039;Kubernetes&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;Service&amp;#039;&amp;#039;&amp;#039;, который указывает на несколько реплик пода &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039;, развёрнутого через любой стандартный тип рабочей нагрузки &amp;#039;&amp;#039;&amp;#039;Kubernetes&amp;#039;&amp;#039;&amp;#039;, такой как &amp;#039;&amp;#039;&amp;#039;Deployment&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;ReplicaSet&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;StatefulSet&amp;#039;&amp;#039;&amp;#039; или &amp;#039;&amp;#039;&amp;#039;DaemonSet&amp;#039;&amp;#039;&amp;#039;. Для кратковременных соединений это позволит распределить нагрузку между &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039;, доступными через службу, достаточно равномерно. Обратите внимание, что долговременные соединения, например, по &amp;#039;&amp;#039;&amp;#039;HTTP/2&amp;#039;&amp;#039;&amp;#039; или &amp;#039;&amp;#039;&amp;#039;gRPC&amp;#039;&amp;#039;&amp;#039;, будут поддерживать соединение с одним &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; и, следовательно, могут привести к неравномерному распределению нагрузки между &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
В более сложных случаях, таких как обработка подключений &amp;#039;&amp;#039;&amp;#039;gRPC&amp;#039;&amp;#039;&amp;#039;, служба с типом &amp;lt;code&amp;gt;LoadBalancer&amp;lt;/code&amp;gt; может обеспечить больший контроль над балансировкой нагрузки. Службы &amp;#039;&amp;#039;&amp;#039;LoadBalancer&amp;#039;&amp;#039;&amp;#039; могут использовать отдельный балансировщик нагрузки для определения того, к какому &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; будет направлено соединение. Сервисные сети, такие как &amp;#039;&amp;#039;&amp;#039;Istio&amp;#039;&amp;#039;&amp;#039; или &amp;#039;&amp;#039;&amp;#039;Linkerd&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; через &amp;#039;&amp;#039;&amp;#039;DaemonSet&amp;#039;&amp;#039;&amp;#039;, вы можете использовать объект &amp;#039;&amp;#039;&amp;#039;Service&amp;#039;&amp;#039;&amp;#039; со специальными настройками маршрутизации, чтобы отправлять данные только &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039;, работающим на том же узле, что и источник данных.&amp;#039;&amp;#039;&amp;#039;Kubernetes&amp;#039;&amp;#039;&amp;#039; версии &amp;#039;&amp;#039;&amp;#039;1.26+&amp;#039;&amp;#039;&amp;#039; это делается путем настройки службы на [https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/ прием только внутреннего трафика узла]﻿.&lt;br /&gt;
&lt;br /&gt;
=== Масштабирование обработки с сохранением состояния с использованием необъединенных Collector ===&lt;br /&gt;
При использовании &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; для обработки с отслеживанием состояния важно, чтобы одни и те же данные всегда отправлялись одному и тому же &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039;. Вы можете увеличить пропускную способность конвейера, продолжая следовать этому правилу, выбрав определённые &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; для обработки определённых данных. Это можно сделать, выбрав определённый шаблон развертывания для &amp;#039;&amp;#039;&amp;#039;Collector&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; &amp;#039;&amp;#039;&amp;#039;Sidecar&amp;#039;&amp;#039;&amp;#039; : если &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; развернут как вспомогательный объект и связан с приложением, то все данные из этого приложения пройдут через &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;Sidecar&amp;#039;&amp;#039;&amp;#039; и могут быть обработаны с помощью операций с отслеживанием состояния.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;DaemonSet Collectors&amp;#039;&amp;#039;&amp;#039; : агент &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039;, развёрнутый на узле &amp;#039;&amp;#039;&amp;#039;Kubernetes&amp;#039;&amp;#039;&amp;#039; (например, через &amp;#039;&amp;#039;&amp;#039;DaemonSet&amp;#039;&amp;#039;&amp;#039;), может использоваться для обработки с отслеживанием состояния, если приложение на узле всегда отправляет свои данные в &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039;. Обратите внимание, что это предполагает наличие только одного &amp;#039;&amp;#039;&amp;#039;Collector&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;Collector&amp;#039;&amp;#039;&amp;#039; : если вам нужно запустить только один &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; для заданного набора источников данных, этот &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; можно использовать для обработки с отслеживанием состояния, поскольку все данные будут проходить через один и тот же &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039;. Вы можете выбрать этот вариант, если решите отправлять определённый сигнал или данные из выбранного набора приложений на данный &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039;. Обратите внимание, что для обеспечения высокой доступности избыточные экземпляры &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; должны храниться в качестве резервных копий и не получать данные, пока первый &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; не выйдет из строя. Кроме того, обработка будет сброшена при активации избыточного &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
=== Масштабирование объединенных в пул Collector с отслеживанием состояния с помощью Load Balancing Exporter ===&lt;br /&gt;
Масштабирование горизонтально масштабируемого пула &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; с отслеживанием состояния, вероятно, потребует использования [https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/v0.136.0/exporter/loadbalancingexporter экспортера балансировки нагрузки (Load Balancing Exporter)]﻿. Экспортер балансировки нагрузки превращает &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;, позволяющий направлять данные на конкретный нижестоящий &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;
==== Процессоры с отслеживанием состояния ====&lt;br /&gt;
Вам следует рассмотреть возможность использования экспортера, если вы масштабируете данные и используете любой из следующих компонентов с отслеживанием состояния. Здесь мы рассматриваем только компоненты, входящие в состав Ключ-АСТРОМ &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039;, вам необходимо определить оптимальное значение по умолчанию для всех остальных используемых компонентов с отслеживанием состояния. Вы также можете настроить, какая часть данных будет использоваться для маршрутизации. Оптимальный ключ для использования зависит от вашего варианта использования, но ниже мы приводим рекомендации.&lt;br /&gt;
&lt;br /&gt;
* Накопительные данные для [https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.136.0/processor/cumulativetodeltaprocessor дельта-процессора]﻿ : точки данных для одной и той же метрики должны быть отправлены одному и тому же &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; за период сбора метрики &amp;lt;code&amp;gt;metric_name&amp;lt;/code&amp;gt;. Таким образом, ключ является подходящим значением по умолчанию для маршрутизации.&lt;br /&gt;
* Процессор [https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.136.0/processor/tailsamplingprocessor выборки хвоста]﻿ : Чтобы принять решение о выборке трассировки, процессор должен иметь возможность видеть все интервалы внутри трассировки. Следовательно, все интервалы должны быть отправлены одному и тому же &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039;, и для этого мы рекомендуем маршрутизацию по ключу &amp;lt;code&amp;gt;traceID&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Коннектор [https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.136.0/connector/spanmetricsconnector метрик Span]﻿ : Коннектору необходимо видеть все интервалы сервиса, чтобы выдавать метрики его производительности. Поэтому мы настоятельно рекомендуем маршрутизацию по ключу &amp;lt;code&amp;gt;service&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Настройка экспортера балансировки нагрузки ====&lt;br /&gt;
[https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/v0.136.0/exporter/loadbalancingexporter При настройке экспортера балансировки нагрузки]﻿ учитываются два важных элемента : &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;Collector&amp;#039;&amp;#039;&amp;#039; в пуле.&lt;br /&gt;
&lt;br /&gt;
Настройка ключа маршрутизации осуществляется путем установки параметра &amp;lt;code&amp;gt;routing_key&amp;lt;/code&amp;gt;. Значения по умолчанию для каждого сигнала:&lt;br /&gt;
&lt;br /&gt;
* Трассировки: &amp;lt;code&amp;gt;traceID&amp;lt;/code&amp;gt;&lt;br /&gt;
* Метрики: &amp;lt;code&amp;gt;service&amp;lt;/code&amp;gt;&lt;br /&gt;
* Логи: &amp;lt;code&amp;gt;traceID&amp;lt;/code&amp;gt; если есть, в противном случае — случайный идентификатор трассировки. Параметр &amp;lt;code&amp;gt;routing_key&amp;lt;/code&amp;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;
Другой важный параметр конфигурации — это ключ &amp;lt;code&amp;gt;resolver&amp;lt;/code&amp;gt;, который используется экспортером для определения доступных для пересылки данных &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039;. В &amp;#039;&amp;#039;&amp;#039;Kubernetes&amp;#039;&amp;#039;&amp;#039; мы рекомендуем использовать резольвер &amp;lt;code&amp;gt;k8s&amp;lt;/code&amp;gt;, поскольку он является нативным для &amp;#039;&amp;#039;&amp;#039;Kubernetes&amp;#039;&amp;#039;&amp;#039;. В частности, он поддерживает динамическое обновление пула в зависимости от запущенных подов &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; и добавляет или удаляет &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; при изменении количества реплик. Он также удаляет &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039;, которые становятся неработоспособными, обеспечивая выполнение требований высокой доступности, если повторные попытки также настроены с помощью параметра &amp;lt;code&amp;gt;retry_on_failure&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Устойчивость ====&lt;br /&gt;
Экспортер балансировки нагрузки предоставляет функции обеспечения отказоустойчивости, помогающие снизить риск потери данных. Эти функции предназначены как для решения проблем с изменяющимся количеством нижестоящих &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039;, так и для решения проблем с отправкой данных конкретному &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/exporter/loadbalancingexporter#resilience-and-scaling-considerations В документации по вышестоящей системе]﻿ эти функции подробно описаны и объясняется, как и когда их использовать.&lt;br /&gt;
&lt;br /&gt;
==== Масштабирование балансировщика нагрузки Collector ====&lt;br /&gt;
Поскольку экспортер балансировки нагрузки использует детерминированный хеш для определения, какому нижестоящему &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; отправлять данные, коллекторы с балансировкой нагрузки можно считать не сохраняющими состояние и, следовательно, масштабировать с помощью подходов, описанных в разделе «&amp;#039;&amp;#039;&amp;#039;Масштабирование&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;Collector&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; &amp;#039;&amp;#039;&amp;#039;состояния&amp;#039;&amp;#039;&amp;#039;». Обратите внимание: если резолвер для &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; с балансировкой нагрузки обновляет свои нижестоящие пулы в разное время, это может привести к тому, что данные, предназначенные для одного &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039;, будут мгновенно отправлены нескольким.&lt;br /&gt;
&lt;br /&gt;
== Демо конфигурация ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|extensions:&lt;br /&gt;
&lt;br /&gt;
  health_check:&lt;br /&gt;
&lt;br /&gt;
    endpoint: 0.0.0.0:13133&lt;br /&gt;
&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;
exporters:&lt;br /&gt;
&lt;br /&gt;
  loadbalancing/traces:&lt;br /&gt;
&lt;br /&gt;
    protocol:&lt;br /&gt;
&lt;br /&gt;
      otlp:&lt;br /&gt;
&lt;br /&gt;
    resolver:&lt;br /&gt;
&lt;br /&gt;
      k8s:&lt;br /&gt;
&lt;br /&gt;
        service: traces-receiver.default&lt;br /&gt;
&lt;br /&gt;
        ports:&lt;br /&gt;
&lt;br /&gt;
          - 4317&lt;br /&gt;
&lt;br /&gt;
  loadbalancing/logs:&lt;br /&gt;
&lt;br /&gt;
    protocol:&lt;br /&gt;
&lt;br /&gt;
      otlp:&lt;br /&gt;
&lt;br /&gt;
    resolver:&lt;br /&gt;
&lt;br /&gt;
      k8s:&lt;br /&gt;
&lt;br /&gt;
        service: logs-receiver.default&lt;br /&gt;
&lt;br /&gt;
        ports:&lt;br /&gt;
&lt;br /&gt;
          - 4317&lt;br /&gt;
&lt;br /&gt;
  loadbalancing/metrics:&lt;br /&gt;
&lt;br /&gt;
    retry_on_failure:&lt;br /&gt;
&lt;br /&gt;
      enabled: true&lt;br /&gt;
&lt;br /&gt;
      initial_interval: 5s&lt;br /&gt;
&lt;br /&gt;
      max_interval: 30s&lt;br /&gt;
&lt;br /&gt;
      max_elapsed_time: 300s&lt;br /&gt;
&lt;br /&gt;
    sending_queue:&lt;br /&gt;
&lt;br /&gt;
      enabled: true&lt;br /&gt;
&lt;br /&gt;
      num_consumers: 10&lt;br /&gt;
&lt;br /&gt;
      queue_size: 1000&lt;br /&gt;
&lt;br /&gt;
      sizer: requests&lt;br /&gt;
&lt;br /&gt;
    protocol:&lt;br /&gt;
&lt;br /&gt;
      otlp:&lt;br /&gt;
&lt;br /&gt;
    resolver:&lt;br /&gt;
&lt;br /&gt;
      k8s:&lt;br /&gt;
&lt;br /&gt;
        service: metrics-receiver.default&lt;br /&gt;
&lt;br /&gt;
        ports:&lt;br /&gt;
&lt;br /&gt;
          - 4317&lt;br /&gt;
&lt;br /&gt;
service:&lt;br /&gt;
&lt;br /&gt;
  extensions: [health_check]&lt;br /&gt;
&lt;br /&gt;
  pipelines:&lt;br /&gt;
&lt;br /&gt;
    metrics:&lt;br /&gt;
&lt;br /&gt;
      receivers: [otlp]&lt;br /&gt;
&lt;br /&gt;
      processors: []&lt;br /&gt;
&lt;br /&gt;
      exporters:&lt;br /&gt;
&lt;br /&gt;
        - loadbalancing/metrics&lt;br /&gt;
&lt;br /&gt;
    traces:&lt;br /&gt;
&lt;br /&gt;
      receivers: [otlp]&lt;br /&gt;
&lt;br /&gt;
      processors: []&lt;br /&gt;
&lt;br /&gt;
      exporters:&lt;br /&gt;
&lt;br /&gt;
        - loadbalancing/traces&lt;br /&gt;
&lt;br /&gt;
    logs:&lt;br /&gt;
&lt;br /&gt;
      receivers: [otlp]&lt;br /&gt;
&lt;br /&gt;
      processors: []&lt;br /&gt;
&lt;br /&gt;
      exporters:&lt;br /&gt;
&lt;br /&gt;
        - loadbalancing/logs&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; мы настраиваем [https://github.com/open-telemetry/opentelemetry-collector/tree/v0.136.0/receiver/otlpreceiver приемник﻿ &amp;lt;code&amp;gt;otlp&amp;lt;/code&amp;gt;] для получения данных по &amp;#039;&amp;#039;&amp;#039;gRPC&amp;#039;&amp;#039;&amp;#039; и &amp;#039;&amp;#039;&amp;#039;HTTP&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
=== Экспортеры ===&lt;br /&gt;
В разделе &amp;lt;code&amp;gt;exporters&amp;lt;/code&amp;gt; мы настраиваем три &amp;lt;code&amp;gt;[https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/v0.136.0/exporter/loadbalancingexporter loadbalancing exporters]&amp;lt;/code&amp;gt;, по одному для каждого сигнала. Все экспортёры настроены на использование резолвера &amp;lt;code&amp;gt;k8s&amp;lt;/code&amp;gt;, который использует сервис &amp;#039;&amp;#039;&amp;#039;Kubernetes&amp;#039;&amp;#039;&amp;#039; для определения пула &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; для отправки данных. Одна из причин разделения дальнейшей обработки по сигналам заключается в том, что каждый сигнал, вероятно, получает разный объём трафика: например, вы можете получать большой объём логов, несколько трассировок и относительно мало метрик. Поэтому желательно, чтобы пул &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039;, обрабатывающий логи, был больше пула, обрабатывающего метрики; выделение дополнительных &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; для обработки меньшего количества метрик может привести к непроизводительному расходу ресурсов.﻿&lt;br /&gt;
&lt;br /&gt;
=== Сервисные контейнеры ===&lt;br /&gt;
В наших контейнерах мы получаем данные по протоколу &amp;#039;&amp;#039;&amp;#039;OTLP&amp;#039;&amp;#039;&amp;#039; и экспортируем их через &amp;#039;&amp;#039;&amp;#039;Load&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;Balancing&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;Exporter&amp;#039;&amp;#039;&amp;#039; для конкретного сигнала, не выполняя никакой дополнительной обработки. Поскольку этот &amp;#039;&amp;#039;&amp;#039;Collector&amp;#039;&amp;#039;&amp;#039; предназначен исключительно для балансировки нагрузки, мы хотим выполнять как можно меньше обработки, чтобы он мог обработать как можно больше данных.&lt;/div&gt;</summary>
		<author><name>IKuznetsov</name></author>
	</entry>
</feed>