Configurar Amostragem do APM

O APM Sampling é uma configuração opcional para o APM Java Agent e o APM Tracer para monitorar uma fração dos intervalos com base na regra de amostragem.

A Amostragem de APM é uma implementação de amostragem baseada em intervalo raiz, permitindo que rastreamentos submetidos a amostragem gerem representação de todos os rastreamentos. A decisão de amostragem é tomada com base em regras de amostragem. Quando um intervalo raiz (mesmo que rastreamento) é amostrado, o intervalo raiz e todos os intervalos filhos também são amostrados. Quando um intervalo raiz não é amostrado, todos os intervalos filhos não são amostrados.

Regras Disponíveis

As regras a seguir estão disponíveis para amostragem de APM:

Regra Nome da Regra Parâmetro da Regra Parâmetro de Amostra Descrição
Constante constant número inteiro

(0 ou acima)

50 Amostra constantemente uma vez de acordo com o valor do parâmetro especificado.

Por exemplo, se o parâmetro for definido como 50, o primeiro de cada 50 rastreamentos será amostrado. Se o parâmetro for definido como 0, nenhum rastreamento será amostrado. Se o parâmetro for definido como 1, cada rastreamento será amostrado.

Probabilística probabilistic número decimal entre 0 e 1 0.2 Amostra decidida sobre a probabilidade especificada.

Por exemplo, se o parâmetro for definido como 0.2, haverá uma chance de 20% de um rastreamento ser amostrado.

Taxa limitada limited-rate <limit>/<seconds> 500/60 Amostra até o limite especificado para cada janela de segundos especificada.

Por exemplo, se o parâmetro for definido como 500/60, os primeiros 500 rastreamentos serão amostrados a cada 60 segundos.

Taxa Limitada por Operação per-operation-rate <limit>/<seconds> 10/60 Amostra até o limite especificado para cada janela de segundos especificada por nome da operação.

Por exemplo, se o parâmetro for definido como 10/60, os primeiros 10 rastreamentos de cada nome de operação serão amostrados a cada 60 segundos.

Nome da Operação operation <op1>,<op2>, ...<opN> /status_order,/status_ship Amostra apenas o nome da operação especificada. Várias operações podem ser especificadas delimitadas por vírgula.
Nome da Operação em Regex operation-regex <regex> /status_(ordem|ship) Amostra somente intervalos com operação que corresponde ao regex.

Métodos de Configuração

Os seguintes métodos estão disponíveis para configurar a amostragem do APM:
  • Propriedades de Regra Única: Uma maneira fácil de definir uma regra aplicável a todos os rastreamentos.
  • Arquivo de Configuração: Uma forma abrangente de definir amostragens, incluindo regras de ramificação e regras de prioridade da operação.

Se ambos os métodos forem configurados, as propriedades de regra única terão precedência sobre o arquivo de configuração, portanto, o método de propriedades de regra única será o que está sendo usado.

Não há configuração de amostragem padrão. Se não houver nenhuma propriedade de regra única ou nenhum arquivo de configuração tiver sido especificado, todos os novos rastreamentos iniciados pelo Agente do APM ou pelo Rastreador do APM serão amostrados.

Propriedades de Regra Única

As propriedades de regra única permitem que uma regra de amostragem seja definida e aplicada a todos os rastreamentos de maneira fácil.

As propriedades a seguir estão disponíveis:

Tipo e Descrição de Propriedades Suportado por Propriedades Exemplo

AgentConfig.properties

Atualiza o arquivo AgentConfig.properties localizado no diretório oracle-apm-agent/config/<version>.

Agente do APM
com.oracle.apm.agent.sampling.rule
com.oracle.apm.agent.sampling.param
com.oracle.apm.agent.sampling.rule=limited-rate
com.oracle.apm.agent.sampling.param=1000/60

Tracer Builder

Atualiza o Tracer Builder.

Rastreador do APM
com.oracle.apm.agent.sampling.rule
com.oracle.apm.agent.sampling.param
new ApmTracer.Builder(...)
    ...
    .withProperty(com.oracle.apm.agent.sampling.rule, "limited-rate")
    .withProperty(com.oracle.apm.agent.sampling.param, "1000/60")
    ...
    .build();

Propriedades do Sistema

Atualiza as propriedades do sistema.

Agente do APM e Rastreador do APM
com.oracle.apm.agent.sampling.rule
com.oracle.apm.agent.sampling.param
java -Dcom.oracle.apm.agent.sampling.rule=limited-rate -Dcom.oracle.apm.agent.sampling.param=1000/60 -javaagent:... <main_class>

Variáveis de Ambiente

Atualiza as variáveis de ambiente.

