Configura campionatura APM

Il campionamento APM è una configurazione facoltativa per APM Java Agent e APM Tracer per monitorare una frazione degli intervalli in base alla regola di campionamento.

APM Sampling è un'implementazione di campionamento basata sull'intervallo di radici che consente alle tracce campionate di ottenere una rappresentazione di tutte le tracce. La decisione di campionamento si basa su regole di campionamento. Quando si decide di campionare un intervallo radice (come la traccia), vengono campionati anche l'intervallo radice e tutti gli intervalli figlio. Quando non viene campionato un intervallo radice, non vengono campionati tutti gli intervalli figlio.

Regole disponibili

Per il campionamento APM sono disponibili le regole seguenti:

Regola Nome regola Parametro regola Parametro di campionamento Descrizione
Costante costante Intero

(0 o superiore)

50 Campione costante una volta per il valore di parametro specificato.

Ad esempio, se il parametro è impostato su 50, viene campionata la prima delle 50 tracce. Se il parametro è impostato su 0, non viene campionata alcuna traccia. Se il parametro è impostato su 1, viene campionata ogni traccia.

Probabile probabilistico numero decimale compreso tra 0 e 1 0.2 Campione deciso sulla probabilità specificata.

Ad esempio, se il parametro è impostato su 0.2, è possibile che venga campionata una traccia del 20%.

Tariffa limitata tasso limitato <limit>/<seconds> 500/60 Campione fino al limite specificato per ogni finestra dei secondi specificata.

Ad esempio, se il parametro è impostato su 500/60, vengono campionate le prime 500 tracce ogni 60 secondi.

Tasso limitato per operazione tasso per operazione <limit>/<seconds> 10/60 Esempio fino al limite specificato per ogni finestra di secondi specificata per nome operazione.

Ad esempio, se il parametro è impostato su 10/60, vengono campionate le prime 10 tracce di ogni nome operazione ogni 60 secondi.

Nome operazione operazione <op1>,<op2>, ...<opN> /status_order,/status_ship Esempio solo del nome dell'operazione specificato. È possibile specificare più operazioni delimitate da virgole.
Nome operazione in espressione regolare espressione regolare operazione <regex> /status_(ordine|spedizione) Il campione si estende solo con un'operazione che corrisponde all'espressione regolare.

Metodi di configurazione

Per configurare il campionamento APM sono disponibili i metodi riportati di seguito.
  • Proprietà regola singola: un modo semplice per definire una regola applicabile a tutti i trace.
  • File di configurazione: un modo completo per definire i campionamenti, incluse le regole di diramazione e le regole di priorità delle operazioni.

Se entrambi i metodi sono configurati, le proprietà delle singole regole hanno la precedenza sul file di configurazione, pertanto il metodo delle proprietà delle singole regole è quello utilizzato.

Nessuna configurazione di campionamento predefinita. Se non sono state specificate singole proprietà di regola o nessun file di configurazione, vengono campionati tutti i nuovi trace avviati dall'agente APM o da APM Tracer.

Proprietà regola singola

Le proprietà di una singola regola consentono di definire e applicare una sola regola di campionamento a tutti i trace in modo semplice.

Sono disponibili le proprietà riportate di seguito.

Tipo e descrizione proprietà Supportato da Proprietà Esempio

AgentConfig.properties

Aggiornare il file AgentConfig.properties situato nella directory oracle-apm-agent/config/<version>.

Agente 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

Costruttore Tracer

Aggiornare il Tracer Builder.

Tracer 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();

Proprietà di sistema

Aggiornare le proprietà di sistema.

Agente APM e tracciatore 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>

Variabili di ambiente

Aggiornare le variabili di ambiente.

Agente APM e tracciatore APM
com_oracle_apm_agent_sampling_rule
com_oracle_apm_agent_sampling_param
Per Windows:
set com_oracle_apm_agent_sampling_rule=limited-rate
set com_oracle_apm_agent_sampling_param=1000/60
Per Linux:
export com_oracle_apm_agent_sampling_rule=limited-rate
export com_oracle_apm_agent_sampling_param=1000/60

