Преобразование и фильтрация

Материал из Документация Ключ-АСТРОМ

В следующем примере конфигурации показано, как настроить экземпляр Collector для преобразования и обработки запросов OTLP перед их пересылкой в ​​Ключ-АСТРОМ.

Используя процессоры, показанные в этом примере (filterи transform), можно оптимизировать запросы перед их отправкой в ​​Ключ-АСТРОМ и исключить данные, которые могут быть нерелевантными для вашего варианта использования, а также сократить расходы на выставление счетов.

Предустановка

Информацию о настройке 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:
  • svc.marker, со статическим значением purchasing
  • purchase.id, преобразуя его значение в верхний регистр, используя ConvertCase
delete_key Удаляет атрибуты с именем message.
replace_pattern Сопоставляет строку с заданным регулярным выражением и выполняет замену строки во всех соответствующих записях.

В нашем примере мы сначала используем его для трассировки, чтобы сопоставить имя с регулярным выражением ^.*(DataSubmission-\d+).*$, и заменяем его содержимое первой группой захвата ($$1) нашего выражения. По сути, это означает, что мы ищем строки DataSubmission с суффиксом, содержащим число, и, если найдено, сохраняем только значение найденного совпадения.

Мы также используем функцию для метрик с регулярным выражением (.*)_bad$, чтобы изменить суффикс _bad на _invalid.

Фильтр

Кроме того, мы также настраиваем экземпляр процессора 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 на настроенных конечных точках и преобразует атрибуты трассировок в соответствии с настроенными правилами, а затем пересылает все в Ключ-АСТРОМ с помощью экспортера.