Voorbeelden van telemetrieprocessor - Azure Monitor Application Insights voor Java
Dit artikel bevat voorbeelden van telemetrieprocessors in Application Insights voor Java, waaronder voorbeelden voor het opnemen en uitsluiten van configuraties. Het bevat ook voorbeelden voor kenmerkprocessors en spanprocessors.
Span-voorbeelden opnemen en uitsluiten
In deze sectie leert u hoe u spanten kunt opnemen en uitsluiten. U leert ook hoe u meerdere spanten uitsluit en selectieve verwerking toepast.
Inclusief spanten
In deze sectie ziet u hoe u spans voor een kenmerkprocessor kunt opnemen. De processor verwerkt geen spanten die niet overeenkomen met de eigenschappen.
Voor een overeenkomst moet de spannaam gelijk zijn aan spanA
of spanB
.
Deze reeksen komen overeen met de include
eigenschappen en de processoracties worden toegepast:
Span1
Naam: 'spanA' Kenmerken: {env: dev, test_request: 123, credit_card: 1234}Span2
Naam: 'spanB'-kenmerken: {env: dev, test_request: false}Span3
Naam: 'spanA' Kenmerken: {env: 1, test_request: dev, credit_card: 1234}
Deze periode komt niet overeen met de include
eigenschappen en de processoracties worden niet toegepast:
Span4
Naam: spanC-kenmerken: {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"
}
]
}
]
}
}
Uitsluitbereiken
In deze sectie ziet u hoe u spans voor een kenmerkprocessor kunt uitsluiten. Deze processor verwerkt geen spanten die overeenkomen met de eigenschappen.
Voor een overeenkomst moet de spannaam gelijk zijn aan spanA
of spanB
.
De volgende reeksen komen overeen met de exclude
eigenschappen en de processoracties worden niet toegepast:
Span1
Naam: 'spanA' Kenmerken: {env: dev, test_request: 123, credit_card: 1234}Span2
Naam: 'spanB'-kenmerken: {env: dev, test_request: false}Span3
Naam: 'spanA' Kenmerken: {env: 1, test_request: dev, credit_card: 1234}
Deze periode komt niet overeen met de exclude
eigenschappen en de processoracties worden toegepast:
Span4
Naam: spanC-kenmerken: {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"
}
]
}
]
}
}
Spanen uitsluiten met behulp van meerdere criteria
In deze sectie ziet u hoe u spans voor een kenmerkprocessor kunt uitsluiten. Deze processor verwerkt geen spanten die overeenkomen met de eigenschappen.
Voor een overeenkomst moeten de volgende voorwaarden worden voldaan:
- Er moet een kenmerk (bijvoorbeeld
env
met waardedev
) aanwezig zijn in het bereik. - Het bereik moet een kenmerk hebben dat sleutel
test_request
heeft.
De volgende reeksen komen overeen met de exclude
eigenschappen en de processoracties worden niet toegepast.
Span1
Naam: 'spanB' Kenmerken: {env: dev, test_request: 123, credit_card: 1234}Span2
Naam: 'spanA'-kenmerken: {env: dev, test_request: false}
De volgende periode komt niet overeen met de exclude
eigenschappen en de processoracties worden toegepast:
Span3
Naam: 'spanB'-kenmerken: {env: 1, test_request: dev, credit_card: 1234}Span4
Naam: spanC-kenmerken: {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"
}
]
}
]
}
}
Selectieve verwerking
In deze sectie ziet u hoe u de set spaneigenschappen opgeeft waarop wordt aangegeven waarop deze processor moet worden toegepast. De include
eigenschappen geven aan welke periodes moeten worden verwerkt. De exclude
eigenschappen worden uitgefilterd en moeten niet worden verwerkt.
In de volgende configuratie komen deze overeen met de eigenschappen en worden processoracties toegepast:
Span1
Naam: 'spanB' Kenmerken: {env: production, test_request: 123, credit_card: 1234, redact_trace: "false"}Span2
Naam: 'spanA'-kenmerken: {env: fasering, test_request: false, redact_trace: true}
Deze reeksen komen niet overeen met de include
eigenschappen en processoracties worden niet toegepast:
Span3
Naam: 'spanB' Kenmerken: {env: production, test_request: true, credit_card: 1234, redact_trace: false}Span4
Naam: spanC-kenmerken: {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"
}
]
}
]
}
}
Voorbeelden van kenmerkprocessor
Invoegen
In het volgende voorbeeld wordt het nieuwe kenmerk {"attribute1": "attributeValue1"}
ingevoegd in spans en logboeken waarin de sleutel attribute1
niet bestaat.
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "attribute1",
"value": "attributeValue1",
"action": "insert"
}
]
}
]
}
}
Invoegen vanuit een andere sleutel
In het volgende voorbeeld wordt de waarde van het kenmerk anotherkey
gebruikt om het nieuwe kenmerk {"newKey": "<value from attribute anotherkey>"}
in spans en logboeken in te voegen waarin de sleutel newKey
niet bestaat. Als het kenmerk anotherkey
niet bestaat, wordt er geen nieuw kenmerk ingevoegd in spans en logboeken.
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "newKey",
"fromAttribute": "anotherKey",
"action": "insert"
}
]
}
]
}
}
Bijwerken
In het volgende voorbeeld wordt het kenmerk bijgewerkt naar {"db.secret": "redacted"}
. Het kenmerk boo
wordt bijgewerkt met behulp van de waarde van het kenmerk foo
. Spans en logboeken die niet over het kenmerk boo
beschikken, worden niet gewijzigd.
{
"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"
}
]
}
]
}
}
Delete
In het volgende voorbeeld ziet u hoe u een kenmerk verwijdert dat de sleutel credit_card
bevat.
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "credit_card",
"action": "delete"
}
]
}
]
}
}
Hash
In het volgende voorbeeld ziet u hoe u bestaande kenmerkwaarden kunt hashen.
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "user.email",
"action": "hash"
}
]
}
]
}
}
Extraheren
In het volgende voorbeeld ziet u hoe u een reguliere expressie (regex) gebruikt om nieuwe kenmerken te maken op basis van de waarde van een ander kenmerk.
De volgende kenmerken worden bijvoorbeeld url.path = /path?queryParam1=value1,queryParam2=value2
ingevoegd:
- httpProtocol:
http
- httpDomain:
example.com
- httpPath:
path
- httpQueryParams:
queryParam1=value1,queryParam2=value2
- url.path: geen wijziging
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "url.path",
"pattern": "^(?<httpProtocol>.*):\\/\\/(?<httpDomain>.*)\\/(?<httpPath>.*)(\\?|\\&)(?<httpQueryParams>.*)",
"action": "extract"
}
]
}
]
}
}
Masker
Gegeven wordt bijvoorbeeld url.path = https://example.com/user/12345622
bijgewerkt naar url.path = https://example.com/user/****
het gebruik van een van de onderstaande configuraties.
Eerste configuratievoorbeeld:
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "url.path",
"pattern": "user\\/\\d+",
"replace": "user\\/****",
"action": "mask"
}
]
}
]
}
}
Tweede configuratievoorbeeld met de naam van de reguliere expressiegroep:
{
"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"
}
]
}
]
}
}
Voorbeelden van niet-getypeerde kenmerken
Vanaf 3.4.19 GA ondersteunen telemetrieprocessors niet-getypte kenmerken: boolean
, , double
long
, boolean-array
, , double-array
en long-array
string-array
.
Wanneer attributes.type
wordt niet opgegeven in de json, is deze standaard ingesteld op string
.
In het volgende voorbeeld wordt het nieuwe kenmerk {"newAttributeKeyStrict": "newAttributeValueStrict"}
ingevoegd in spans en logboeken waarin de kenmerken overeenkomen met de volgende voorbeelden: {"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"
}
]
}
}
Daarnaast ondersteunen regexp
niet-getypte kenmerken .
In het volgende voorbeeld wordt het nieuwe kenmerk {"newAttributeKeyRegexp": "newAttributeValueRegexp"}
ingevoegd in spans en logboeken waarin het kenmerk longRegexpAttributeKey
overeenkomt met de waarde van waaruit 400
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"
}
]
}
}
Spanprocessorvoorbeelden
Een spannaam opgeven
In het volgende voorbeeld worden de waarden van kenmerken db.svc
, operation
en id
. Het vormt de nieuwe naam van het bereik met behulp van deze kenmerken, in die volgorde, gescheiden door de waarde ::
.
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "span",
"name": {
"fromAttributes": [
"db.svc",
"operation",
"id"
],
"separator": "::"
}
}
]
}
}
Kenmerken extraheren uit een spannaam
Stel dat de naam van de invoerspanne is /api/v1/document/12345678/update
. Het volgende voorbeeld resulteert in de naam /api/v1/document/{documentId}/update
van het uitvoerbereik. Hiermee wordt het nieuwe kenmerk documentId=12345678
toegevoegd aan het bereik.
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "span",
"name": {
"toAttributes": {
"rules": [
"^/api/v1/document/(?<documentId>.*)/update$"
]
}
}
}
]
}
}
Kenmerken uit een spannaam extraheren met behulp van opnemen en uitsluiten
In het volgende voorbeeld ziet u hoe u de spannaam wijzigt in {operation_website}
. Er wordt een kenmerk met sleutel operation_website
en waarde {oldSpanName}
toegevoegd wanneer het bereik de volgende eigenschappen heeft:
- De spannaam bevat
/
een willekeurige plaats in de tekenreeks. - De spannaam is niet
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>.*?)$"
]
}
}
}
]
}
}
Voorbeelden van logboekprocessor
Kenmerken extraheren uit de hoofdtekst van een logboekbericht
Stel dat de hoofdtekst van het invoerlogboekbericht is Starting PetClinicApplication on WorkLaptop with PID 27984 (C:\randompath\target\classes started by userx in C:\randompath)
. Het volgende voorbeeld resulteert in de hoofdtekst Starting PetClinicApplication on WorkLaptop with PID {PIDVALUE} (C:\randompath\target\classes started by userx in C:\randompath)
van het uitvoerbericht. Het nieuwe kenmerk PIDVALUE=27984
wordt toegevoegd aan het logboek.
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "log",
"body": {
"toAttributes": {
"rules": [
"^Starting PetClinicApplication on WorkLaptop with PID (?<PIDVALUE>\\d+) .*"
]
}
}
}
]
}
}
Gevoelige gegevens in logboekbericht maskeren
In het volgende voorbeeld ziet u hoe u gevoelige gegevens in een hoofdtekst van een logboekbericht kunt maskeren met behulp van zowel logboekprocessor als kenmerkprocessor.
Stel dat de hoofdtekst van het invoerlogboekbericht is User account with userId 123456xx failed to login
. De hoofdtekst van het uitvoerbericht User account with userId {redactedUserId} failed to login
wordt bijgewerkt met de logboekprocessor en de kenmerkprocessor verwijdert het nieuwe kenmerk redactedUserId
, dat in de vorige stap werd toegevoegd.
{
"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"
}
]
}
]
}
}
Veelgestelde vragen
Waarom verwerkt de logboekprocessor logboekbestanden niet met behulp van TelemetryClient.trackTrace()?
TelemetryClient.trackTrace() maakt deel uit van de klassieke Application Insights SDK-brug en de logboekprocessors werken alleen met de nieuwe op OpenTelemetry gebaseerde instrumentatie.