Condividi tramite


Esempi di processore di telemetria - Application Insights per Monitoraggio di Azure per Java

Questo articolo fornisce esempi di processori di telemetria in Application Insights per Java, inclusi esempi per includere ed escludere configurazioni. Include anche esempi per processori di attributi e processori di estensione.

Includere ed escludere esempi span

In questa sezione viene illustrato come includere ed escludere intervalli. Si apprenderà anche come escludere più intervalli e applicare l'elaborazione selettiva.

Includi intervalli

Questa sezione illustra come includere intervalli per un processore di attributi. Il processore non elabora intervalli che non corrispondono alle proprietà.

Una corrispondenza richiede che il nome dell'intervallo sia uguale a spanA o spanB.

Questi intervalli corrispondono alle include proprietà e vengono applicate le azioni del processore:

  • Span1 Name: Attributi 'spanA': {env: dev, test_request: 123, credit_card: 1234}
  • Span2 Name: Attributi 'spanB': {env: dev, test_request: false}
  • Span3 Name: Attributi 'spanA': {env: 1, test_request: dev, credit_card: 1234}

Questo intervallo non corrisponde alle include proprietà e le azioni del processore non vengono applicate:

  • Span4 Name: Attributi 'spanC': {env: dev, test_request: false}
{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "include": {
          "matchType": "strict",
          "spanNames": [
            "spanA",
            "spanB"
          ]
        },
        "actions": [
          {
            "key": "credit_card",
            "action": "delete"
          }
        ]
      }
    ]
  }
}

Escludi intervalli

Questa sezione illustra come escludere gli intervalli per un processore di attributi. Questo processore non elabora intervalli che corrispondono alle proprietà.

Una corrispondenza richiede che il nome dell'intervallo sia uguale a spanA o spanB.

Gli intervalli seguenti corrispondono alle exclude proprietà e le azioni del processore non vengono applicate:

  • Span1 Name: Attributi 'spanA': {env: dev, test_request: 123, credit_card: 1234}
  • Span2 Name: Attributi 'spanB': {env: dev, test_request: false}
  • Span3 Name: Attributi 'spanA': {env: 1, test_request: dev, credit_card: 1234}

Questo intervallo non corrisponde alle exclude proprietà e vengono applicate le azioni del processore:

  • Span4 Name: Attributi 'spanC': {env: dev, test_request: false}
{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "exclude": {
          "matchType": "strict",
          "spanNames": [
            "spanA",
            "spanB"
          ]
        },
        "actions": [
          {
            "key": "credit_card",
            "action": "delete"
          }
        ]
      }
    ]
  }
}

Escludere intervalli usando più criteri

Questa sezione illustra come escludere gli intervalli per un processore di attributi. Questo processore non elabora intervalli che corrispondono alle proprietà.

Una corrispondenza richiede che vengano soddisfatte le condizioni seguenti:

  • Un attributo (ad esempio, env con valore dev) deve esistere nell'intervallo.
  • L'intervallo deve avere un attributo con chiave test_request.

Gli intervalli seguenti corrispondono alle exclude proprietà e le azioni del processore non vengono applicate.

  • Span1 Name: Attributi 'spanB': {env: dev, test_request: 123, credit_card: 1234}
  • Span2 Name: Attributi 'spanA': {env: dev, test_request: false}

L'intervallo seguente non corrisponde alle exclude proprietà e vengono applicate le azioni del processore:

  • Span3 Name: Attributi 'spanB': {env: 1, test_request: dev, credit_card: 1234}
  • Span4 Name: Attributi 'spanC': {env: dev, dev_request: false}
{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "exclude": {
          "matchType": "strict",
          "spanNames": [
            "spanA",
            "spanB"
          ],
          "attributes": [
            {
              "key": "env",
              "value": "dev"
            },
            {
              "key": "test_request"
            }
          ]
        },
        "actions": [
          {
            "key": "credit_card",
            "action": "delete"
          }
        ]
      }
    ]
  }
}

Elaborazione selettiva

Questa sezione illustra come specificare il set di proprietà span che indicano a quali intervalli deve essere applicato questo processore. Le include proprietà indicano quali intervalli devono essere elaborati. Le exclude proprietà filtrano gli intervalli che non devono essere elaborati.

Nella configurazione seguente, questi intervalli corrispondono alle proprietà e vengono applicate le azioni del processore:

  • Span1 Name: Attributi 'spanB': {env: production, test_request: 123, credit_card: 1234, redact_trace: "false"}
  • Span2 Name: Attributi 'spanA': {env: staging, test_request: false, redact_trace: true}