Agente do APM e Rastreador do APM
com_oracle_apm_agent_sampling_rule
com_oracle_apm_agent_sampling_param
Para Windows:
set com_oracle_apm_agent_sampling_rule=limited-rate
set com_oracle_apm_agent_sampling_param=1000/60
Para Linux:
export com_oracle_apm_agent_sampling_rule=limited-rate
export com_oracle_apm_agent_sampling_param=1000/60

Precedência de propriedades: se mais de uma propriedade estiver definida, a ordem de precedência da mais alta para a mais baixa será a seguinte: Propriedades do Sistema, Variáveis de Ambiente e AgentConfig.properties.

Arquivo de Configuração

O arquivo de configuração permite que todos os recursos de amostragem de todos os serviços sejam especificados em um único arquivo com as seguintes características:

  • O arquivo de configuração está no formato ACML (subconjunto de YAML) a ser especificado em Sampling.acml.
  • Várias configurações de amostragem para diferentes serviços podem ser definidas e compartilhadas de um único arquivo de configuração.
  • A regra de amostragem não está limitada a uma. As regras de amostra podem ser ramificadas para outras regras para formar uma árvore de regras. Cada avaliação de regra tem 2 resultados: verdadeiro ou falso. Verdadeiro significa que o rastreamento é amostrado, falso significa que não é amostrado. Em uma regra ramificada, o resultado da folha terminal é utilizado para a decisão de amostragem.
  • Regras com nomes específicos podem ser priorizadas com sua própria regra de amostragem.

Para o Rastreador do APM, não há local de configuração padrão. O arquivo de configuração de amostragem deve ser especificado com a propriedade do rastreador, a propriedade do sistema ou a variável de ambiente usando a propriedade com.oracle.apm.agent.sampling.file. O valor da propriedade é o caminho completo do arquivo de configuração de amostragem.

A propriedade com.oracle.apm.agent.sampling.file só é aplicável ao Rastreador do APM. Para o Agente do APM, a propriedade não é necessária. Você só precisa colocar o arquivo de amostra Sampling.acml no diretório oracle-apm-agent/config/<version>.

Tipo e Descrição de Propriedades Suportado por Property Exemplo
Tracer Builder

Atualize o construtor de rastreador.

Rastreador do APM com.oracle.apm.agent.sampling.file
new ApmTracer.Builder(...)
    ...
    .withProperty(com.oracle.apm.agent.sampling.file, "/home/user/apm/config/Sampling.acml")
    ...
    .build();
Propriedade do Sistema

Atualiza as propriedades do sistema.

Agente do APM e Rastreador do APM com.oracle.apm.agent.sampling.file -Dcom.oracle.apm.agent.sampling.file=/home/user/apm/config/Sampling.acml
Variável de Ambiente

Atualiza a variável de ambiente.

Agente do APM e Rastreador do APM com_oracle_apm_agent_sampling_file

Para Windows:

set com_oracle_apm_agent_sampling_file=c:\apm\config\Sampling.acml

Para Linux:

export com_oracle_apm_agent_sampling_file=/home/user/apm/config/Sampling.acml

O valor da propriedade com.oracle.apm.agent.sampling.file é o caminho completo do arquivo de configuração de amostragem. Quando especificado, o nome do arquivo de configuração de amostragem recomendado é Sampling.acml, mas você pode usar qualquer outro nome preferencial.

Há 2 estratégias de amostragem:
  • Amostragem: Usa a entrada sampling e define uma árvore de regras para avaliação de rastreamento.
  • Prioridade da Operação: Usa a entrada operation_priority e, quando é definida, substitui a amostragem se o nome da operação do intervalo raiz de rastreamento corresponder ao nome definido. Cada nome de operação definido tem sua própria árvore de regras de decisão.

Decisão de pré-amostragem

A decisão de pré-amostragem é um recurso de amostragem que permite ao amostrador tomar uma decisão com base no intervalo pai antes de aplicar a regra de amostragem.

Exemplo:

sampling_config:
    -
        service:
            -   s1
            -   s2
        pre_sampling_decision:
            ignore: rum
        sampling:
            rule: constant
            param: 1000
            true:
                rule: per-operation-rate
                param: 1000/60

Para obter detalhes sobre a sintaxe pre_sampling_decision, consulte Formato de Arquivo Sampling.acml.

Formato de Arquivo Sampling.acml

Veja a seguir o formato de arquivo Sampling.acml:

Sampling.acml Descrição

sampling_config:

Nó que representa um array de diferentes configurações de amostragem.

|_-

Elemento de array da configuração de amostragem.

|____service:

Nó de nomes de serviço ao qual esta configuração de amostragem é aplicada.

|_______- <service-name>

Elemento de array do nome do serviço.

