APM-Sampling konfigurieren

APM Sampling ist eine optionale Konfiguration für APM Java Agent und APM Tracer, um einen Bruchteil der Spans basierend auf der Samplingregel zu überwachen.

APM-Sampling ist eine Root-Span-basierte Samplingimplementierung, die es ermöglicht, dass die gesampelten Traces für alle Traces repräsentativ sein können. Die Samplingentscheidung basiert auf Samplingregeln. Wenn ein Root-Span (ebenso wie ein Trace) gesampelt wird, werden der Root-Span und auch alle untergeordneten Spans gesampelt. Wenn ein Root-Span nicht gesampelt wird, werden auch alle untergeordneten Spans nicht gesampelt.

Verfügbare Regeln

Die folgenden Regeln sind für das APM-Sampling verfügbar:

Regel Regelname Regelparameter Sampleparameter Beschreibung
Konstant constant Ganzzahl

(0 oder höher)

50 Konstantes Sampling einmal pro angegebenem Parameterwert.

Beispiel: Wenn der Parameter auf 50 gesetzt ist, wird das erste aller 50 Traces gesampelt. Wenn der Parameter auf 0 gesetzt ist, wird kein Trace gesampelt. Wenn der Parameter auf 1 gesetzt ist, wird jedes Trace gesampelt.

Probabilistisch probabilistic Dezimalzahl zwischen 0 und 1 0,2 Sampling anhand der angegebenen Wahrscheinlichkeit.

Beispiel: Wenn der Parameter auf 0,2 gesetzt ist, wird ein Trace mit einer Wahrscheinlichkeit von 20 % gesampelt.

Begrenzte Rate limited-rate <limit>/<seconds> 500/60 Sampling bis zum angegebenen Grenzwert für jedes angegebene Sekundenfenster.

Beispiel: Wenn der Parameter auf 500/60 gesetzt ist, werden die ersten 500 Traces alle 60 Sekunden gesampelt.

Begrenzte Rate pro Vorgang per-operation-rate <limit>/<seconds> 10/60 Sampling bis zum angegebenen Grenzwert für jedes angegebene Sekundenfenster pro Vorgangsname.

Beispiel: Wenn der Parameter auf 10/60 gesetzt ist, werden die ersten 10 Traces jedes Vorgangsnamens alle 60 Sekunden gesampelt.

Vorgangsname operation <op1> ,<op2>, ... <opN> /status_order, /status_ship Nur Sampling des angegebenen Vorgangsnamens. Mehrere Vorgänge können durch Komma getrennt angegeben werden.
Vorgangsname in regulärem Ausdruck operation-regex <regex> /status_(order|ship) Nur Sampling von Spans mit einem Vorgang, der dem regulären Ausdruck entspricht.

Konfigurationsmethoden

Die folgenden Methoden sind zur Konfiguration des APM-Samplings verfügbar:
  • Eigenschaften einer einzelnen Regel: Eine einfache Möglichkeit, eine Regel für alle Traces zu definieren.
  • Konfigurationsdatei: Eine umfassende Methode zur Definition von Samplings einschließlich Verzweigungsregeln und Prioritätsregeln für Vorgänge.

Wenn beide Methoden konfiguriert sind, haben die Eigenschaften einer einzelnen Regel Vorrang vor der Konfigurationsdatei und werden daher verwendet.

Es gibt keine Standardkonfiguration für das Sampling. Wenn keine Eigenschaften einer einzelnen Regel oder keine Konfigurationsdatei angegeben wurden, werden alle vom APM-Agent oder APM-Tracer gestarteten neuen Traces gesampelt.

Eigenschaften einer einzelnen Regel

Mit den Eigenschaften einer einzelnen Regel kann auf einfache Weise eine Samplingregel definiert und auf alle Traces angewendet werden.

Folgende Eigenschaften sind verfügbar:

Eigenschaftstyp und Beschreibung Unterstützt von Eigenschaften Beispiel

AgentConfig.properties

Datei AgentConfig.properties im Verzeichnis oracle-apm-agent/config/<version> aktualisieren.

APM-Agent
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

Tracer Builder aktualisieren.

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

Systemeigenschaften

Systemeigenschaften aktualisieren.

APM-Agent und APM-Tracer
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>

Umgebungsvariablen

Umgebungsvariablen aktualisieren.