Questi intervalli non corrispondono alle include proprietà e le azioni del processore non vengono applicate:

  • Span3 Name: Attributi 'spanB': {env: production, test_request: true, credit_card: 1234, redact_trace: false}
  • Span4 Name: Attributi 'spanC': {env: dev, test_request: false}
{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "include": {
          "matchType": "strict",
          "spanNames": [
            "spanA",
            "spanB"
          ]
        },
        "exclude": {
          "matchType": "strict",
          "attributes": [
            {
              "key": "redact_trace",
              "value": "false"
            }
          ]
        },
        "actions": [
          {
            "key": "credit_card",
            "action": "delete"
          },
          {
            "key": "duplicate_key",
            "action": "delete"
          }
        ]
      }
    ]
  }
}

Esempi di processore di attributi

Inserisci

L'esempio seguente inserisce il nuovo attributo {"attribute1": "attributeValue1"} in intervalli e log in cui la chiave attribute1 non esiste.

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "actions": [
          {
            "key": "attribute1",
            "value": "attributeValue1",
            "action": "insert"
          }
        ]
      }
    ]
  }
}

Inserisci da un'altra chiave

Nell'esempio seguente viene usato il valore dell'attributo anotherkey per inserire il nuovo attributo {"newKey": "<value from attribute anotherkey>"} in intervalli e log in cui la chiave newKey non esiste. Se l'attributo anotherkey non esiste, non viene inserito alcun nuovo attributo in intervalli e log.

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "actions": [
          {
            "key": "newKey",
            "fromAttribute": "anotherKey",
            "action": "insert"
          }
        ]
      }
    ]
  }
}

Aggiornamento

Nell'esempio seguente l'attributo viene aggiornato a {"db.secret": "redacted"}. Aggiorna l'attributo boo usando il valore dell'attributo foo. Gli intervalli e i log che non hanno l'attributo boo non cambiano.

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "actions": [
          {
            "key": "db.secret",
            "value": "redacted",
            "action": "update"
          },
          {
            "key": "boo",
            "fromAttribute": "foo",
            "action": "update" 
          }
        ]
      }
    ]
  }
}

Elimina

Nell'esempio seguente viene illustrato come eliminare un attributo con la chiave credit_card.

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "actions": [
          {
            "key": "credit_card",
            "action": "delete"
          }
        ]
      }
    ]
  }
}

Hash

Nell'esempio seguente viene illustrato come eseguire l'hashing dei valori di attributo esistenti.

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "actions": [
          {
            "key": "user.email",
            "action": "hash"
          }
        ]
      }
    ]
  }
}

Estrazione

Nell'esempio seguente viene illustrato come usare un'espressione regolare (regex) per creare nuovi attributi in base al valore di un altro attributo. Ad esempio, dato url.path = /path?queryParam1=value1,queryParam2=value2, vengono inseriti gli attributi seguenti:

  • httpProtocol: http
  • httpDomain: example.com
  • httpPath: path
  • httpQueryParams: queryParam1=value1,queryParam2=value2
  • url.path: nessuna modifica
{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "actions": [
          {
            "key": "url.path",
            "pattern": "^(?<httpProtocol>.*):\\/\\/(?<httpDomain>.*)\\/(?<httpPath>.*)(\\?|\\&)(?<httpQueryParams>.*)",
            "action": "extract"
          }
        ]
      }
    ]
  }
}

Maschera

Ad esempio, dato url.path = https://example.com/user/12345622 viene aggiornato all'uso url.path = https://example.com/user/**** di una delle configurazioni seguenti.

Primo esempio di configurazione:

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "actions": [
          {
            "key": "url.path",
            "pattern": "user\\/\\d+",
            "replace": "user\\/****",
            "action": "mask"
          }
        ]
      }
    ]
  }
}

Secondo esempio di configurazione con il nome del gruppo di espressioni regolari:

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "actions": [
          {
            "key": "url.path",
            "pattern": "^(?<userGroupName>[a-zA-Z.:\/]+)\d+",
            "replace": "${userGroupName}**",
            "action": "mask"
          }
        ]
      }
    ]
  }
}

Esempi di attributi tipizzato non di stringa

A partire dalla versione 3.4.19 ga, i processori di telemetria supportano attributi tipiti non di stringa: boolean, doublelong, boolean-array, double-array, long-array, e string-array.

Quando attributes.type non viene fornito nel file JSON, per impostazione predefinita stringè .

L'esempio seguente inserisce il nuovo attributo {"newAttributeKeyStrict": "newAttributeValueStrict"} in intervalli e log in cui gli attributi corrispondono agli esempi seguenti: {"longAttributeKey": 1234}{"booleanAttributeKey": true}{"doubleArrayAttributeKey": [1.0, 2.0, 3.0, 4.0]}

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "include": {
          "matchType": "strict",
          "attributes": [
            {
              "key": "longAttributeKey",
              "value": 1234,
              "type": "long"
            },
            {
              "key": "booleanAttributeKey",
              "value": true,
              "type": "boolean"
            },
            {
              "key": "doubleArrayAttributeKey",
              "value": [1.0, 2.0, 3.0, 4.0],
              "type": "double-array"
            }
          ]
        },
        "actions": [
          {
            "key": "newAttributeKeyStrict",
            "value": "newAttributeValueStrict",
            "action": "insert"
          }
        ],
        "id": "attributes/insertNewAttributeKeyStrict"
      }
    ]
  }
}