Priorità proprietà: se sono impostate più proprietà, l'ordine di precedenza dal più alto al più basso è il seguente: Proprietà di sistema, Variabili di ambiente e AgentConfig.properties.

File di configurazione

Il file di configurazione consente di specificare tutte le funzioni di campionamento per tutti i servizi in un unico file con le seguenti caratteristiche:

  • Il file di configurazione è in formato ACML (sottoinsieme di YAML) da specificare in Sampling.acml.
  • È possibile definire e condividere più configurazioni di campionamento per servizi diversi da un singolo file di configurazione.
  • La regola di campionamento non è limitata a una. Le regole di esempio possono essere ramificate in altre regole per formare una struttura di regole. Ogni valutazione delle regole ha 2 risultati: true o false. True significa che la traccia viene campionata, altrimenti false. In una regola ramificata, il risultato terminale foglia viene utilizzato per la decisione di campionamento.
  • È possibile assegnare priorità alle regole con nomi specifici con una regola di campionamento specifica.

Per APM Tracer, non esiste una posizione di configurazione predefinita. Il file di configurazione del campionamento deve essere specificato con la proprietà Tracer, la proprietà di sistema o la variabile di ambiente utilizzando la proprietà com.oracle.apm.agent.sampling.file. Il valore della proprietà corrisponde al percorso completo del file di configurazione del campionamento.

La proprietà com.oracle.apm.agent.sampling.file è applicabile solo ad APM Tracer. Per l'agente APM, la proprietà non è necessaria. È necessario inserire il file di campionamento Sampling.acml solo nella directory oracle-apm-agent/config/<version>.

Tipo e descrizione proprietà Supportato da Proprietà Esempio
Costruttore Tracer

Aggiorna il Tracer Builder.

Tracer APM com.oracle.apm.agent.sampling.file
new ApmTracer.Builder(...)
    ...
    .withProperty(com.oracle.apm.agent.sampling.file, "/home/user/apm/config/Sampling.acml")
    ...
    .build();
Proprietà di sistema

Aggiornare le proprietà di sistema.

Agente APM e tracciatore APM com.oracle.apm.agent.sampling.file -Dcom.oracle.apm.agent.sampling.file=/home/user/apm/config/Sampling.acml
Variabile di ambiente

Aggiornare la variabile d'ambiente.

Agente APM e tracciatore APM com_oracle_apm_agent_sampling_file

Per Windows:

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

Per Linux:

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

Il valore della proprietà com.oracle.apm.agent.sampling.file corrisponde al percorso completo del file di configurazione del campionamento. Quando viene specificato, il nome del file di configurazione di campionamento consigliato è Sampling.acml, ma è possibile utilizzare qualsiasi altro nome preferito.

Ci sono 2 strategie di campionamento:
  • Campionatura: utilizza la voce sampling e definisce una struttura di regole per la valutazione del trace.
  • Priorità operazione: utilizza la voce operation_priority e, quando viene definita, sostituisce la campionatura se il nome dell'operazione dell'intervallo radice di trace corrisponde al nome definito. Ogni nome operazione definito ha una propria struttura di regole di decisione.

Decisione pre-campionamento

La decisione di pre-campionamento è una funzione di campionamento che consente al campionatore di prendere una decisione basata sull'intervallo padre prima di applicare la regola di campionamento.

Ad esempio:

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

Per i dettagli sulla sintassi pre_sampling_decision, vedere Formato file Sampling.acml.

Formato file Sampling.acml

Di seguito è riportato il formato file Sampling.acml:

Sampling.acml Descrizione

sampling_config:

Nodo che rappresenta un array di diverse configurazioni di campionamento.

|_-

Elemento array della configurazione del campionamento.

