Partilhar via


Substituições de amostragem - Azure Monitor Application Insights for Java

Nota

O recurso de substituições de amostragem está em GA, a partir da versão 3.5.0.

As substituições de amostragem permitem substituir a porcentagem de amostragem padrão, por exemplo:

  • Defina a percentagem de amostragem como 0 (ou algum valor pequeno) para verificações de saúde ruidosas.
  • Defina a porcentagem de amostragem como 0 (ou algum valor pequeno) para chamadas de dependência barulhentas.
  • Defina a porcentagem de amostragem como 100 para um tipo de solicitação importante (por exemplo, /login) mesmo que você tenha a amostragem padrão configurada para algo menor.

Terminologia

Antes de aprender sobre substituições de amostragem, você deve entender o termo span. Um span é um termo geral para:

  • Uma solicitação de entrada.
  • Uma dependência de saída (por exemplo, uma chamada remota para outro serviço).
  • Uma dependência em processo (por exemplo, trabalho sendo feito por subcomponentes do serviço).

Para substituições de amostragem, estes componentes de span são importantes:

  • Atributos

Os atributos span representam propriedades padrão e personalizadas de uma determinada solicitação ou dependência.

Introdução

Para começar, crie um arquivo de configuração chamado applicationinsights.json. Salve-o no mesmo diretório que applicationinsights-agent-*.jar. Utilize o modelo seguinte.

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

Como funciona

telemetryTypetelemetryKind( no Application Insights 3.4.0) deve ser um dos request, dependency, trace (log) ou exception.

Quando uma extensão é iniciada, o tipo de extensão e os atributos presentes nela naquele momento são usados para verificar se alguma das substituições de amostragem corresponde.

As partidas podem ser qualquer uma strict ou regexp. As correspondências de expressão regular são realizadas em relação ao valor do atributo inteiro, portanto, se você quiser corresponder a um valor que contenha abc qualquer lugar nele, precisará usar .*abc.*o . Uma substituição de amostragem pode especificar vários critérios de atributo, caso em que todos eles devem corresponder para que a substituição de amostragem corresponda.

Se uma das substituições da amostragem corresponder, a sua percentagem de amostragem é utilizada para decidir se a amostragem deve ou não ser amostrada.

Apenas a primeira substituição de amostragem que corresponde é usada.

Se nenhuma substituição de amostragem corresponder:

  • Se for a primeira extensão no rastreamento, a configuração de amostragem de nível superior será usada.
  • Se não for o primeiro período no rastreamento, a decisão de amostragem pai será usada.

Exemplo: suprimir a telemetria de coleta para verificações de integridade

Este exemplo suprime a coleta de telemetria para todas as solicitações para /health-checks.

Este exemplo também suprime a coleta de quaisquer extensões a jusante (dependências) que normalmente seriam coletadas em /health-checks.

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

Exemplo: suprimir a telemetria de coleta para uma chamada de dependência barulhenta

Este exemplo suprime a coleta de telemetria para todas as GET my-noisy-key chamadas 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
      }
    ]
  }
}

Exemplo: coletar 100% da telemetria para um tipo de solicitação importante

Este exemplo coleta 100% da telemetria para /login.

Como as extensões a jusante (dependências) respeitam a decisão de amostragem do pai (na ausência de qualquer substituição de amostragem para essa extensão a jusante), elas também são coletadas para todas as solicitações '/login'.

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

Atributos de span disponíveis para amostragem

Os nomes dos atributos Span são baseados nas convenções semânticas OpenTelemetry . (HTTP, Mensagens, Banco de Dados, RPC)

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

Nota

Para ver o conjunto exato de atributos capturados pelo Application Insights Java para seu aplicativo, defina o nível de autodiagnóstico para depurar e procure mensagens de depuração começando com o texto "export span".

Nota

Somente os atributos definidos no início da extensão estão disponíveis para amostragem, portanto, atributos como http.response.status_code ou duração da solicitação que são capturados posteriormente podem ser filtrados por meio das extensões OpenTelemetry Java. Aqui está uma extensão de exemplo que filtra extensões com base na duração da solicitação.

Resolução de Problemas

Se você usar regexp e a substituição de amostragem não funcionar, tente com o .* regex. Se a amostragem agora funcionar, isso significa que você tem um problema com o primeiro regex e leia esta documentação do regex.

Se não funcionar com .*o , poderá ter um problema de sintaxe no .application-insights.json file Observe os logs do Application Insights e veja se você percebe mensagens de aviso.