Настройка OpenTelemetry Collector
Содержание
Обзор возможностейСтруктура конфигурацииReceiversOTLP ReceiverJaeger ReceiverZipkin ReceiverProcessorsBatch ProcessorMemory Limiter ProcessorFilter ProcessorMetrics Transform ProcessorTransform ProcessorРасширенные возможностиExportersOTLP ExporterOTLP HTTP ExporterDebug ExporterLoad Balancing ExporterPrometheus ExporterConnectorsASM Service Graph ConnectorExtensionsService SectionДополнительная информацияПеременные окруженияПоддержка проксиАутентификацияНастройка сертификатовПереопределение настроекОбзор возможностей
Вы можете настроить OpenTelemetry Collector в соответствии с вашими требованиями к наблюдаемости. Прежде чем углубляться в работу с конфигурацией Collector, важно ознакомиться со следующим:
- Концепции сбора данных для понимания репозитория, применимого к OpenTelemetry Collector.
- Руководство по безопасности.
Структура конфигурации
Структура любого файла конфигурации Collector состоит из четырёх типов компонентов конвейера, которые взаимодействуют с телеметрическими данными:
После настройки каждого компонента конвейера необходимо включить его через конвейер, определённый в service section файла конфигурации.
Помимо компонентов конвейера, вы можете настроить Extensions, которые предоставляют дополнительные функции, которые можно добавить в Collector, например, диагностические инструменты. Extensions не требуют прямого доступа к телеметрическим данным и включаются через service section.
Ниже приведён пример конфигурации Collector, включающей receivers, processors, exporters и три расширения.
Важное замечание: Хотя обычно конечные точки привязываются к localhost, когда все клиенты локальные, в нашем примере конфигурации для удобства используется "неуточнённый" адрес 0.0.0.0. В настоящее время Collector по умолчанию использует localhost. Для подробной информации о значениях конфигурации конечных точек смотрите Меры безопасности для предотвращения атак типа отказ в обслуживании.
Обратите внимание, что receivers, processors, exporters и pipelines определяются с помощью идентификатора компонента в формате type[/name], например, otlp или otlp/2. Пока идентификатор уникален, вы можете определить один и тот же тип компонента несколько раз. Например:
Конфигурация также может включать другие файлы, позволяя Collector объединять их в единую YAML-конфигурацию в памяти:
Файл exporters.yaml может содержать:
В результате получится следующая конфигурация в памяти:
Receivers
Receivers собирают телеметрические данные из одного или нескольких источников. Они могут быть как pull-, так и push-ориентированными и могут поддерживать один или несколько источников данных.
Обычно receiver принимает данные в определённом формате, преобразует их во внутренний формат и затем передаёт их процессорам и экспортерам, определённым в соответствующем конвейере.
Receivers настраиваются в разделе receivers. По умолчанию receivers не настроены. Необходимо настроить один или несколько receivers. Многие receivers имеют настройки по умолчанию, поэтому достаточно указать имя receiver. Если требуется кастомизация или изменение настроек по умолчанию, это можно сделать в данном разделе. Любые указанные настройки переопределят значения по умолчанию (если они есть).
Примечание: Настройка receiver не включает его. Receiver включается добавлением его в соответствующий конвейер в service section.
Ниже приведены примеры конфигурации распространённых receivers.
Совет: Для более подробных конфигураций receivers смотрите README receivers.
OTLP Receiver
OTLP receiver принимает трассы, метрики и логи с использованием OpenTelemetry Protocol (OTLP).
Пример YAML
Описание параметров protocols
Jaeger Receiver
Jaeger receiver принимает трассы в формате Jaeger.
Пример YAML
Описание параметров protocols
Zipkin Receiver
Zipkin receiver принимает трассы в форматах Zipkin v1 и v2.
Пример YAML
Описание параметров zipkin
Processors
Processors изменяют или преобразуют данные, собранные receivers, перед отправкой их экспортерам. Обработка данных основана на правилах или настройках, определённых для каждого процессора, которые могут включать фильтрацию, удаление, переименование или перерасчёт телеметрических данных. Порядок процессоров в конвейере определяет последовательность применения операций обработки Collector.
Processors являются необязательными, но некоторые из них рекомендуются.
Processors настраиваются в разделе processors файла конфигурации Collector. Любые указанные настройки переопределяют значения по умолчанию (если они есть).
Примечание: Настройка процессора не включает его. Процессор должен быть включён добавлением в соответствующий конвейер в service section. По умолчанию процессоры не включены.
Ниже приведены примеры распространённых конфигураций процессоров.
Совет: Полный список процессоров можно получить, объединив списки из opentelemetry-collector-contrib и opentelemetry-collector. Для более подробных конфигураций смотрите README processors.
Batch Processor
Batch Processor группирует и сжимает спаны, метрики или логи по размеру или времени. Группировка помогает уменьшить количество запросов, отправляемых экспортерами, и регулировать поток телеметрии от нескольких или одного receiver в конвейере.
Пример YAML
Описание параметров batch
Memory Limiter Processor
Memory Limiter Processor периодически проверяет использование памяти Collector и при достижении мягкого лимита памяти приостанавливает обработку данных, предотвращая ситуации нехватки памяти. Этот процессор поддерживает спаны, метрики и логи. Обычно он является первым компонентом после receivers, ожидая повторных попыток отправки тех же данных и, возможно, применяя обратное давление к входящим данным. При превышении жёсткого лимита памяти Memory Limiter Processor инициирует сборку мусора.
Пример YAML
Описание параметров memory_limiter
Filter Processor
Filter Processor фильтрует спаны, метрики или логи на основе условий, заданных в конфигурации. Типичный сценарий использования — отбрасывать телеметрию, не относящуюся к системе наблюдаемости, например, некритичные логи или спаны, чтобы уменьшить шум в данных.
Фильтрация работает с белыми и чёрными списками, которые включают или исключают телеметрию на основе регулярных выражений и атрибутов ресурсов. Также можно использовать OpenTelemetry Transformation Language (OTTL) для более точного описания сигналов, которые нужно фильтровать. Процессор поддерживает все типы конвейеров.
Пример YAML
Описание параметров filter/ottl
Metrics Transform Processor
Metrics Transform Processor имеет некоторые общие функции с Attributes Processor и обычно используется для следующих задач:
- Добавление, переименование или удаление ключей и значений меток.
- Масштабирование и агрегация метрик на основе меток или значений меток.
- Процессор поддерживает только переименование и агрегацию в пределах одной партии метрик. Он не выполняет агрегацию между партиями, поэтому не используйте его для агрегации метрик из нескольких источников, например, нескольких узлов или клиентов.
Полный список поддерживаемых операций см. в разделе Available Operations.
Пример YAML
Процессор Metrics Transform также поддерживает использование регулярных выражений, позволяя применять правила трансформации к нескольким именам метрик или меткам одновременно. Следующий пример переименовывает cluster_name в cluster-name во всех метриках:
Доступные операции
Процессор может выполнять следующие операции:
- Переименование метрик. Например, переименование
system.cpu.usageвsystem.cpu.usage_time. - Добавление меток. Например, добавление новой метки
identifierсо значением1ко всем точкам. - Переименование ключей меток. Например, переименование метки
stateвcpu_state. - Переименование значений меток. Например, переименование значения
idleв-в меткеstate. - Удаление точек данных. Например, удаление всех точек, где метка
stateимеет значениеidle. - Изменение типа данных. Можно преобразовать точки данных типа
intвdouble. - Масштабирование значений. Например, умножение значений на 1000 для преобразования из секунд в миллисекунды.
- Агрегация по наборам меток. Например, сохранение только метки
stateи усреднение всех точек с одинаковым значением этой метки. - Агрегация по значениям меток. Например, суммирование точек с значениями
userилиsystemв меткеstateкакused = user + system.
Применяются следующие правила:
- Операции можно применять только к одной или нескольким метрикам с фильтром
strictилиregexp. - С помощью свойства
actionможно:- Обновлять метрики на месте (
update). - Дублировать и обновлять дубликаты (
insert). - Объединять метрики в новую метрику, вставленную в конфигурацию, слиянием всех точек данных из набора совпадающих метрик в одну метрику (
combine). Исходные метрики удаляются.
- Обновлять метрики на месте (
- При переименовании метрик группы захвата в фильтре
regexpбудут расширены.
Transform Processor
Transform Processor изменяет совпадающие спаны, метрики или логи с помощью операторов. Сценарии использования включают, но не ограничиваются, преобразованием типов метрик, заменой или удалением ключей и установкой полей на основе предопределённых условий.
Операторы — это функции на OpenTelemetry Transformation Language (OTTL), которые применяются к телеметрии в порядке их перечисления. Transform Processor включает дополнительные функции для преобразования типов метрик. Операторы трансформируют данные согласно контексту OTTL, который вы определяете, например, Span или DataPoint.
Поддерживаемые контексты для transform processor:
Операторы могут трансформировать телеметрику более высокого контекста. Например, оператор, применённый к точке данных, может получить доступ к метрике и ресурсу этой точки данных. Низшие контексты недоступны; например, оператор span не может трансформировать отдельные события span. Обычно операторы ассоциируются с контекстом, который нужно трансформировать.
Пример использования transform processor для установки статуса спана. Следующий пример устанавливает статус спана в Ok, когда атрибут http.request.status_code равен 400:
Пример YAML
Поле error_mode описывает, как процессор реагирует на ошибки при обработке операторов:
"error_mode: ignore"— процессор игнорирует ошибки и продолжает выполнение. Это режим по умолчанию."error_mode: propagate"— процессор возвращает ошибку. В результате Collector отбрасывает данные.
Расширенные возможности
- Вы также можете использовать transform processor для изменения имён спанов на основе атрибутов спана или извлечения атрибутов из имени спана. Примеры смотрите в примерном файле конфигурации transform processor.
- Transform processor также предлагает расширенные возможности трансформации атрибутов. Он позволяет конечным пользователям задавать трансформации для метрик, логов и трасс с использованием OpenTelemetry Transformation Language (OTTL).
- Для дополнительной информации о функциях и синтаксисе OTTL смотрите:
- Синтаксис OTTL: https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/pkg/ottl/README.md
- Функции OTTL: https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/pkg/ottl/ottlfuncs
- Контексты OTTL: https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/pkg/ottl/contexts
Exporters
Exporters отправляют данные в один или несколько бекендов или назначений. Exporters могут быть pull- или push-ориентированными и могут поддерживать один или несколько источников данных.
Exporters настраиваются в разделе exporters файла конфигурации Collector. Большинство exporters требуют как минимум указания назначения и настроек безопасности, таких как токены аутентификации или TLS-сертификаты. Любые указанные настройки переопределяют значения по умолчанию (если они есть).
Примечание: Настройка exporter не включает его. Exporter должен быть включён добавлением в соответствующий конвейер в service section. По умолчанию exporters не включены.
Collector требует наличия одного или нескольких exporters. Ниже приведены распространённые примеры конфигураций exporters:
Совет: Некоторые exporters требуют x.509 сертификаты для установления защищённого соединения, как описано в Настройке сертификатов. Для более подробных конфигураций смотрите README exporters.
OTLP Exporter
OTLP exporter отправляет метрики, трассы и логи в формате OTLP по gRPC. Поддерживаемые типы конвейеров: спаны, метрики и логи. По умолчанию этот exporter требует TLS и поддерживает повторные попытки с очередью. Для отправки OTLP данных по HTTP используйте OTLP/HTTP exporter. Инструкции смотрите в разделе OTLP/HTTP exporter.
Пример YAML
Описание параметров otlp
OTLP HTTP Exporter
OTLP HTTP Exporter экспортирует трассы и метрики с использованием OpenTelemetry Protocol (OTLP).
Пример YAML
Описание параметров otlphttp
Debug Exporter
Debug Exporter выводит телеметрические данные в консоль для целей отладки.
Пример YAML
Поле debug.verbosity контролирует уровень детализации логируемых экспортов (detailed|normal|basic). При значении detailed данные конвейера логируются подробно.
Load Balancing Exporter
Load Balancing Exporter может экспортировать спаны, метрики и логи в несколько бекендов. Поддерживаемые типы конвейеров: метрики, спаны и логи. Load Balancing Exporter может использовать политики маршрутизации для отправки телеметрии в несколько бекендов одновременно. Вы можете настроить routing_key для классификации телеметрии в группы и сопоставления этих групп с конкретными конечными точками.
С помощью Load Balancing Exporter можно также отправлять данные другим запущенным экземплярам OpenTelemetry Collector через collector endpoints. Например, можно отправлять все трассы одному экземпляру Collector, а все логи — другому. Это позволяет обрабатывать или изменять данные в разных окружениях Collector.
Пример YAML
Описание параметров loadbalancing
Prometheus Exporter
Prometheus Exporter экспортирует метрики в формате Prometheus или OpenMetrics, позволяя серверам Prometheus собирать данные. Ниже приведены детали настройки и использования Prometheus Exporter.
Обязательная настройка
- endpoint: Указывает адрес для экспонирования метрик с путём
/metrics. Обязателен к настройке, значения по умолчанию нет.
Необязательная настройка
- const_labels: Пары ключ-значение меток, применяемые к каждой экспортируемой метрике, по умолчанию не установлены.
- namespace: Если задан, все экспортируемые метрики будут использовать этот namespace, значения по умолчанию нет.
- send_timestamps: Отправлять ли временные метки для образцов метрик в ответе, по умолчанию
false. - metric_expiration: Время, в течение которого метрики экспонируются без обновлений, по умолчанию
5m. - resource_to_telemetry_conversion:
enabled: По умолчаниюfalse. При включении атрибуты ресурса конвертируются в метки метрик.
- enable_open_metrics: По умолчанию
false. При включении метрики экспортируются в формате OpenMetrics. - add_metric_suffixes: По умолчанию
true. Добавлять ли суффиксы типа и единиц измерения.
Настройка TLS
TLS-сертификаты можно задать с помощью ca_file, cert_file и key_file для обеспечения защищённой связи.
Пример YAML конфигурации
Ниже пример конфигурации Prometheus Exporter:
Эта конфигурация экспонирует метрики Prometheus по адресу 0.0.0.0:8889/metrics и настраивает TLS-сертификаты и другие параметры.
Рекомендации по использованию
- В OpenTelemetry имена метрик и меток стандартизированы для соответствия соглашениям именования Prometheus.
- По умолчанию атрибуты ресурса добавляются в метрику
target_info. Вы можете использовать запросы Prometheus для выбора и группировки этих атрибутов как меток метрик. - Для упрощения запросов и группировок рекомендуется использовать
transform processorдля прямого преобразования часто используемых атрибутов ресурса в метки метрик.
Connectors
Connectors связывают два конвейера, выступая одновременно как exporters и receivers. Connector потребляет данные как exporter в конце одного конвейера и отправляет данные как receiver в начале другого. Потребляемые и отправляемые данные могут быть одного или разных типов. Connectors можно использовать для агрегации, дублирования или маршрутизации данных.
Вы можете настроить один или несколько connectors в разделе connectors файла конфигурации Collector. По умолчанию connectors не настроены. Каждый тип connector предназначен для работы с комбинацией одного или нескольких типов данных и может использоваться только для соединения соответствующих типов конвейеров.
Примечание: Настройка connector не включает его. Connectors должны быть включены добавлением в соответствующие конвейеры в service section.
Совет: Для более подробной настройки connector смотрите README connector.
ASM Service Graph Connector
ASM Service Graph Connector строит карту, отображающую отношения между различными сервисами в системе. Этот connector анализирует данные спанов и генерирует метрики, описывающие отношения между сервисами. Эти метрики могут использоваться приложениями визуализации данных (например, Grafana) для построения графа сервисов.
Примечание: Этот компонент является кастомной версией community компонента Service Graph Connector и не может быть напрямую заменён нативным community компонентом. Конкретные различия параметров описаны ниже.
Топологии сервисов очень полезны во многих сценариях:
- Вывод топологии распределённой системы. По мере роста распределённых систем они становятся всё более сложными. Графы сервисов помогают понять структуру системы.
- Предоставление обзора состояния системы на высоком уровне. Графы сервисов отображают показатели ошибок, задержек и другую релевантную информацию.
- Предоставление исторического вида топологии системы. Распределённые системы часто меняются, и графы сервисов позволяют видеть эволюцию системы во времени.
Пример YAML
Описание параметров asmservicegraph
Extensions
Extensions добавляют возможности Collector. Например, расширения могут автоматически добавлять функции аутентификации к receivers и exporters.
Extensions — это необязательные компоненты, используемые для расширения функциональности Collector для задач, не связанных с обработкой телеметрии. Например, можно добавить расширения для мониторинга состояния, обнаружения сервисов или пересылки данных.
Extensions настраиваются в разделе extensions файла конфигурации Collector. Большинство расширений имеют настройки по умолчанию, поэтому достаточно указать имя расширения для его настройки. Любые указанные настройки переопределяют значения по умолчанию (если есть).
Примечание: Настройка extension не включает его. Extensions должны быть включены в service section. По умолчанию extensions не настроены.
Совет: Для более подробной настройки extension смотрите README extension.
Service Section
Раздел service используется для включения компонентов Collector на основе конфигурации в разделах receivers, processors, exporters и extensions. Если компонент настроен, но не определён в разделе service, он не будет включён.
Раздел service включает три подраздела:
-
Extensions: Список необходимых расширений для включения. Например:
-
Pipelines: Настройка конвейеров, которые могут иметь следующие типы:
- traces: Сбор и обработка данных трассировки.
- metrics: Сбор и обработка метрик.
- logs: Сбор и обработка логов.
Конвейер состоит из набора
receivers,processorsиexporters. Перед включениемreceiver,processorилиexporterв конвейер убедитесь, что его конфигурация определена в соответствующих разделах.Один и тот же
receiver,processorилиexporterможно использовать в нескольких конвейерах. При ссылке на процессор в нескольких конвейерах каждый конвейер получает отдельный экземпляр этого процессора.Пример конфигурации конвейеров. Обратите внимание, что порядок процессоров определяет последовательность обработки данных:
-
Telemetry: Раздел конфигурации
telemetryиспользуется для настройки наблюдаемости самого Collector. Состоит из подразделовlogsиmetrics. Информацию о настройке этих сигналов смотрите в Активации внутренней телеметрии в Collector.
Дополнительная информация
Переменные окружения
Конфигурации Collector поддерживают использование и расширение переменных окружения. Например, чтобы использовать значения из переменных окружения DB_KEY и OPERATION, можно написать:
Для представления литерального $ используйте $$. Например, чтобы представить $DataVisualization, можно написать:
Поддержка прокси
Exporters, использующие пакет net/http, поддерживают следующие переменные окружения прокси:
- HTTP_PROXY: Адрес HTTP-прокси.
- HTTPS_PROXY: Адрес HTTPS-прокси.
- NO_PROXY: Адреса, которые должны обходить прокси.
Если эти переменные установлены при запуске Collector, exporters будут проксировать или обходить прокси-трафик согласно этим переменным, независимо от протокола.
Аутентификация
Большинство receivers, открывающих HTTP или gRPC порты, могут быть защищены с помощью механизмов аутентификации Collector. Аналогично, большинство exporters, использующих HTTP или gRPC клиенты, могут добавлять аутентификацию к исходящим запросам.
Механизм аутентификации в Collector использует механизм расширений, позволяющий интегрировать кастомные аутентификаторы в дистрибутив Collector. Каждое расширение аутентификации может использоваться двумя способами:
- Как клиентский аутентификатор для
exporters, добавляющий данные аутентификации к исходящим запросам. - Как серверный аутентификатор для
receivers, аутентифицирующий входящие соединения.
Список известных аутентификаторов смотрите в Registry.
Чтобы добавить серверный аутентификатор к receiver в Collector, выполните следующие шаги:
- Добавьте расширение аутентификатора и его конфигурацию в
.extensions. - Добавьте ссылку на аутентификатор в
.services.extensions, чтобы Collector загрузил его. - Добавьте ссылку на аутентификатор в
.receivers.<your-receiver>.<http-or-grpc-config>.auth.
Следующий пример использует OIDC аутентификатор на стороне приёма, подходящий для удалённых Collectors, получающих данные через OpenTelemetry Collector в качестве прокси:
На стороне прокси этот пример настраивает OTLP exporter для получения OIDC токенов и добавления их к каждому RPC, отправляемому удалённому Collector:
Настройка сертификатов
Для защищённой связи в продуктивных средах используйте TLS-сертификаты или mTLS для взаимной аутентификации. Следуйте этим шагам для генерации самоподписанного сертификата или используйте вашего текущего поставщика сертификатов для продуктивных сертификатов.
Установите cfssl и создайте следующий файл csr.json:
Затем выполните команды:
Это создаст два сертификата:
- Центр сертификации (CA) с именем "OpenTelemetry Example", сохранённый в
ca.pem, с соответствующим ключом вca-key.pem. - Клиентский сертификат, сохранённый в
cert.pem, подписанный CA OpenTelemetry Example, с соответствующим ключом вcert-key.pem.
Переопределение настроек
Вы можете переопределять настройки Collector с помощью опции --set. Настройки, определённые таким образом, будут объединены в итоговую конфигурацию после разрешения и объединения всех источников --config.
Следующий пример показывает, как переопределить настройки в вложенных разделах:
Важное замечание: Опция --set не поддерживает установку ключей, содержащих точки (.) или знаки равенства (=).