|____pre_sampling_decision:

(Opcional) Nó de decisão de pré-amostragem.

A decisão é avaliada na ordem de substituição → forçar → ignorar.

Caso uma origem seja definida em mais de uma decisão, a primeira decisão que tem a origem correspondente será usada. Quando nenhum tipo de pai corresponde a qualquer decisão, o Agente do APM segue o indicador de amostragem de intervalo pai para o intervalo local.

Se não houver intervalo pai, a regra de amostragem será avaliada para o intervalo local.

Todos os nós de decisão são opcionais. Se nenhuma decisão de pré-amostragem for necessária, pre_sampling_decision não deverá ser definido.

|_______override: <source>

Amostra do Agente do APM local, independentemente do flag de amostra pai da origem especificada.

Se o intervalo pai não for amostrado, um novo rastreamento será iniciado com o intervalo local como raiz.

Para valores source, consulte Valores de Origem.

|_______enforce: <source>

Force a reavaliação de amostragem, independentemente do indicador pai amostrado da origem especificada.

Se o intervalo pai não for amostrado e o intervalo do Agente APM local for avaliado para ser amostrado, um novo rastreamento será iniciado.

Se o intervalo pai for amostrado e o intervalo do Agente do APM local for avaliado para ser amostrado, o intervalo do Agente do APM local continuará no rastreamento do intervalo pai.

Para valores source, consulte Valores de Origem.

|_______ignore: <source>

Ignorar amostragem do intervalo do Agente do APM local do pai especificado.

Para valores source, consulte Valores de Origem.

|____sampling:

Nó da amostragem base.

É opcional se o nó operation_priority for usado.

|_______<rule>

Árvore de regras de amostragem desta configuração.

|____operation_priority:

Array de nomes de operação com regras que substituem a regra de amostragem base.

|_______- name: <operation-name>

Nome para corresponder ao nome da operação de intervalo raiz de rastreamento.

|_______<rule>

Regra a ser aplicada, se houver correspondência.

|_______- regex: <operation-name-regex>

Regex para corresponder ao nome da operação de intervalo raiz de rastreamento.

|_______<rule>

Regra a ser aplicada, se houver correspondência.
  • Se o nó de serviço (service:) não for especificado, a configuração de amostragem será aplicada a todos os serviços sem configuração de amostragem dedicada. Quando várias configurações têm o mesmo nome de serviço, somente a última configuração com esse nome de serviço é usada.

    Se um arquivo tiver configurações com e sem esse nó de serviço, a configuração com o nome de serviço correspondente ao nome de serviço do Agente do APM ou Rastreador do APM será priorizada.

  • Quando os nós de amostragem (sampling:) e operation_priority (operation_priority:) são especificados, o operation_priority é priorizado. Se o nome do intervalo raiz de rastreamento corresponder ao nome da operação do nó operation_priority, ele será avaliado com a regra associada ao nome da operação. Se o nome do intervalo raiz de rastreamento não corresponder a nenhum nome de operação do nó operation_priority, o nó de amostragem será avaliado.

  • Se o nó de amostragem (sampling:) não for especificado ou nenhuma regra for especificada, o rastreamento não será amostrado quando nenhuma regra operation_priority for aplicável.

  • Quando o nó operation_priority (operation_priority:) for especificado, se o nome da operação do intervalo raiz de rastreamento corresponder a qualquer nome de operação operation_priority, a regra de nome correspondente será usada para avaliação, em vez da regra de amostragem base.

Nó da Regra

O nó de regra do arquivo Sampling.acml tem o seguinte formato:

<regra> nó Descrição
rule: <rule_name> Nome da regra de amostragem.
param: <rule_parameter> Parâmetro da regra.
true: Resultado verdadeiro da avaliação da regra. O valor pode ser outra <regra> ou vazio.

Se este nó não for especificado ou o valor do nó estiver vazio, a avaliação verdadeira também será o resultado da avaliação de amostragem final e o rastreamento será amostrado.

|___<rule> Nó <rule> da ramificação na avaliação verdadeira.
false: Resultado falso da avaliação da regra. O valor pode ser outra <regra> ou vazio.

Se este nó não for especificado ou o valor do nó estiver vazio, a avaliação falsa também será o resultado da avaliação final e o rastreamento não será amostrado.

|___<rule> Nó <rule> da ramificação na avaliação falsa.
Observação

As alterações no arquivo de configuração de amostragem Sampling.acml não requerem a reinicialização do Agente do APM.

Valor de Origem

Se estiver usando pre_sampling_decision, você terá a opção de fornecer as informações de origem.

O valor <source> do arquivo Sampling.acml pode ficar vazio ou pode conter várias origens. Para obter os valores suportados, consulte a tabela abaixo.