Inoltre, gli attributi tipizzato non di stringa supportano regexp.

Nell'esempio seguente il nuovo attributo {"newAttributeKeyRegexp": "newAttributeValueRegexp"} viene inserito in intervalli e log in cui l'attributo longRegexpAttributeKey corrisponde al valore da 400 a 499.

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "include": {
          "matchType": "regexp",
          "attributes": [
            {
              "key": "longRegexpAttributeKey",
              "value": "4[0-9][0-9]",
              "type": "long"
            }
          ]
        },
        "actions": [
          {
            "key": "newAttributeKeyRegexp",
            "value": "newAttributeValueRegexp",
            "action": "insert"
          }
        ],
        "id": "attributes/insertNewAttributeKeyRegexp"
      }
    ]
  }
}

Esempi di processori span

Assegnare un nome a span

Nell'esempio seguente vengono specificati i valori degli attributi db.svc, operatione id. Forma il nuovo nome dell'intervallo usando tali attributi, in tale ordine, separati dal valore ::.

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "span",
        "name": {
          "fromAttributes": [
            "db.svc",
            "operation",
            "id"
          ],
          "separator": "::"
        }
      }
    ]
  }
}

Estrarre attributi da un nome span

Si supponga che il nome dell'intervallo di input sia /api/v1/document/12345678/update. Nell'esempio seguente viene restituito il nome /api/v1/document/{documentId}/updatedell'intervallo di output . Aggiunge il nuovo attributo documentId=12345678 all'intervallo.

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "span",
        "name": {
          "toAttributes": {
            "rules": [
              "^/api/v1/document/(?<documentId>.*)/update$"
            ]
          }
        }
      }
    ]
  }
}

Estrarre gli attributi da un nome di intervallo usando includi ed escludi

Nell'esempio seguente viene illustrato come modificare il nome dell'intervallo in {operation_website}. Aggiunge un attributo con chiave operation_website e valore {oldSpanName} quando l'intervallo ha le proprietà seguenti:

  • Il nome dell'intervallo contiene / un punto qualsiasi della stringa.
  • Il nome dell'intervallo non donot/changeè .
{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "span",
        "include": {
          "matchType": "regexp",
          "spanNames": [
            "^(.*?)/(.*?)$"
          ]
        },
        "exclude": {
          "matchType": "strict",
          "spanNames": [
            "donot/change"
          ]
        },
        "name": {
          "toAttributes": {
            "rules": [
              "(?<operation_website>.*?)$"
            ]
          }
        }
      }
    ]
  }
}

Esempi di processore di log

Estrarre attributi da un corpo del messaggio di log

Si supponga che il corpo del messaggio del log di input sia Starting PetClinicApplication on WorkLaptop with PID 27984 (C:\randompath\target\classes started by userx in C:\randompath). Nell'esempio seguente viene restituito il corpo Starting PetClinicApplication on WorkLaptop with PID {PIDVALUE} (C:\randompath\target\classes started by userx in C:\randompath)del messaggio di output . Aggiunge il nuovo attributo PIDVALUE=27984 al log.

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "log",
        "body": {
          "toAttributes": {
            "rules": [
              "^Starting PetClinicApplication on WorkLaptop with PID (?<PIDVALUE>\\d+) .*"
            ]
          }
        }
      }
    ]
  }
}

Mascherare i dati sensibili nel messaggio di log

L'esempio seguente illustra come mascherare i dati sensibili in un corpo del messaggio di log usando sia il processore di log che l'elaboratore di attributi. Si supponga che il corpo del messaggio del log di input sia User account with userId 123456xx failed to login. Il processore di log aggiorna il corpo del messaggio di output in User account with userId {redactedUserId} failed to login e il processore di attributi elimina il nuovo attributo redactedUserId, che è stato aggiunto nel passaggio precedente.

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "log",
        "body": {
          "toAttributes": {
            "rules": [
              "userId (?<redactedUserId>[0-9a-zA-Z]+)"
            ]
          }
        }
      },
      {
        "type": "attribute",
        "actions": [
          {
            "key": "redactedUserId",
            "action": "delete"
          }
        ]
      }
    ]
  }
}

Domande frequenti

Perché i file di log del processore di log non usano TelemetryClient.trackTrace()?

TelemetryClient.trackTrace() fa parte del bridge di Application Insights Classic SDK e i processori di log funzionano solo con la nuova strumentazione basata su OpenTelemetry.