Příklady procesoru telemetrie – Azure Monitor Application Insights pro Javu
Tento článek obsahuje příklady procesorů telemetrie v Application Insights pro Javu, včetně ukázek pro zahrnutí a vyloučení konfigurací. Obsahuje také ukázky pro procesory atributů a zahrnuje procesory.
Zahrnutí a vyloučení ukázek spanu
V této části se dozvíte, jak zahrnout a vyloučit rozsahy. Dozvíte se také, jak vyloučit více rozsahů a použít selektivní zpracování.
Zahrnout rozsahy
Tato část ukazuje, jak zahrnout rozsahy pro procesor atributů. Procesor nezpracuje rozsahy, které neodpovídají vlastnostem.
Shoda vyžaduje, aby název rozsahu byl roven spanA
nebo spanB
.
Tyto rozsahy odpovídají vlastnostem include
a akce procesoru se použijí:
Span1
Název: spanA Atributy: {env: dev, test_request: 123, credit_card: 1234}Span2
Název: spanB – atributy: {env: dev, test_request: false}Span3
Název: spanA Atributy: {env: 1, test_request: dev, credit_card: 1234}
Toto rozpětí neodpovídá vlastnostem include
a akce procesoru se nepoužijí:
Span4
Název: spanC Atributy: {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"
}
]
}
]
}
}
Vyloučení rozsahů
Tato část ukazuje, jak vyloučit rozsahy pro procesor atributů. Tento procesor nezpracuje rozsahy odpovídající vlastnostem.
Shoda vyžaduje, aby název rozsahu byl roven spanA
nebo spanB
.
Následující rozsahy odpovídají vlastnostem exclude
a akce procesoru se nepoužijí:
Span1
Název: spanA Atributy: {env: dev, test_request: 123, credit_card: 1234}Span2
Název: spanB – atributy: {env: dev, test_request: false}Span3
Název: spanA Atributy: {env: 1, test_request: dev, credit_card: 1234}
Toto rozpětí neodpovídá vlastnostem exclude
a akce procesoru se použijí:
Span4
Název: spanC Atributy: {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"
}
]
}
]
}
}
Vyloučení rozsahů pomocí více kritérií
Tato část ukazuje, jak vyloučit rozsahy pro procesor atributů. Tento procesor nezpracuje rozsahy odpovídající vlastnostem.
Shoda vyžaduje splnění následujících podmínek:
- Atribut (například
env
s hodnotoudev
) musí existovat v rozsahu. - Rozsah musí mít atribut, který má klíč
test_request
.
Následující rozsahy odpovídají vlastnostem exclude
a akce procesoru se nepoužijí.
Span1
Název: "spanB" Atributy: {env: dev, test_request: 123, credit_card: 1234}Span2
Název: spanA Atributy: {env: dev, test_request: false}
Následující rozsah neodpovídá vlastnostem exclude
a akce procesoru se použijí:
Span3
Název: "spanB" Atributy: {env: 1, test_request: dev, credit_card: 1234}Span4
Název: spanC Atributy: {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"
}
]
}
]
}
}
Selektivní zpracování
Tato část ukazuje, jak určit sadu vlastností rozsahu, které označují, na které rozsahy má být tento procesor použit. Vlastnosti include
označují, které rozsahy by se měly zpracovat. Filtr exclude
vlastností zahrnuje rozsahy, které by neměly být zpracovány.
V následující konfiguraci se tyto rozsahy shodují s vlastnostmi a akcemi procesoru se použijí:
Span1
Název: "spanB" Atributy: {env: production, test_request: 123, credit_card: 1234, redact_trace: "false"}Span2
Název: spanA Atributy: {env: staging, test_request: false, redact_trace: true}
Tyto rozsahy neodpovídají vlastnostem include
a nepoužijí se akce procesoru:
Span3
Název: "spanB" Atributy: {env: production, test_request: true, credit_card: 1234, redact_trace: false}Span4
Název: spanC Atributy: {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"
}
]
}
]
}
}
Ukázky procesoru atributů
Vložit
Následující ukázka vloží nový atribut {"attribute1": "attributeValue1"}
do rozsahů a protokolů, kde klíč attribute1
neexistuje.
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "attribute1",
"value": "attributeValue1",
"action": "insert"
}
]
}
]
}
}
Vložení z jiného klíče
Následující ukázka používá hodnotu z atributu anotherkey
k vložení nového atributu {"newKey": "<value from attribute anotherkey>"}
do rozsahů a protokolů, kde klíč newKey
neexistuje. Pokud atribut anotherkey
neexistuje, do rozsahů a protokolů se nevloží žádný nový atribut.
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "newKey",
"fromAttribute": "anotherKey",
"action": "insert"
}
]
}
]
}
}
Aktualizovat
Následující ukázka aktualizuje atribut na {"db.secret": "redacted"}
. Aktualizuje atribut boo
pomocí hodnoty z atributu foo
. Rozsahy a protokoly, které nemají atribut boo
, se nemění.
{
"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"
}
]
}
]
}
}
Odstranění
Následující ukázka ukazuje, jak odstranit atribut, který má klíč credit_card
.
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "credit_card",
"action": "delete"
}
]
}
]
}
}
Hodnoty hash
Následující ukázka ukazuje, jak hashovat existující hodnoty atributů.
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "user.email",
"action": "hash"
}
]
}
]
}
}
Extrahovat
Následující ukázka ukazuje, jak pomocí regulárního výrazu (regex) vytvořit nové atributy na základě hodnoty jiného atributu.
Například v tomto url.path = /path?queryParam1=value1,queryParam2=value2
příkladu se vloží následující atributy:
- httpProtocol:
http
- httpDomain:
example.com
- httpPath:
path
- httpQueryParams:
queryParam1=value1,queryParam2=value2
- url.path: žádná změna
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "url.path",
"pattern": "^(?<httpProtocol>.*):\\/\\/(?<httpDomain>.*)\\/(?<httpPath>.*)(\\?|\\&)(?<httpQueryParams>.*)",
"action": "extract"
}
]
}
]
}
}
Maska
Například se aktualizuje url.path = https://example.com/user/12345622
na url.path = https://example.com/user/****
některou z následujících konfigurací.
První příklad konfigurace:
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "url.path",
"pattern": "user\\/\\d+",
"replace": "user\\/****",
"action": "mask"
}
]
}
]
}
}
Druhý příklad konfigurace s názvem skupiny regulárních výrazů:
{
"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"
}
]
}
]
}
}
Ukázky neřetěděných atributů
Počínaje verzí 3.4.19 OBECNĚ podporují procesory telemetrie atributy, které nejsou typu řetězce: boolean
, , long
double
, boolean-array
, double-array
long-array
a string-array
.
Pokud attributes.type
v souboru JSON není zadaný, je výchozí string
hodnota .
Následující ukázka vloží nový atribut {"newAttributeKeyStrict": "newAttributeValueStrict"}
do rozsahů a protokolů, kde atributy odpovídají následujícím příkladům: {"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"
}
]
}
}
Kromě toho neřetěděné atributy podporují regexp
.
Následující ukázka vloží nový atribut {"newAttributeKeyRegexp": "newAttributeValueRegexp"}
do rozsahů a protokolů, kde atribut longRegexpAttributeKey
odpovídá hodnotě od 400
do 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"
}
]
}
}
Ukázky procesoru span
Pojmenujte rozsah.
Následující ukázka určuje hodnoty atributů db.svc
, operation
a id
. Vytvoří nový název rozsahu pomocí těchto atributů v tomto pořadí oddělené hodnotou ::
.
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "span",
"name": {
"fromAttributes": [
"db.svc",
"operation",
"id"
],
"separator": "::"
}
}
]
}
}
Extrahování atributů z názvu rozsahu
Předpokládejme, že název vstupního rozsahu je /api/v1/document/12345678/update
. Následující ukázka vede k názvu /api/v1/document/{documentId}/update
rozsahu výstupu . Přidá nový atribut documentId=12345678
do rozsahu.
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "span",
"name": {
"toAttributes": {
"rules": [
"^/api/v1/document/(?<documentId>.*)/update$"
]
}
}
}
]
}
}
Extrahování atributů z názvu rozsahu pomocí zahrnutí a vyloučení
Následující ukázka ukazuje, jak změnit název rozsahu na {operation_website}
. Přidá atribut s klíčem operation_website
a hodnotou {oldSpanName}
, pokud má rozsah následující vlastnosti:
- Název rozsahu obsahuje
/
kdekoli v řetězci. - Název rozsahu není
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>.*?)$"
]
}
}
}
]
}
}
Ukázky procesoru protokolů
Extrahování atributů z textu zprávy protokolu
Předpokládejme, že text zprávy vstupního protokolu je Starting PetClinicApplication on WorkLaptop with PID 27984 (C:\randompath\target\classes started by userx in C:\randompath)
. Výsledkem následující ukázky je text Starting PetClinicApplication on WorkLaptop with PID {PIDVALUE} (C:\randompath\target\classes started by userx in C:\randompath)
výstupní zprávy . Přidá nový atribut PIDVALUE=27984
do protokolu.
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "log",
"body": {
"toAttributes": {
"rules": [
"^Starting PetClinicApplication on WorkLaptop with PID (?<PIDVALUE>\\d+) .*"
]
}
}
}
]
}
}
Maskování citlivých dat ve zprávě protokolu
Následující ukázka ukazuje, jak maskovat citlivá data v textu zprávy protokolu pomocí procesoru protokolu i procesoru atributů.
Předpokládejme, že text zprávy vstupního protokolu je User account with userId 123456xx failed to login
. Procesor protokolu aktualizuje text User account with userId {redactedUserId} failed to login
výstupní zprávy a procesor atributů odstraní nový atribut redactedUserId
, který byl přidaný v předchozím kroku.
{
"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"
}
]
}
]
}
}
Nejčastější dotazy
Proč procesor protokolu zpracovává soubory protokolu pomocí TelemetryClient.trackTrace()?
TelemetryClient.trackTrace() je součástí mostu Application Insights Classic SDK a procesory protokolů fungují jenom s novou instrumentací založenou na OpenTelemetry.