Вы можете настроить 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 смотрите README receivers.
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 | Интервал перезагрузки сертификатов. Если не установлен, сертификаты не перезагружаются. Поле принимает строку с допустимыми единицами времени, такими как 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. Для более подробных конфигураций процессоров смотрите README processors.
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 смотрите README exporters.
OTLP exporter отправляет метрики, трассы и логи в формате OTLP по gRPC. Поддерживаемые типы конвейеров включают спаны, метрики и логи. По умолчанию этот exporter требует TLS и поддерживает очередь повторных попыток. Для отправки OTLP данных по HTTP используйте OTLP/HTTP exporter. Инструкции см. в разделе OTLP/HTTP exporter.
Пример YAML
Описание параметров otlp
Параметр | Описание |
---|---|
endpoint | OTLP gRPC конечная точка. Если используется схема https:// , активируется безопасность транспорта клиента и переопределяет настройки tls.insecure . |
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:// , активируется безопасность транспорта клиента и переопределяет настройки 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 смотрите README connector.
ASM Service Graph Connector строит карту, отображающую отношения между различными сервисами в системе. Этот connector анализирует данные спанов и генерирует метрики, описывающие отношения между сервисами. Эти метрики могут использоваться приложениями визуализации данных (например, Grafana) для построения графа сервисов.
Примечание: Этот компонент является кастомной версией community компонента Service Graph Connector и не может быть напрямую заменён на community-native компонент. Конкретные различия параметров описаны ниже.
Топологии сервисов очень полезны во многих сценариях:
Пример 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. Большинство расширений имеют настройки по умолчанию, поэтому достаточно указать имя расширения для его настройки. Любые указанные настройки переопределят значения по умолчанию (если они есть).
Примечание: Настройка расширения не включает его. Extensions должны быть включены в service section. По умолчанию расширения не настроены.
Совет: Для более подробной настройки расширений смотрите README extension.
Раздел 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
не поддерживает установку ключей, содержащих точки (.) или знаки равенства (=).