APM-Agent und APM-Tracer
com_oracle_apm_agent_sampling_rule
com_oracle_apm_agent_sampling_param
Windows:
set com_oracle_apm_agent_sampling_rule=limited-rate
set com_oracle_apm_agent_sampling_param=1000/60
Linux:
export com_oracle_apm_agent_sampling_rule=limited-rate
export com_oracle_apm_agent_sampling_param=1000/60

Eigenschaftenpriorität: Wenn mehrere Eigenschaften festgelegt sind, lautet die Prioritätsreihenfolge von hoch nach niedrig wie folgt: Systemeigenschaften, Umgebungsvariablen und AgentConfig.properties.

Konfigurationsdatei

Mit der Konfigurationsdatei können alle Samplingfeatures für alle Services in einer einzigen Datei mit den folgenden Eigenschaften angegeben werden:

  • Die Konfigurationsdatei hat das ACML-Format (Untergruppe von YAML) und muss in sampling.acml angegeben werden.
  • Mehrere Samplingkonfigurationen für verschiedene Services können definiert und von einer einzelnen Konfigurationsdatei gemeinsam verwendet werden.
  • Mehrere Samplingregeln können verwendet werden. Samplingregeln können in andere Regeln verzweigt werden, um einen Regelbaum zu bilden. Jede Regelauswertung hat 2 Ergebnisse: wahr oder falsch. Wahr bedeutet, dass das Trace gesampelt wird. Falsch bedeutet das Gegenteil. In einer verzweigten Regel wird das Ergebnis des Endblatts für die Samplingentscheidung herangezogen.
  • Regeln mit bestimmten Namen können mit ihrer eigenen Samplingregel priorisiert werden.

Für den APM-Tracer gibt es kein Standardkonfigurationsverzeichnis. Die Samplingkonfigurationsdatei muss mit der Tracer-Eigenschaft, der Systemeigenschaft oder Umgebungsvariablen mit der Eigenschaft com.oracle.apm.agent.sampling.file angegeben werden. Der Eigenschaftswert ist der vollständige Pfad der Samplingkonfigurationsdatei.

Die Eigenschaft com.oracle.apm.agent.sampling.file gilt nur für den APM-Tracer. Für den APM-Agent ist die Eigenschaft nicht erforderlich. Sie müssen lediglich die Samplingdatei sampling.acml im Verzeichnis oracle-apm-agent/config/<version> speichern.

Eigenschaftstyp und Beschreibung Unterstützt von Eigenschaft Beispiel
Tracer Builder

Tracer Builder aktualisieren.

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

Systemeigenschaften aktualisieren.

APM-Agent und APM-Tracer com.oracle.apm.agent.sampling.file -Dcom.oracle.apm.agent.sampling.file=/home/user/apm/config/Sampling.acml
Umgebungsvariable

Umgebungsvariable aktualisieren.

APM-Agent und APM-Tracer com_oracle_apm_agent_sampling_file

Windows:

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

Linux:

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

Der Eigenschaftswert com.oracle.apm.agent.sampling.file ist der vollständige Pfad der Samplingkonfigurationsdatei. Wenn er angegeben wird, lautet der empfohlene Name der Samplingkonfigurationsdatei sampling.acml. Sie können jedoch einen anderen bevorzugten Namen verwenden.

Es gibt zwei Samplingstrategien:
  • Sampling: Dabei werden der sampling-Eintrag verwendet und ein Regelbaum für die Traceauswertung definiert.
  • Vorgangspriorität: Dabei werden der operation_priority-Eintrag verwendet und bei Definition das Sampling überschrieben, wenn der Name des Trace-Root-Span-Vorgangs mit dem definierten Namen übereinstimmt. Jeder definierte Vorgangsname hat einen eigenen Entscheidungsregelbaum.

Entscheidung vor Stichprobe

Die Vorababababtastung ist ein Sampling-Feature, mit dem der Sampler eine Entscheidung auf Basis des übergeordneten Bereichs treffen kann, bevor die Samplingregel angewendet wird.

Beispiel:

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

Details zur Syntax pre_sampling_decision finden Sie unter Sampling.acml-Dateiformat.

Format der Datei sampling.acml

Die Datei sampling.acml hat folgendes Format:

Sampling.acml Beschreibung

sampling_config:

Knoten, der ein Array verschiedener Samplingkonfigurationen darstellt.

|_-

Arrayelement der Samplingkonfiguration.

|____service:

Knoten der Servicenamen, auf den diese Samplingkonfiguration angewendet wird.

|_______- <service-name>

Arrayelement der Servicenamen.