|____service:

Nodo di nomi di servizio a cui è applicata questa configurazione di campionamento.

|_______- <service-name>

Elemento array nome servizio.

|____pre_sampling_decision:

(Facoltativo) Nodo della decisione di pre-campionamento.

La decisione viene valutata nell'ordine di override → far rispettare → ignorare.

Nel caso in cui un'origine sia definita in più di una decisione, viene utilizzata la prima decisione con l'origine corrispondente. Se nessun tipo padre corrisponde a una decisione, l'agente APM segue il flag campionato intervallo padre per l'intervallo locale.

Se non esiste alcun intervallo padre, la regola di campionamento viene valutata per l'intervallo locale.

Tutti i nodi decisionali sono facoltativi. Se non è necessaria alcuna decisione di precampionamento, non è necessario definire pre_sampling_decision.

|_______override: <source>

Esempio di intervallo agente APM locale indipendentemente dal flag campionato padre dell'origine specificata.

Se l'intervallo padre non viene campionato, viene avviata una nuova traccia con l'intervallo locale come radice.

Per i valori source, vedere Valori di origine.

|_______enforce: <source>

Forza la nuova valutazione del campionamento indipendentemente dal flag padre campionato dell'origine specificata.

Se l'intervallo padre non viene campionato e si valuta la campionatura dell'intervallo agente APM locale, viene avviato un nuovo trace.

Se viene campionato l'intervallo padre e viene valutato l'intervallo agente APM locale per la campionatura, l'intervallo agente APM locale continua sulla traccia dell'intervallo padre.

Per i valori source, vedere Valori di origine.

|_______ignore: <source>

Ignora campionamento dell'intervallo agente APM locale del padre specificato.

Per i valori source, vedere Valori di origine.

|____sampling:

Nodo di campionamento di base.

È facoltativo se si utilizza il nodo operation_priority.

|_______<rule>

Albero delle regole di campionamento di questa configurazione.

|____operation_priority:

Array di nomi di operazione con regole che sostituiscono la regola di campionamento di base.

|_______- name: <operation-name>

Nome corrispondente al nome dell'operazione di intervallo radice traccia.

|_______<rule>

Regola da applicare se corrispondente.

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

Espressione regolare per la corrispondenza con il nome dell'operazione di intervallo radice traccia.

|_______<rule>

Regola da applicare se corrispondente.
  • Se il nodo del servizio (service:) non viene specificato, la configurazione di campionamento viene applicata a tutti i servizi senza una configurazione di campionamento dedicata. Quando più configurazioni hanno lo stesso nome di servizio, viene utilizzata solo l'ultima configurazione con tale nome di servizio.

    Se un file dispone di configurazioni con e senza questo nodo del servizio, viene assegnata la priorità alla configurazione con il nome del servizio corrispondente all'agente APM o al nome del servizio APM Tracer.

  • Quando i nodi di campionamento (sampling:) e operation_priority (operation_priority:) sono entrambi specificati, viene assegnata la priorità a operation_priority. Se il nome dell'intervallo radice traccia corrisponde al nome dell'operazione dal nodo operation_priority, viene valutato con la regola associata al nome dell'operazione. Se il nome dell'intervallo radice traccia non corrisponde ad alcun nome operazione dal nodo operation_priority, viene valutato il nodo di campionamento.

  • Se il nodo di campionamento (sampling:) non viene specificato o non viene specificata alcuna regola, il trace non viene campionato se non è applicabile alcuna regola operation_priority.

  • Se si specifica il nodo operation_priority (operation_priority:), se il nome dell'operazione dell'intervallo radice di trace corrisponde a qualsiasi nome di operazione operation_priority, per la valutazione viene utilizzata la regola del nome corrispondente anziché la regola di campionamento di base.

Nodo regola

Il nodo regola del file Sampling.acml ha il formato seguente:

<rule> nodo Descrizione
rule: <rule_name> Nome della regola di campionamento.
param: <rule_parameter> Parametro della regola.
true: Vero risultato della valutazione delle regole. Il valore può essere un'altra <rule> o vuoto.

Se questo nodo non viene specificato o il valore del nodo è vuoto, la valutazione vera sarà anche il risultato finale della valutazione del campionamento e la traccia verrà campionata.

|___<rule> Nodo <rule> diramazione nella valutazione vera e propria.
false: Risultato falso della valutazione delle regole. Il valore può essere un'altra <rule> o vuoto.

Se questo nodo non viene specificato o il valore del nodo è vuoto, anche la valutazione falsa rappresenta il risultato finale della valutazione e la traccia non viene campionata.

|___<rule> Ramo <rule> nodo su valutazione falsa.
Nota

Le modifiche al file di configurazione del campionamento Sampling.acml non richiedono il riavvio dell'agente APM.

Valore di origine

Se si utilizza pre_sampling_decision, è possibile fornire le informazioni sull'origine.

Il valore <source> del file Sampling.acml può essere vuoto o contenere più origini. Per i valori supportati, vedere la tabella riportata di seguito.

Nome origine Descrizione
apm Origine agente APM.
rum Origine RUM (Real User Monitoring).

Non si tratta dell'intervallo agente APM e sempre dell'intervallo padre dell'agente Java.

sintetico Fonte sintetica.

Per impostazione predefinita, vengono campionate tutte le richieste sintetiche.

* Qualsiasi origine.
? Qualsiasi tipo di origine non definito in <source>.
nullo Qualsiasi padre senza origine identificabile.

Esempi di file Sampling.acml

  1. Regola applicabile a tutti i servizi
    sampling_config:
      -
         sampling:
           # Every trace has 2% chance to be sampled.
           rule: probabilistic
           param: 0.02
  2. Probabile con conteggio minimo
    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. Operazioni specificate solo campione
    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. Altro esempio
    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

Disabilita campionamento

Il campionamento viene abilitato in modo implicito quando vengono specificate proprietà di una singola regola o file di configurazione. È quindi possibile disabilitarlo in modo esplicito utilizzando la proprietà seguente:

Tipo di proprietà Supportato da Proprietà Esempio
AgentConfig.properties Agente APM com.oracle.apm.agent.sampling.enabled com.oracle.apm.agent.sampling.enabled=false
Costruttore Tracer Tracer APM com.oracle.apm.agent.sampling.enabled
new ApmTracer.Builder(...)
    ...
    .withProperty(com.oracle.apm.agent.sampling.enabled, "false")
    ...
    .build();
Proprietà di sistema Agente APM e tracciatore APM com.oracle.apm.agent.sampling.enabled -Dcom.oracle.apm.agent.sampling.enabled=false
Variabile di ambiente Agente APM e tracciatore APM com_oracle_apm_agent_sampling_enabled

Per Windows:

set com_oracle_apm_agent_sampling_enabled=false

Per Linux:

export com_oracle_apm_agent_sampling_enabled=false

Tag intervallo

Se vengono specificate le proprietà della regola di campionamento o il file di configurazione e la campionatura non è disabilitata, ogni intervallo radice di trace campionato ha un tag SamplingEvaluation del flusso di valutazione.

Di seguito è riportato un esempio di struttura di regole utilizzata per la valutazione.
rule: per-operation-rate
param: 5/60
false:
     rule: probabilistic
     param: 0.2

SamplingEvaluation Valore tag

Vedere di seguito il valore del tag SamplingEvaluation dell'intervallo root campionato:

SamplingEvaluation Valore tag descrizione;
per operazione-tasso (5/60):true Le prime 5 tracce campionate ogni 60 secondi.
tasso per operazione (5/60): falso->probabilistico (0.2): vero Il 20% delle tracce campionate dopo 5 tracce campionate ogni 60 secondi.