Příklady procesoru telemetrie – Přehledy aplikací služby Azure Monitor pro Javu

Tento článek obsahuje příklady procesorů telemetrie v aplikačním Přehledy 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 hodnotou dev) 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=value2pří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, , longdouble, boolean-array, double-arraylong-arraya string-array.

Pokud attributes.type v souboru JSON není zadaný, je výchozí stringhodnota .

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, operationa 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}/updaterozsahu 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 Přehledy Classic SDK a procesory protokolů pracují pouze s novou instrumentací založenou na OpenTelemetry.