|____pre_sampling_decision:

(Optional) Knoten der Entscheidung vor der Stichprobe.

Die Entscheidung wird in der Reihenfolge der Überschreibung ausgewertet → erzwingen → ignorieren.

Wenn eine Quelle in mehreren Entscheidungen definiert ist, wird die erste Entscheidung mit der übereinstimmenden Quelle verwendet. Wenn kein übergeordneter Typ mit einer Entscheidung übereinstimmt, folgt der APM-Agent dem übergeordneten Kennzeichen "Abgetastet" für den lokalen Bereich.

Wenn kein übergeordneter Bereich vorhanden ist, wird die Samplingregel für den lokalen Bereich ausgewertet.

Alle Entscheidungsknoten sind optional. Wenn keine Entscheidung vor der Stichprobe erforderlich ist, darf pre_sampling_decision nicht definiert werden.

|_______override: <source>

Beispiel für einen lokalen APM-Agent erstreckt sich unabhängig vom übergeordneten Stichproben-Flag der angegebenen Quelle.

Wenn der übergeordnete Bereich nicht abgefragt wird, wird ein neues Trace mit dem lokalen Bereich als Root gestartet.

Informationen zu source-Werten finden Sie unter Quellwerte.

|_______enforce: <source>

Erzwingen Sie die erneute Stichprobenprüfung unabhängig vom übergeordneten Stichproben-Flag der angegebenen Quelle.

Wenn der übergeordnete Bereich nicht abgefragt wird und die lokale APM-Agent-Spanne als abgetastet ausgewertet wird, wird ein neues Trace gestartet.

Wenn der übergeordnete Bereich abgefragt wird und die lokale APM-Agent-Spanne als Musterabgabe ausgewertet wird, wird die lokale APM-Agent-Spanne auf dem Trace des übergeordneten Bereichs fortgesetzt.

Informationen zu source-Werten finden Sie unter Quellwerte.

|_______ignore: <source>

Ignorieren Sie das Sampling der lokalen APM-Agent-Spanne des angegebenen übergeordneten Elements.

Informationen zu source-Werten finden Sie unter Quellwerte.

|____sampling:

Knoten des Basissamplings.

Ist optional, wenn der Knoten operation_priority verwendet wird.

|_______<rule>

Samplingregelbaum dieser Konfiguration.

|____operation_priority:

Array der Vorgangsnamen mit Regeln, die die Basissamplingregel überschreiben.

|_______- name: <operation-name>

Name, der mit dem Namen des Trace-Root-Span-Vorgangs abgeglichen wird.

|_______<rule>

Bei Übereinstimmung anzuwendende Regel.

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

Regulärer Ausdruck, der mit dem Namen des Trace-Root-Span-Vorgangs abgeglichen wird.

|_______<rule>

Bei Übereinstimmung anzuwendende Regel.
  • Wenn der Serviceknoten (service:) nicht angegeben ist, wird die Samplingkonfiguration auf alle Services ohne dedizierte Samplingkonfiguration angewendet. Wenn mehrere Konfigurationen denselben Servicenamen haben, wird nur die letzte Konfiguration mit diesem Servicenamen verwendet.

    Wenn eine Datei Konfigurationen mit diesem Serviceknoten und ohne ihn hat, wird die Konfiguration mit dem Servicenamen priorisiert, der mit dem Servicenamen des APM-Agent oder APM-Tracers übereinstimmt.

  • Wenn die Knoten sampling (sampling:) und operation_priority (operation_priority:) angegeben werden, wird operation_priority priorisiert. Wenn der Name des Trace-Root-Spans mit dem Vorgangsnamen des Knotens operation_priority übereinstimmt, wird er mit der mit dem Vorgangsnamen verknüpften Regel ausgewertet. Wenn der Name des Trace-Root-Spans mit keinen Vorgangsnamen des Knotens operation_priority übereinstimmt, wird der Knoten sampling ausgewertet.

  • Wenn kein Sampling-Knoten (sampling:) angegeben ist oder keine Regel angegeben ist, wird der Trace nicht in die Stichprobe einbezogen, wenn keine operation_priority-Regel angewendet wird.

  • Wenn der Knoten operation_priority (operation_priority:) angegeben ist und der Name des Trace-Root-Span-Vorgangs mit einem operation_priority-Vorgangsnamen übereinstimmt, wird die Regel des übereinstimmenden Namens anstelle der Basissamplingregel für die Auswertung verwendet.

Regelknoten

