Вы можете настроить OpenTelemetry Collector в соответствии с вашими потребностями в наблюдаемости. Прежде чем углубляться в работу конфигурации 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 собирают телеметрические данные из одного или нескольких источников. Они могут быть как pull-ориентированными, так и push-ориентированными и могут поддерживать один или несколько источников данных.
Обычно receiver принимает данные в заданном формате, преобразует их во внутренний формат и передаёт далее процессорам и экспортёрам, определённым в соответствующем конвейере.
Receivers настраиваются в разделе receivers
. По умолчанию receivers не настроены. Вы должны настроить один или несколько receivers. Многие receivers имеют настройки по умолчанию, поэтому может быть достаточно указать только имя receiver. Если необходимо изменить или настроить параметры по умолчанию, это можно сделать в этом разделе. Любые указанные параметры переопределят значения по умолчанию (если они есть).
Примечание: Настройка receiver не включает его. Receiver включается добавлением в соответствующий конвейер в service section.
Ниже приведены примеры распространённых конфигураций receivers.
Совет: Для более подробных конфигураций receivers смотрите receiver README.
OTLP receiver принимает трассы, метрики и логи с использованием OpenTelemetry Protocol (OTLP).
Пример YAML
Описание параметров protocols
Параметр | Описание |
---|---|
grpc.endpoint | OTLP gRPC конечная точка. Если не указано, по умолчанию 0.0.0.0:4317 . |
grpc.tls | Конфигурация TLS на стороне сервера. Определяет пути к TLS-сертификатам. Если не указано, TLS отключён. |
grpc.tls.client_ca_file | Путь к TLS-сертификату, используемому сервером для проверки клиентских сертификатов. Устанавливает ClientCAs и ClientAuth в RequireAndVerifyClientCert в TLSConfig. Подробнее см. Golang TLS Package Config. |
grpc.tls.reload_interval | Интервал перезагрузки сертификатов. Если не задан, сертификаты не перезагружаются. Поле reload_interval принимает строку с допустимыми единицами времени, такими как ns, us (или µs), ms, s, m, h. |
http.endpoint | OTLP HTTP конечная точка. По умолчанию 0.0.0.0:4318 . |
http.tls | Конфигурация TLS на стороне сервера. Настраивается аналогично grpc.tls . |
Jaeger receiver принимает трассы в формате Jaeger.
Пример YAML
Описание параметров protocols
Параметр | Описание |
---|---|
grpc.endpoint | Jaeger gRPC конечная точка. Если не указано, по умолчанию 0.0.0.0:14250 . |
thrift_http.endpoint | Jaeger Thrift HTTP конечная точка. Если не указано, по умолчанию 0.0.0.0:14268 . |
thrift_compact.endpoint | Jaeger Thrift Compact конечная точка. Если не указано, по умолчанию 0.0.0.0:6831 . |
thrift_binary.endpoint | Jaeger Thrift Binary конечная точка. Если не указано, по умолчанию 0.0.0.0:6832 . |
tls | Конфигурация TLS на стороне сервера. Смотрите параметры protocols.grpc.tls OTLP Receiver для деталей. |
Zipkin receiver принимает трассы в форматах Zipkin v1 и v2.
Пример YAML
Описание параметров zipkin
Параметр | Описание |
---|---|
endpoint | Zipkin HTTP конечная точка. Если не указано, по умолчанию 0.0.0.0:9411 . |
tls | Конфигурация TLS на стороне сервера. Смотрите параметры protocols.grpc.tls OTLP Receiver для деталей. |
Processors изменяют или преобразуют данные, собранные receivers, перед отправкой их экспортёрам. Обработка данных основана на правилах или настройках, определённых для каждого процессора, которые могут включать фильтрацию, удаление, переименование или перерасчёт телеметрических данных. Порядок процессоров в конвейере определяет последовательность применения операций обработки сигналов Collector.
Processors являются необязательными, но некоторые из них рекомендуются.
Вы можете настроить processors в разделе processors
файла конфигурации Collector. Любые указанные параметры переопределят значения по умолчанию (если они есть).
Примечание: Настройка процессора не включает его. Процессор должен быть включён добавлением в соответствующий конвейер в service section. По умолчанию процессоры не включены.
Ниже приведены примеры распространённых конфигураций процессоров.
Совет: Полный список процессоров можно получить, объединив списки из opentelemetry-collector-contrib и opentelemetry-collector. Для более подробных конфигураций процессоров смотрите processor README.
Batch Processor группирует и сжимает спаны, метрики или логи по размеру или времени. Группировка помогает уменьшить количество запросов на отправку, выполняемых экспортёрами, и регулирует поток телеметрии от нескольких или одного receiver в конвейере.
Пример YAML
Описание параметров batch
Параметр | Описание |
---|---|
timeout | Отправляет батчи после заданного времени, независимо от размера батча. |
send_batch_size | Отправляет батчи телеметрии после указанного количества спанов или метрик. |
send_batch_max_size | Максимально допустимый размер батча. Должен быть равен или больше send_batch_size . |
metadata_keys | При включении создаёт отдельный батч для каждого уникального набора значений из client.Metadata. |
metadata_cardinality_limit | При заполненном metadata_keys ограничивает количество различных комбинаций пар ключ-значение метаданных, обрабатываемых за время работы. |
Memory Limiter Processor периодически проверяет использование памяти Collector и при достижении мягкого лимита памяти приостанавливает обработку данных, предотвращая ситуации нехватки памяти. Этот процессор поддерживает спаны, метрики и логи. Обычно он является первым компонентом после receivers, ожидая повторных попыток отправки тех же данных и возможно применяя обратное давление к входящим данным. При превышении жёсткого лимита памяти Memory Limiter Processor инициирует сборку мусора.
Пример YAML
Описание параметров memory_limiter
Параметр | Описание |
---|---|
check_interval | Интервал между измерениями использования памяти. Оптимальное значение — 1 секунда. Для сильно изменяющихся нагрузок можно уменьшить check_interval или увеличить spike_limit_mib . |
limit_mib | Жёсткий лимит, максимальный объём памяти, выделенный в куче (в МиБ). Обычно общее использование памяти OpenTelemetry Collector примерно на 50 МиБ больше этого значения. |
spike_limit_mib | Лимит всплесков, ожидаемое максимальное значение пиков использования памяти (в МиБ). Оптимальное значение — около 20% от limit_mib . Мягкий лимит вычисляется как разница limit_mib и spike_limit_mib . |
limit_percentage | Аналогично limit_mib , но выражено в процентах от общего доступного объёма памяти. Настройка limit_mib имеет приоритет над этим параметром. |
spike_limit_percentage | Аналогично spike_limit_mib , но выражено в процентах от общего доступного объёма памяти. Предназначено для совместного использования с limit_percentage . |
Filter Processor фильтрует спаны, метрики или логи на основе условий, определённых в его конфигурации. Типичный сценарий использования — отбрасывать телеметрию, не относящуюся к системе наблюдаемости, например, некритичные логи или спаны, чтобы уменьшить шум в данных.
Фильтрация работает с белыми и чёрными списками, которые включают или исключают телеметрию на основе регулярных выражений и атрибутов ресурсов. Также можно использовать OpenTelemetry Transformation Language (OTTL) для более точного описания сигналов, которые нужно фильтровать. Процессор поддерживает все типы конвейеров.
Сигнал | Критерии и типы сопоставления |
---|---|
Spans | Условия OTTL, имена спанов (строгие или regex), атрибуты ресурсов (строгие или regex). Фильтрация событий спанов поддерживает только OTTL. |
Metrics | Условия OTTL, имена метрик (строгие или regex), атрибуты метрик (выражения). Фильтрация точек данных поддерживает только OTTL. |
Logs | Условия OTTL, атрибуты ресурсов (строгие или regex). |
Пример YAML
Описание параметров filter/ottl
Параметр | Описание |
---|---|
error_mode | Определяет режим обработки ошибок. При значении ignore ошибки, возвращаемые условиями, игнорируются. При propagate ошибки передаются на верхние уровни конвейера, что приведёт к потере нагрузки в Collector. |
span[0] | Фильтрует спаны с атрибутом container.name == app_container_1 . |
span[1] | Фильтрует спаны с атрибутом ресурса host.name == localhost . |
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
.state
и усреднение всех точек с одинаковым значением этой метки.user
или system
в метке state
как used = user + system
.Применяются следующие правила:
strict
или regexp
.action
можно:
update
).insert
).combine
). Исходные совпадающие метрики при этом удаляются.regexp
будут расширены.Transform Processor изменяет совпадающие спаны, метрики или логи с помощью операторов. Сценарии использования включают, но не ограничиваются, преобразованием типов метрик, заменой или удалением ключей, установкой полей на основе предопределённых условий.
Операторы — это функции в OpenTelemetry Transformation Language (OTTL), которые применяются к телеметрическим данным в порядке их перечисления. Transform processor включает дополнительные функции для преобразования типов метрик. Операторы преобразуют данные согласно контексту OTTL, который вы определяете, например, Span или DataPoint.
Поддерживаемые контексты для transform processor:
Сигнал | Поддерживаемые контексты |
---|---|
Traces | resource → scope → span → spanevent |
Metrics | resource → scope → metric → datapoint |
Logs | resource → scope → logs |
Операторы могут преобразовывать телеметрику более высокого уровня контекста. Например, оператор, применённый к точке данных, может обращаться к метрике и ресурсу этой точки данных. Доступ к более низким контекстам невозможен; например, оператор span не может преобразовывать отдельные события спана. Обычно операторы ассоциируются с контекстом, который нужно преобразовать.
Пример использования transform processor для установки статуса спана. Следующий пример устанавливает статус спана в Ok
, когда атрибут http.request.status_code
равен 400:
Пример YAML
Поле error_mode
описывает, как процессор реагирует на ошибки при обработке операторов:
"error_mode: ignore"
— процессор игнорирует ошибки и продолжает выполнение. Это режим по умолчанию."error_mode: propagate"
— процессор возвращает ошибку, в результате чего Collector отбрасывает данные.Exporters отправляют данные в один или несколько бекендов или назначений. Exporters могут быть pull- или push-ориентированными и могут поддерживать один или несколько источников данных.
Вы можете настроить exporters в разделе exporters
файла конфигурации Collector. Большинство exporters требуют как минимум указания назначения и настроек безопасности, таких как токены аутентификации или TLS-сертификаты. Любые указанные параметры переопределят значения по умолчанию (если они есть).
Примечание: Настройка exporter не включает его. Exporter должен быть включён добавлением в соответствующий конвейер в service section. По умолчанию exporters не включены.
Collector требует наличия одного или нескольких exporters. Ниже приведены распространённые примеры конфигураций exporters:
Совет: Некоторые exporters требуют x.509 сертификаты для установления защищённого соединения, как описано в Настройке сертификатов. Для более подробных конфигураций exporters смотрите exporter README.
OTLP exporter отправляет метрики, трассы и логи в формате OTLP по gRPC. Поддерживаемые типы конвейеров включают спаны, метрики и логи. По умолчанию этот exporter требует TLS и поддерживает функциональность повторных попыток с очередью. Для отправки OTLP данных по HTTP используйте OTLP/HTTP exporter. Инструкции смотрите в разделе OTLP/HTTP exporter.
Пример YAML
Описание параметров otlp
Параметр | Описание |
---|---|
endpoint | OTLP gRPC конечная точка. Если используется схема https:// , активируется клиентская транспортная безопасность и переопределяет настройки insecure в tls . |
tls | Клиентская конфигурация TLS. Определяет пути к TLS-сертификатам. |
tls.insecure | При значении true отключает клиентскую транспортную безопасность. По умолчанию false . |
tls.insecure_skip_verify | При значении true пропускает проверку сертификата. По умолчанию false . |
tls.reload_interval | Интервал перезагрузки сертификатов. Если не задан, сертификаты не перезагружаются. Принимает строку с допустимыми единицами времени, такими как ns , us (или µs ), ms , s , m , h . |
tls.server_name_override | Переопределяет авторитетное виртуальное имя хоста, например, поле заголовка authority в запросах. Может использоваться для тестирования. |
headers | Заголовки, отправляемые с каждым запросом в установленном соединении. |
OTLP HTTP Exporter экспортирует трассы и метрики с использованием OpenTelemetry Protocol (OTLP).
Пример YAML
Описание параметров otlphttp
Параметр | Описание |
---|---|
endpoint | OTLP HTTP конечная точка. Если используется схема https:// , активируется клиентская транспортная безопасность и переопределяет insecure настройки в tls . |
tls | Клиентская конфигурация TLS. Определяет путь к TLS-сертификатам. |
headers | Заголовки, отправляемые с каждым HTTP-запросом. |
disable_keep_alives | При значении true отключает HTTP keep-alives. На сервер отправляется только один HTTP-запрос на соединение. |
Debug Exporter выводит телеметрические данные в консоль для целей отладки.
Пример YAML
Поле debug.verbosity
контролирует уровень детализации логируемых экспортов (detailed|normal|basic
). При значении detailed
данные конвейера логируются подробно.
Load Balancing Exporter может экспортировать спаны, метрики и логи в несколько бекендов. Поддерживаемые типы конвейеров включают метрики, спаны и логи. Load Balancing Exporter может использовать политики маршрутизации для отправки телеметрии в несколько бекендов одновременно. Вы можете настроить routing_key
для использования политик маршрутизации, чтобы классифицировать телеметрию по группам и сопоставлять эти группы с конкретными конечными точками.
С помощью Load Balancing Exporter вы также можете отправлять данные другим запущенным экземплярам OpenTelemetry Collector через конечные точки collector. Например, можно отправлять все трассы одному экземпляру collector, а все логи — другому. Это позволяет обрабатывать или изменять данные в разных средах collector.
Пример YAML
Описание параметров loadbalancing
Параметр | Описание |
---|---|
routing_key | "routing_key: service" экспортирует спаны с одинаковым именем сервиса на один и тот же экземпляр Collector для точной агрегации. "routing_key: traceID" экспортирует спаны на основе их TraceID. По умолчанию используется маршрутизация по TraceID. |
protocol.otlp | OTLP — единственный поддерживаемый протокол балансировки нагрузки. Поддерживаются все опции OTLP exporter. |
resolver | Можно настроить только один резолвер. |
resolver.static | Статический резолвер распределяет нагрузку между перечисленными конечными точками. |
resolver.dns | DNS резолвер применим только к Kubernetes Headless сервисам. |
resolver.k8s | Рекомендуется использовать Kubernetes резолвер. |
Prometheus Exporter экспортирует метрики в формате Prometheus или OpenMetrics, позволяя серверам Prometheus снимать эти данные. Ниже приведены детали настройки и использования Prometheus Exporter.
Обязательная конфигурация
/metrics
. Должен быть настроен, значения по умолчанию нет.Необязательная конфигурация
false
.5m
.enabled
: По умолчанию false
. При включении атрибуты ресурса конвертируются в метки метрик.false
. При включении метрики экспортируются в формате OpenMetrics.true
. Добавлять ли суффиксы типа и единиц измерения.Конфигурация TLS
TLS-сертификаты можно задать с помощью ca_file
, cert_file
и key_file
для обеспечения защищённой связи.
Пример YAML конфигурации
Ниже пример конфигурации Prometheus Exporter:
Эта конфигурация экспонирует метрики Prometheus по адресу 0.0.0.0:8889/metrics
и настраивает TLS-сертификаты и другие параметры.
Рекомендации по использованию
target_info
. Вы можете использовать запросы Prometheus для выбора и группировки этих атрибутов как меток метрик.transform processor
для прямого преобразования часто используемых атрибутов ресурса в метки метрик.Connectors связывают два конвейера, выступая одновременно как exporters и receivers. Connector потребляет данные как exporter в конце одного конвейера и отправляет данные как receiver в начале другого конвейера. Потребляемые и отправляемые данные могут быть одного или разных типов. Connectors можно использовать для агрегации, дублирования или маршрутизации данных.
Вы можете настроить один или несколько connectors в разделе connectors
файла конфигурации Collector. По умолчанию connectors не настроены. Каждый тип connector предназначен для обработки комбинации одного или нескольких типов данных и может использоваться только для соединения соответствующих типов конвейеров.
Примечание: Настройка connector не включает его. Connectors должны быть включены добавлением в соответствующие конвейеры в service section.
Совет: Для более подробной настройки connector смотрите connector README.
ASM Service Graph Connector строит карту, представляющую отношения между различными сервисами в системе. Этот connector анализирует данные спанов и генерирует метрики, описывающие отношения между сервисами. Эти метрики могут использоваться приложениями визуализации данных (например, Grafana) для построения графа сервисов.
Примечание: Этот компонент является кастомной версией community компонента Service Graph Connector и не может быть напрямую заменён на нативный community компонент. Конкретные различия параметров описаны ниже.
Топологии сервисов очень полезны во многих сценариях:
Пример YAML
Описание параметров asmservicegraph
Параметр | Описание |
---|---|
dimensions | Дополнительные измерения (метки), добавляемые к метрикам, извлечённым из атрибутов ресурса и спана. |
extra_dimensions | Атрибуты, добавляемые платформой ASM. |
extra_dimensions.mesh_id | Mesh ID. Платформа ASM развёртывает Istio service mesh, и mesh_id отражает ID Istio mesh. |
extra_dimensions.cluster_name | Имя кластера. Имя кластера, в котором расположен OTel Collector в платформе ASM. |
store.ttl | Время жизни временных данных в памяти. |
store.max_items | Максимальное количество записей данных спанов, которые могут временно храниться в памяти. |
Extensions добавляют возможности Collector. Например, расширения могут автоматически добавлять функции аутентификации к receivers и exporters.
Extensions — это необязательные компоненты, используемые для расширения функциональности Collector для задач, не связанных с обработкой телеметрических данных. Например, можно добавить расширения для мониторинга состояния, обнаружения сервисов или пересылки данных.
Вы можете настроить extensions в разделе extensions
файла конфигурации Collector. Большинство расширений имеют настройки по умолчанию, поэтому достаточно указать имя расширения для его настройки. Любые указанные параметры переопределят значения по умолчанию (если они есть).
Примечание: Настройка extension не включает его. Extensions должны быть включены в service section. По умолчанию extensions не настроены.
Совет: Для более подробной настройки extension смотрите extension README.
Раздел service
используется для включения компонентов Collector на основе конфигурации в разделах receivers
, processors
, exporters
и extensions
. Если компонент настроен, но не определён в разделе service
, он не будет включён.
Раздел service
включает три подраздела:
Extensions: Список необходимых расширений для включения. Например:
Pipelines: Настройка конвейеров, которые могут быть следующих типов:
Конвейер состоит из набора receivers
, processors
и exporters
. Перед включением receiver
, processor
или exporter
в конвейер убедитесь, что его конфигурация определена в соответствующих разделах.
Один и тот же receiver
, processor
или exporter
можно использовать в нескольких конвейерах. При ссылке на процессор в нескольких конвейерах каждый конвейер получает отдельный экземпляр этого процессора.
Пример конфигурации конвейеров. Обратите внимание, что порядок процессоров определяет последовательность обработки данных:
Telemetry: Раздел конфигурации telemetry
используется для настройки наблюдаемости самого Collector. Он состоит из подразделов logs
и metrics
. Для информации о настройке этих сигналов смотрите Активацию внутренней телеметрии в Collector.
Конфигурации Collector поддерживают использование и расширение переменных окружения. Например, чтобы использовать значения из переменных окружения DB_KEY
и OPERATION
, можно написать:
Используйте $$
для представления литерального символа $
. Например, чтобы представить $DataVisualization
, можно написать:
Exporters, использующие пакет net/http, поддерживают следующие переменные окружения прокси:
Если эти переменные установлены при запуске 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.pem
, с соответствующим ключом в ca-key.pem
.cert.pem
, подписанный CA OpenTelemetry Example, с соответствующим ключом в cert-key.pem
.Вы можете переопределять настройки Collector с помощью опции --set
. Настройки, определённые таким образом, будут объединены в итоговую конфигурацию после разрешения и объединения всех источников --config
.
Следующий пример показывает, как переопределить настройки в вложенных разделах:
Важное замечание: Опция --set
не поддерживает установку ключей, содержащих точки (.) или знаки равенства (=).