Переопределения выборки — Аналитика приложения Azure Monitor для Java

Примечание.

Функция переопределения выборки находится в общедоступной версии, начиная с 3.5.0.

Функция переопределения выборки позволяет переопределить Процент выборки по умолчанию, например:

  • Установите процент выборки на 0 (или на какое-то небольшое значение) для проверки работоспособности при шумах.
  • Установите процент выборки на 0 (или на какое-то небольшое значение) для вызовов "шумных" зависимостей.
  • Задайте процент выборки 100 для важного типа запроса (например, /loginдаже если выборка по умолчанию настроена на что-то меньшее).

Терминология

Прежде чем приступить к изучению переопределений выборки, вы должны понимать такой термин как диапазон. Под диапазоном в общем понимается следующее:

  • Входящий запрос.
  • Исходящая зависимость (например, удаленный вызов другой службы).
  • Внутрипроцессный набор зависимостей (например, работа, выполняемая подкомпонентами службы).

Для функции переопределения выборки важными являются следующие компоненты:

  • Атрибуты

Атрибуты диапазона представляют стандартные и пользовательские свойства выданного запроса или зависимости.

Начало работы

Для начала создайте файл конфигурации с именем applicationinsights.json. Сохраните его в том же каталоге, что и applicationinsights-agent-*.jar. Используйте следующий шаблон.

{
  "connectionString": "...",
  "sampling": {
    "percentage": 10
    "overrides": [
      {
        "telemetryType": "request",
        "attributes": [
          ...
        ],
        "percentage": 0
      },
      {
        "telemetryType": "request",
        "attributes": [
          ...
        ],
        "percentage": 100
      }
    ]
  }
}

Принцип работы

telemetryType(telemetryKindв приложении Аналитика 3.4.0) должен быть одним из request, ( dependencytrace log) или exception.

При запуске диапазона тип диапазона и атрибуты, находящиеся в нем в это время, используются для проверки совпадения переопределений выборки.

Совпадения могут иметь тип strict или regexp. Сопоставление регулярных выражений выполняется для всего значения атрибута, поэтому, если нужно сопоставить значение, содержащееся abc в любом месте, необходимо использовать маску .*abc.*. Переопределение выборки может определять несколько критериев атрибутов, и в этом случае все они должны совпадать, чтобы переопределение выборки совпадало.

Если одно из переопределений выборки совпадает, для определения того, следует ли выбирать диапазон, задействуется соответствующий процент выборки.

Используется только первое совпавшее переопределение выборки.

Если ни одно переопределение выборки не совпадет:

  • Если это первый диапазон трассировки, используется конфигурация выборки верхнего уровня.
  • Если это не первый диапазон трассировки, то используется родительское решение выборки.

Пример. Подавление сбора данных телеметрии при проведении проверок работоспособности

Этот пример запрещает сбор данных телеметрии для всех запросов /health-checks.

В этом примере также запрещается сбор всех подчиненных диапазонов (зависимостей), которые обычно собираются в /health-checks.

{
  "connectionString": "...",
  "sampling": {
    "overrides": [
      {
        "telemetryType": "request",
        "attributes": [
          {
            "key": "url.path",
            "value": "/health-check",
            "matchType": "strict"
          }
        ],
        "percentage": 0
      }
    ]
  }
}

Пример. Подавление сбора данных телеметрии для вызова "шумной" зависимости

Этот пример подавляет сбор данных телеметрии для всех GET my-noisy-key вызовов redis.

{
  "connectionString": "...",
  "sampling": {
    "overrides": [
      {
        "telemetryType": "dependency",
        "attributes": [
          {
            "key": "db.system",
            "value": "redis",
            "matchType": "strict"
          },
          {
            "key": "db.statement",
            "value": "GET my-noisy-key",
            "matchType": "strict"
          }
        ],
        "percentage": 0
      }
    ]
  }
}

Пример: 100 % сбор данных телеметрии для запроса важного типа

В этом примере собирается 100 % данных телеметрии./login

Поскольку подчиненные диапазоны (зависимости) учитывают решение выборки родителя (отсутствует переопределение выборки для этого нижнего диапазона), они также собираются для всех запросов "/login".

{
  "connectionString": "...",
  "sampling": {
    "percentage": 10
  },
  "sampling": {
    "overrides": [
      {
        "telemetryType": "request",
        "attributes": [
          {
            "key": "url.path",
            "value": "/login",
            "matchType": "strict"
          }
        ],
        "percentage": 100
      }
    ]
  }
}

Атрибуты диапазона, доступные для выборки

Имена атрибутов span основаны на семантических соглашениях OpenTelemetry. (HTTP, обмен сообщениями, база данных, RPC)

https://github.com/open-telemetry/semantic-conventions/blob/main/docs/README.md

Примечание.

Чтобы просмотреть точный набор атрибутов, захваченных приложением Аналитика Java для приложения, задайте для приложения уровень самостоятельного диагностика и найдите сообщения отладки, начиная с текста "экспорт диапазона".

Примечание.

Только атрибуты, заданные в начале диапазона, доступны для выборки, поэтому такие атрибуты, как http.response.status_code или длительность запроса, которые записываются позже, можно фильтровать с помощью расширений Java OpenTelemetry. Ниже приведен пример расширения, который фильтрует диапазоны на основе длительности запроса.

Устранение неполадок

Если используется regexp и переопределение выборки не работает, попробуйте использовать .* regex. Если выборка работает, это означает, что у вас возникла проблема с первой регулярной и ознакомьтесь с этой документацией по regex.

Если он не работает.*, может возникнуть проблема с синтаксисом.application-insights.json file Просмотрите журналы приложений Аналитика и убедитесь, что вы заметили предупреждающие сообщения.