Der Regelknoten aus der Datei sampling.acml hat das folgende Format:

Knoten <rule> Beschreibung
Regel: <rule_name> Name der Samplingregel.
Param: <rule_parameter> Parameter der Regel.
true: Ergebnis der Regelauswertung "true". Der Wert kann ein anderer <rule>-Wert oder leer sein.

Wenn dieser Knoten nicht angegeben ist oder der Knotenwert leer ist, ist das Auswertungsergebnis "true" auch das endgültige Ergebnis der Samplingauswertung, und das Trace wird gesampelt.

|___<rule> Verzweigungsknoten <rule> bei Auswertungsergebnis "true".
false: Ergebnis der Regelauswertung "false". Der Wert kann ein anderer <rule>-Wert oder leer sein.

Wenn dieser Knoten nicht angegeben ist oder der Knotenwert leer ist, ist das Auswertungsergebnis "false" auch das endgültige Auswertungsergebnis, und das Trace wird nicht gesampelt.

|___<rule> Verzweigungsknoten <rule> bei Auswertungsergebnis "false".
Hinweis

Bei Änderungen an der Samplingkonfigurationsdatei sampling.acml muss der APM-Agent nicht neu gestartet werden.

Quellwert

Wenn Sie pre_sampling_decision verwenden, können Sie die Quellinformationen angeben.

Der Wert <source> aus der Datei Sampling.acml kann leer sein oder mehrere Quellen enthalten. Die unterstützten Werte finden Sie in der folgenden Tabelle.

Quellenname Beschreibung
API APM-Agent-Quelle.
Rum RUM-(Real User Monitoring-)Quelle.

Er umfasst nicht den APM-Agent und immer den übergeordneten Bereich des Java-Agents.

synthetisch Synthetische Quelle.

Standardmäßig werden alle synthetischen Anforderungen abgetastet.

* Beliebige Quelle.
? Kein Quelltyp in <source> definiert.
Null Alle übergeordneten Elemente ohne identifizierbare Quelle.

Beispiele für die Datei sampling.acml

  1. Regel, die auf alle Services angewendet wird
    sampling_config:
      -
         sampling:
           # Every trace has 2% chance to be sampled.
           rule: probabilistic
           param: 0.02
  2. Probabilistisch mit Mindestanzahl
    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. Nur angegebene Vorgänge sampeln
    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. Beispiel für ein weiteres Sampling
    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

Sampling deaktivieren

Das Sampling wird implizit aktiviert, wenn entweder Eigenschaften einer einzelnen Regel oder die Konfigurationsdatei angegeben werden. Es kann mit der folgenden Eigenschaft explizit deaktiviert werden:

Eigenschaftstyp Unterstützt von Eigenschaft Beispiel
AgentConfig.properties APM-Agent com.oracle.apm.agent.sampling.enabled com.oracle.apm.agent.sampling.enabled=false
Tracer Builder APM-Tracer com.oracle.apm.agent.sampling.enabled
new ApmTracer.Builder(...)
    ...
    .withProperty(com.oracle.apm.agent.sampling.enabled, "false")
    ...
    .build();
Systemeigenschaft APM-Agent und APM-Tracer com.oracle.apm.agent.sampling.enabled -Dcom.oracle.apm.agent.sampling.enabled=false
Umgebungsvariable APM-Agent und APM-Tracer com_oracle_apm_agent_sampling_enabled

Windows:

set com_oracle_apm_agent_sampling_enabled=false

Linux:

export com_oracle_apm_agent_sampling_enabled=false

Span-Tag

Wenn Samplingregeleigenschaften oder die Konfigurationsdatei angeben sind und das Sampling nicht deaktiviert ist, hat jeder gesampelte Trace-Root-Span ein Tag SamplingEvaluation des Auswertungsablaufs.

Nachfolgend finden Sie ein Beispiel für einen Regelbaum für die Auswertung:
rule: per-operation-rate
param: 5/60
false:
     rule: probabilistic
     param: 0.2

SamplingEvaluation-Tagwert

Nachfolgend finden Sie den Wert des Tags SamplingEvaluation des gesampelten Root-Spans:

SamplingEvaluation-Tagwert Beschreibung
per-operation-rate(5/60):true Die ersten 5 gesampelten Traces alle 60 Sekunden.
per-operation-rate(5/60):false->probabilistic(0.2):true Die 20 % Traces, die nach 5 gesampelten Traces alle 60 Sekunden gesampelt wurden.