Nome da Origem Descrição
programa Origem do Agente do APM.
rum Origem RUM (Monitoramento Real do Usuário).

Não é a extensão do Agente do APM e sempre a extensão pai do Agente Java.

sintético Fonte sintética.

Por padrão, todas as solicitações sintéticas são amostradas.

* Qualquer fonte.
? Qualquer tipo de origem não definido em <source>.
nulo Qualquer pai sem origem identificável.

Exemplos de arquivo Sampling.acml

  1. Regra que se aplica a todos os serviços
    sampling_config:
      -
         sampling:
           # Every trace has 2% chance to be sampled.
           rule: probabilistic
           param: 0.02
  2. Probabilística com contagem mínima
    sampling_config:
      -
         sampling:
          # For every 60 seconds duration, 5 root spans of each operation name are sampled,
          # followed by 10% chance of sampling.
          rule: per-operation-rate
          param: 5/60
          true:
          false:
            rule: probabilistic
            param: 0.1
  3. Amostra apenas operações especificadas
    sampling_config:
      -
         service:
            - order_dept
            - shipping_dept
         operation_priority:
           # For /order operation trace root span, 1 of every 10 traces is sampled.
           - name: "/order"
             rule: constant
             param: 10
           # For /ship operation trace root span, 1 of every 50 traces is sampled.
           - name: "/ship"
             rule: constant
             param: 50
           # For /status_order or /status_ship operations, there is a 50% sampling chance.
           - regex: "/status_(order|ship)"
             rule: probabilistic
             param: 0.5
  4. Outro exemplo de amostra
    sampling_config:
      -
        # With service node, this config is only applied to service s1 and s2.
        service:
          - s1
          - s2
        sampling:
          # 5 root span of any operation name are sampled every 60 seconds. Starting from
          # the 6th span of an operation name, there is a 20% chance the span is sampled.
          rule: per-operation-rate
          param: 5/60
          false:
            rule: probabilistic
            param: 0.2
        operation_priority:
          # For /order operation, 1 of every 10 spans is sampled.
          - name: "/order"
            rule: constant
            param: 10
          # For /ship operation, first 3 are sampled per 60 seconds and then 10% chance after
          - name: "/ship"
            rule: limited-rate
            param: 3/60
            false:
              rule: probabilistic
              param: 0.01
      -
       # With service node, this config is only applied to service s3 and s4.
       service:
         - s3
         - s4
       sampling:
         # There is a 5% chance any trace is sampled.
         rule: probabilistic
         param: 0.05
      -
       # Without service node, this config is applied to any service except s1, s2, s3 and s4.
       sampling:
         # There is a 10% chance any trace is sampled.
         rule: probabilistic
         param: 0.1

Desativar Amostragem

A amostragem é ativada implicitamente quando as propriedades de uma única regra ou o arquivo de configuração é especificado. Ela pode ser desativada explicitamente utilizando a seguinte propriedade:

Tipo de Propriedade Suportado por Property Exemplo
AgentConfig.properties Agente do APM com.oracle.apm.agent.sampling.enabled com.oracle.apm.agent.sampling.enabled=false
Tracer Builder Rastreador do APM com.oracle.apm.agent.sampling.enabled
new ApmTracer.Builder(...)
    ...
    .withProperty(com.oracle.apm.agent.sampling.enabled, "false")
    ...
    .build();
Propriedade do Sistema Agente do APM e Rastreador do APM com.oracle.apm.agent.sampling.enabled -Dcom.oracle.apm.agent.sampling.enabled=false
Variável de Ambiente Agente do APM e Rastreador do APM com_oracle_apm_agent_sampling_enabled

Para Windows:

set com_oracle_apm_agent_sampling_enabled=false

Para Linux:

export com_oracle_apm_agent_sampling_enabled=false

Tag de Intervalo

Se as propriedades da regra de amostragem ou o arquivo de configuração forem especificados e a amostragem não estiver desativada, cada intervalo raiz de rastreamento de amostra terá uma tag SamplingEvaluation de fluxo de avaliação.

Veja abaixo um exemplo de uma árvore de regras usada para avaliação:
rule: per-operation-rate
param: 5/60
false:
     rule: probabilistic
     param: 0.2

Valor da Tag SamplingEvaluation

Veja abaixo o valor da tag SamplingEvaluation do intervalo raiz amostrado:

SamplingEvaluation Tag Value Descrição
per-operation-rate(5/60):true Os primeiros 5 rastreamentos amostrados a cada 60 segundos.
per-operation-rate(5/60):false->probabilistic(0.2):true Os 20% de rastreamentos amostrados após 5 rastreamentos amostrados a cada 60 segundos.