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 valoredev
) 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
, double
long
, 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
, operation
e 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}/update
dell'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.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per