Преобразование и фильтрация
В следующем примере конфигурации показано, как настроить экземпляр Collector для преобразования и обработки запросов OTLP перед их пересылкой в Ключ-АСТРОМ.
Используя процессоры, показанные в этом примере (filterи transform), можно оптимизировать запросы перед их отправкой в Ключ-АСТРОМ и исключить данные, которые могут быть нерелевантными для вашего варианта использования, а также сократить расходы на выставление счетов.
Предустановка
- Один из следующих дистрибутивов Collector с процессорами преобразования и фильтрации
- URL-адрес конечной точки API Ключ-АСТРОМ, на которую следует экспортировать данные.
- Токен API с соответствующей областью доступа (требуется только для SaaS и АктивногоШлюза)
Информацию о настройке Collector с использованием указанной ниже конфигурации см. в разделах Развертывание коллектора и Конфигурация коллектора.
Демо конфигурация
| receivers:
otlp: protocols: grpc: endpoint: 0.0.0.0:4317 http: endpoint: 0.0.0.0:4318 processors: transform: trace_statements: - context: resource statements: # Only keep a certain set of resource attributes - keep_matching_keys(attributes, "^(aaa|bbb|ccc).*") - context: span statements: # Only keep a certain set of span attributes - keep_matching_keys(attributes, "(^xyz.pqr$)|(^(aaa|bbb|ccc).*)") # Set a static key - set(attributes["svc.marker"], "purchasing") # Delete a specific key - delete_key(attributes, "message") # Rewrite a key - set(attributes["purchase.id"], ConvertCase(attributes["purchase.id"], "upper")) # Apply regex replacement - replace_pattern(name, "^.*(DataSubmission-\d+).*$", "$$1") metric_statements: - context: metric statements: # Rename all metrics containing '_bad' suffix in their name with `_invalid` - replace_pattern(name, "(.*)_bad$", "$${1}_invalid") filter: error_mode: ignore traces: span: # Filter spans with resource attributes matching the provided regular expression - IsMatch(resource.attributes["k8s.pod.name"], "^my-pod-name.*") metrics: metric: # Filter metrics which contain at least one data point with a "bad.metric" attribute - 'HasAttrKeyOnDatapoint("bad.metric")' logs: log_record: # Filter logs with resource attributes matching the configured names - resource.attributes["service.name"] == "service1" - resource.attributes["service.name"] == "service2" exporters: otlphttp: endpoint: ${env:DT_ENDPOINT} headers: Authorization: "Api-Token ${env:DT_API_TOKEN}" service: pipelines: traces: receivers: [otlp] processors: [filter,transform] exporters: [otlphttp] metrics: receivers: [otlp] processors: [filter] exporters: [otlphttp] logs: receivers: [otlp] processors: [filter] exporters: [otlphttp] |
Компоненты
Для нашей конфигурации мы настраиваем следующие компоненты.
Приемник
В разделе receiversмы указываем стандартный otlpприемник как активный компонент приемника для нашего экземпляра Collector.
Это сделано для демонстрации. Вы можете указать здесь любой другой допустимый получатель (например, zipkin).
Процессор
Преобразование
В разделе processors мы указываем процессор transform с набором различных операторов модификации атрибутов. context указывает область, к которой должны применяться операторы (в данном случае для атрибутов ресурсов resource, для атрибутов диапазона span и для метрик metric).
Более подробную информацию об отдельных параметрах конфигурации см . в документации OpenTelemetry процессора преобразования
В приведенном выше примере конфигурации используются следующие операторы:
| Значение | Описание |
|---|---|
keep_matching_keys
|
Оценивает имена ключей атрибутов и сохраняет только те, имена которых соответствуют заданным регулярным выражениям ^(aaa|bbb|ccc).* для атрибутов ресурсов и (^xyz.pqr$)|(^(aaa|bbb|ccc).*) для атрибутов диапазона.
|
set
|
Добавляет/изменяет следующие два атрибута span:
|
delete_key
|
Удаляет атрибуты с именем message.
|
replace_pattern
|
Сопоставляет строку с заданным регулярным выражением и выполняет замену строки во всех соответствующих записях.
В нашем примере мы сначала используем его для трассировки, чтобы сопоставить имя с регулярным выражением Мы также используем функцию для метрик с регулярным выражением |
Фильтр
Кроме того, мы также настраиваем экземпляр процессора filter для фильтрации сигнала на основе следующих критериев:
| Сигнал | Описание |
|---|---|
| Трассировки | Используется для сопоставления имени атрибутов ресурса с регулярным выражением IsMatch, отбрасывая интервалы с атрибутами, имена которых начинаются с ^my-pod-name.*my-pod-name.
|
| Метрики | Используется для оценки наличия HasAttrKeyOnDatapoint у точек данных атрибутов с именем bad.metric.
|
| Логи | Использует строгое строковое соответствие атрибута ресурса service.name строкам service1 и service2.
|
Более подробную информацию об отдельных параметрах конфигурации см. в документации OpenTelemetry фильтр-процессора.
Экспортер
В разделе exporters мы указываем экспортер otlphttp по умолчанию и настраиваем его с помощью URL-адреса нашего API Ключ-АСТРОМ и требуемого токена аутентификации.
Для этой цели мы устанавливаем следующие две переменные среды и ссылаемся на них в значениях конфигурации для endpoint и Authorization.
DT_ENDPOINTсодержит базовый URL-адрес конечной точки API Ключ-АСТРОМ (например,https://{your-environment-id}.live.dynatrace.com/api/v2/otlp)DT_API_TOKENсодержит токен API
Сервисные контейнеры
В разделе service мы собираем объекты приемника, процессора и экспортера в контейнер трассировок, который принимает трассировки OTLP на настроенных конечных точках и преобразует атрибуты трассировок в соответствии с настроенными правилами, а затем пересылает все в Ключ-АСТРОМ с помощью экспортера.