Beispiele für Telemetrieprozessoren: Azure Monitor Application Insights für Java
Dieser Artikel enthält Beispiele für Telemetrieprozessoren in Application Insights für Java, einschließlich Beispielen für ein- und ausschließende Konfigurationen. Sie finden auch Beispiele für attribute-Prozessoren und span-Prozessoren.
Beispiele für das Ein- und Ausschließen von span-Elementen
In diesem Abschnitt erfahren Sie, wie Sie span-Elemente einschließen und ausschließen. Sie erfahren auch, wie Sie mehrere span-Elemente ausschließen und eine selektive Verarbeitung anwenden.
Einschließen von span-Elementen
Dieser Abschnitt zeigt, wie Sie span-Elemente für einen attribute-Prozessor einschließen. Der Prozessor verarbeitet keine span-Elemente, die nicht mit den Eigenschaften übereinstimmen.
Um eine Übereinstimmung zu erzielen, muss der Name des span-Elements spanA
oder spanB
entsprechen.
Die folgenden span-Elemente stimmen mit den include
-Eigenschaften überein, und die Prozessoraktionen werden angewendet:
Span1
Name: „spanA“-Attribute: {env: dev, test_request: 123, credit_card: 1234}Span2
Name: „spanB'“-Attribute: {env: dev, test_request: false}Span3
Name: „spanA“-Attribute: {env: 1, test_request: dev, credit_card: 1234}
Dieses span-Element stimmt nicht mit den include
-Eigenschaften überein, und die Prozessoraktionen werden nicht angewendet:
Span4
Name: „spanC“-Attribute: {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"
}
]
}
]
}
}
Ausschließen von span-Elementen
Dieser Abschnitt veranschaulicht, wie Sie span-Elemente für einen attribute-Prozessor ausschließen. Dieser Prozessor verarbeitet keine span-Elemente, die mit den Eigenschaften übereinstimmen.
Um eine Übereinstimmung zu erzielen, muss der Name des span-Elements spanA
oder spanB
entsprechen.
Die folgenden span-Elemente stimmen mit den exclude
-Eigenschaften überein, und die Prozessoraktionen werden nicht angewendet:
Span1
Name: „spanA“-Attribute: {env: dev, test_request: 123, credit_card: 1234}Span2
Name: „spanB'“-Attribute: {env: dev, test_request: false}Span3
Name: „spanA“-Attribute: {env: 1, test_request: dev, credit_card: 1234}
Dieses span-Element stimmt nicht mit den exclude
-Eigenschaften überein, und die Prozessoraktionen werden angewendet:
Span4
Name: „spanC“-Attribute: {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"
}
]
}
]
}
}
Ausschließen von span-Elementen anhand mehrerer Kriterien
Dieser Abschnitt veranschaulicht, wie Sie span-Elemente für einen attribute-Prozessor ausschließen. Dieser Prozessor verarbeitet keine span-Elemente, die mit den Eigenschaften übereinstimmen.
Um eine Übereinstimmung zu erzielen, müssen die folgenden Bedingungen erfüllt sein:
- Im span-Element muss ein Attribut vorhanden sein (z. B.
env
mit dem Wertdev
). - Das span-Element muss über ein Attribut mit dem Schlüssel
test_request
verfügen.
Die folgenden span-Elemente stimmen mit den exclude
-Eigenschaften überein, und die Prozessoraktionen werden nicht angewendet.
Span1
Name: „spanB“-Attribute: {env: dev, test_request: 123, credit_card: 1234}Span2
Name: „spanA“-Attribute: {env: dev, test_request: false}
Das folgende span-Element stimmt nicht mit den exclude
-Eigenschaften überein, und die Prozessoraktionen werden angewendet:
Span3
Name: „spanB“-Attribute: {env: 1, test_request: dev, credit_card: 1234}Span4
Name: „spanC“-Attribute: {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"
}
]
}
]
}
}
Selektive Verarbeitung
Dieser Abschnitt zeigt, wie Sie die Gruppe von span-Eigenschaften angeben, die festlegen, auf welche span-Elemente dieser Prozessor angewendet werden soll. Die include
-Eigenschaften geben an, welche span-Elemente verarbeitet werden sollen. Die exclude
-Eigenschaften filtern span-Elemente heraus, die nicht verarbeitet werden sollen.
In der folgenden Konfiguration stimmen diese span-Elemente mit den Eigenschaften überein, und die Prozessoraktionen werden angewendet:
Span1
Name: „spanB“-Attribute: {env: production, test_request: 123, credit_card: 1234, redact_trace: "false"}Span2
Name: „spanA“-Attribute: {env: staging, test_request: false, redact_trace: true}
Diese span-Elemente stimmen nicht mit den include
-Eigenschaften überein, und die Prozessoraktionen werden nicht angewendet:
Span3
Name: „spanB“-Attribute: {env: production, test_request: true, credit_card: 1234, redact_trace: false}Span4
Name: „spanC“-Attribute: {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"
}
]
}
]
}
}
Beispiele für attribute-Prozessoren
Einfügen
Das folgende Beispiel fügt das neue Attribut {"attribute1": "attributeValue1"}
in span-Elemente und Protokolle ein, in denen der Schlüssel attribute1
nicht vorhanden ist.
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "attribute1",
"value": "attributeValue1",
"action": "insert"
}
]
}
]
}
}
Einfügen von einem anderen Schlüssel
Das folgende Beispiel verwendet den Wert aus dem Attribut anotherkey
, um das neue Attribut {"newKey": "<value from attribute anotherkey>"}
in span-Elemente und Protokolle einzufügen, in denen der Schlüssel newKey
nicht vorhanden ist. Wenn das Attribut anotherkey
nicht vorhanden ist, wird kein neues Attribut in die span-Elemente eingefügt.
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "newKey",
"fromAttribute": "anotherKey",
"action": "insert"
}
]
}
]
}
}
Aktualisieren
Das folgende Beispiel aktualisiert das Attribut zu {"db.secret": "redacted"}
. Das Attribut boo
wird unter Verwendung des Werts aus dem Attribut foo
aktualisiert. Span-Elemente, die das Attribut boo
nicht enthalten, werden nicht geändert.
{
"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"
}
]
}
]
}
}
Löschen
Das folgende Beispiel zeigt, wie ein Attribut mit dem Schlüssel credit_card
gelöscht wird.
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "credit_card",
"action": "delete"
}
]
}
]
}
}
Hash
Das folgende Beispiel zeigt, wie vorhandene Attributwerte mit einem Hash versehen werden.
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "user.email",
"action": "hash"
}
]
}
]
}
}
Extract
Das folgende Beispiel zeigt, wie ein regulärer Ausdruck (RegEx) verwendet wird, um neue Attribute basierend auf dem Wert eines anderen Attributs erstellen.
Für url.path = /path?queryParam1=value1,queryParam2=value2
werden beispielsweise die folgenden Attribute eingefügt:
- httpProtocol:
http
- httpDomain:
example.com
- httpPath:
path
- httpQueryParams:
queryParam1=value1,queryParam2=value2
- url.path: keine Änderung
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "url.path",
"pattern": "^(?<httpProtocol>.*):\\/\\/(?<httpDomain>.*)\\/(?<httpPath>.*)(\\?|\\&)(?<httpQueryParams>.*)",
"action": "extract"
}
]
}
]
}
}
Maske
Angenommen url.path = https://example.com/user/12345622
wird mit einer der folgenden Konfigurationen auf url.path = https://example.com/user/****
aktualisiert.
Erstes Konfigurationsbeispiel:
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "url.path",
"pattern": "user\\/\\d+",
"replace": "user\\/****",
"action": "mask"
}
]
}
]
}
}
Zweites Konfigurationsbeispiel mit dem Namen der Gruppe regulärer Ausdrücke:
{
"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"
}
]
}
]
}
}
Beispiele für Attribute, die nicht auf Strings basieren
Ab 3.4.19 GA unterstützen die Telemetrie-Prozessoren Attribute, die nicht als Zeichenkette geschrieben sind: boolean
, double
, long
, boolean-array
, double-array
, long-array
und string-array
.
Wenn attributes.type
nicht in der JSON-Datei bereitgestellt wird, wird standardmäßig string
verwendet.
Das folgende Beispiel fügt das neue Attribut {"newAttributeKeyStrict": "newAttributeValueStrict"}
in span-Elemente und Protokolle ein, deren Attribute mit den folgenden Beispielen übereinstimmen: {"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"
}
]
}
}
Außerdem unterstützen Attribute, die nicht auf Strings basieren, regexp
.
Das folgende Beispiel fügt das neue Attribut {"newAttributeKeyRegexp": "newAttributeValueRegexp"}
in span-Elemente und Protokolle ein, in denen das Attribut longRegexpAttributeKey
dem Wert von 400
bis 499
entspricht.
{
"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"
}
]
}
}
Beispiele für span-Prozessoren
Name einer Span
Das folgende Beispiel gibt die Werte der Attribute db.svc
, operation
und id
an. Es formt einen neuen Namen für das span-Element, indem diese Elemente in der angegebenen Reihenfolge und durch den Wert ::
getrennt verwendet werden.
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "span",
"name": {
"fromAttributes": [
"db.svc",
"operation",
"id"
],
"separator": "::"
}
}
]
}
}
Extrahieren von Attributen aus dem Namen eines span-Elements
Angenommen, der Eingabename des span-Elements lautet /api/v1/document/12345678/update
. Das folgende Beispiel führt zum Ausgabenamen /api/v1/document/{documentId}/update
des span-Elements. Dem span-Element wird das neue Attribut documentId=12345678
hinzugefügt.
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "span",
"name": {
"toAttributes": {
"rules": [
"^/api/v1/document/(?<documentId>.*)/update$"
]
}
}
}
]
}
}
Extrahieren von Attributen aus dem Namen eines span-Elements mithilfe von „include“ und „exclude“
Das folgende Beispiel zeigt, wie der Name eines span-Elements zu {operation_website}
geändert wird. Ein Attribut mit dem Schlüssel operation_website
und dem Attribut {oldSpanName}
wird hinzugefügt, wenn das span-Element die folgenden Eigenschaften aufweist:
- Der Name des span-Elements enthält an einer beliebigen Stelle in der Zeichenfolge das Zeichen
/
. - Der Name des span-Elements lautet nicht
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>.*?)$"
]
}
}
}
]
}
}
Beispiele für Protokollprozessoren
Extrahieren von Attributen aus dem Nachrichtentext von Protokollen
Angenommen, der eingegebene Protokollnachrichtentext lautet Starting PetClinicApplication on WorkLaptop with PID 27984 (C:\randompath\target\classes started by userx in C:\randompath)
. Mit folgendem Beispiel wird der Nachrichtentext Starting PetClinicApplication on WorkLaptop with PID {PIDVALUE} (C:\randompath\target\classes started by userx in C:\randompath)
ausgegeben. Dem Protokoll wird das neue Attribut PIDVALUE=27984
hinzugefügt.
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "log",
"body": {
"toAttributes": {
"rules": [
"^Starting PetClinicApplication on WorkLaptop with PID (?<PIDVALUE>\\d+) .*"
]
}
}
}
]
}
}
Maskieren vertraulicher Daten in Protokollmeldungen
Im folgenden Beispiel wird gezeigt, wie vertrauliche Daten in einem Protokollnachrichtentext mithilfe eines Protokollprozessors und eines Attributprozessors maskiert werden.
Angenommen, der eingegebene Protokollnachrichtentext lautet User account with userId 123456xx failed to login
. Der log-Prozessor ändert den ausgegebenen Nachrichtentext in User account with userId {redactedUserId} failed to login
, und der attribute-Prozessor löscht das neue redactedUserId
-Attribut, das im vorherigen Schritt hinzugefügt wurde.
{
"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"
}
]
}
]
}
}
Häufig gestellte Fragen
Warum verarbeitet der Protokollprozessor Protokolle nicht mithilfe von „TelemetryClient.trackTrace()“?
„TelemetryClient.trackTrace()“ ist Teil der klassischen SDK-Brücke von Application Insights, und die Protokollprozessoren funktionieren nur mit der neuen OpenTelemetry-basierten Instrumentierung.