Telemetri işlemcisi örnekleri - Java için Azure İzleyici Uygulama Analizler

Bu makalede Java için Application Analizler'daki telemetri işlemcilerine örnek olarak yapılandırmaları ekleme ve hariç tutma örnekleri sağlanır. Ayrıca öznitelik işlemcileri ve span işlemcileri için örnekler içerir.

Span örneklerini dahil et ve hariç tut

Bu bölümde, yayılma aralıklarını dahil etmeyi ve dışlamayı öğrenin. Ayrıca birden çok yayılma alanının nasıl hariç tutulacağını ve seçmeli işlemenin nasıl uygulanacağını da öğrenirsiniz.

Span'ları dahil et

Bu bölümde, bir öznitelik işlemcisi için span'lerin nasıl dahil olduğu gösterilmektedir. İşlemci, özelliklerle eşleşmeyen yayılma sürelerini işlemez.

Eşleşme, span adının veya spanBdeğerine eşit spanA olmasını gerektirir.

Bu span'lar özelliklerle include eşleşip işlemci eylemleri uygulanır:

  • Span1 Ad: 'spanA' Öznitelikleri: {env: dev, test_request: 123, credit_card: 1234}
  • Span2 Ad: 'spanB' Öznitelikleri: {env: dev, test_request: false}
  • Span3 Ad: 'spanA' Öznitelikleri: {env: 1, test_request: dev, credit_card: 1234}

Bu yayılma alanı özelliklerle include eşleşmez ve işlemci eylemleri uygulanmaz:

  • Span4 Ad: 'spanC' Öznitelikleri: {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"
          }
        ]
      }
    ]
  }
}

Dışlama aralıkları

Bu bölümde, bir öznitelik işlemcisi için yayılma sürelerinin nasıl dışlandığı gösterilmektedir. Bu işlemci, özelliklerle eşleşen yayılma aralıklarını işlemez.

Eşleşme, span adının veya spanBdeğerine eşit spanA olmasını gerektirir.

Aşağıdaki yayılma alanları özelliklerle exclude eşleşmektedir ve işlemci eylemleri uygulanmaz:

  • Span1 Ad: 'spanA' Öznitelikleri: {env: dev, test_request: 123, credit_card: 1234}
  • Span2 Ad: 'spanB' Öznitelikleri: {env: dev, test_request: false}
  • Span3 Ad: 'spanA' Öznitelikleri: {env: 1, test_request: dev, credit_card: 1234}

Bu yayılma alanı özelliklerle exclude eşleşmez ve işlemci eylemleri uygulanır:

  • Span4 Ad: 'spanC' Öznitelikleri: {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"
          }
        ]
      }
    ]
  }
}

Birden çok ölçüt kullanarak yayılma aralıklarını dışlama

Bu bölümde, bir öznitelik işlemcisi için yayılma sürelerinin nasıl dışlandığı gösterilmektedir. Bu işlemci, özelliklerle eşleşen yayılma aralıklarını işlemez.

Eşleşme için aşağıdaki koşulların karşılanması gerekir:

  • Span içinde bir öznitelik (örneğin, env değerle dev) bulunmalıdır.
  • Yayılma alanının anahtarı test_requestolan bir özniteliği olmalıdır.

Aşağıdaki yayılma alanları özelliklerle exclude eşleşmektedir ve işlemci eylemleri uygulanmaz.

  • Span1 Ad: 'spanB' Öznitelikleri: {env: dev, test_request: 123, credit_card: 1234}
  • Span2 Ad: 'spanA' Öznitelikleri: {env: dev, test_request: false}

Aşağıdaki yayılma alanı özelliklerle exclude eşleşmez ve işlemci eylemleri uygulanır:

  • Span3 Ad: 'spanB' Öznitelikleri: {env: 1, test_request: dev, credit_card: 1234}
  • Span4 Ad: 'spanC' Öznitelikleri: {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"
          }
        ]
      }
    ]
  }
}

Seçmeli işleme

Bu bölümde, bu işlemcinin hangi span'lara uygulanması gerektiğini belirten span özellikleri kümesinin nasıl belirtileceği gösterilmektedir. include Özellikler hangi aralıkların işlenmesi gerektiğini belirtir. Özellikler exclude , işlenmemesi gereken kapsamları filtreler.

Aşağıdaki yapılandırmada, bu span'lar özelliklerle eşleşip işlemci eylemleri uygulanır:

  • Span1 Ad: 'spanB' Öznitelikleri: {env: production, test_request: 123, credit_card: 1234, redact_trace: "false"}
  • Span2 Ad: 'spanA' Öznitelikleri: {env: hazırlama, test_request: false, redact_trace: true}

Bu yayılma alanları özelliklerle include eşleşmez ve işlemci eylemleri uygulanmaz:

  • Span3 Ad: 'spanB' Öznitelikleri: {env: production, test_request: true, credit_card: 1234, redact_trace: false}
  • Span4 Ad: 'spanC' Öznitelikleri: {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"
          }
        ]
      }
    ]
  }
}

Öznitelik işlemci örnekleri

Ekleme

Aşağıdaki örnek, anahtarın mevcut olmadığı spans ve günlüklere attribute1 yeni özniteliği {"attribute1": "attributeValue1"} ekler.

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "actions": [
          {
            "key": "attribute1",
            "value": "attributeValue1",
            "action": "insert"
          }
        ]
      }
    ]
  }
}

Başka bir anahtardan ekle

Aşağıdaki örnek, anahtarın newKey mevcut olmadığı spans ve günlüklere yeni özniteliği {"newKey": "<value from attribute anotherkey>"} eklemek için özniteliğinden anotherkey değerini kullanır. Öznitelik anotherkey yoksa, spans ve günlüklere yeni öznitelik eklenmez.

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "actions": [
          {
            "key": "newKey",
            "fromAttribute": "anotherKey",
            "action": "insert"
          }
        ]
      }
    ]
  }
}

Güncelleştir

Aşağıdaki örnek özniteliğini olarak {"db.secret": "redacted"}güncelleştirir. özniteliğinden boo değerini kullanarak özniteliğini foogüncelleştirir. Özniteliği boo olmayan span'lar ve günlükler değişmez.

{
  "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" 
          }
        ]
      }
    ]
  }
}

Sil

Aşağıdaki örnekte anahtarına credit_cardsahip bir özniteliğin nasıl silineceği gösterilmektedir.

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "actions": [
          {
            "key": "credit_card",
            "action": "delete"
          }
        ]
      }
    ]
  }
}

Karma

Aşağıdaki örnekte, mevcut öznitelik değerlerinin nasıl karmalanacağı gösterilmektedir.

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "actions": [
          {
            "key": "user.email",
            "action": "hash"
          }
        ]
      }
    ]
  }
}

Ayıkla

Aşağıdaki örnekte, başka bir özniteliğin değerine göre yeni öznitelikler oluşturmak için normal ifadenin (regex) nasıl kullanılacağı gösterilmektedir. Örneğin, verilen url.path = /path?queryParam1=value1,queryParam2=value2aşağıdaki öznitelikler eklenir:

  • httpProtocol: http
  • httpDomain: example.com
  • httpPath: path
  • httpQueryParams: queryParam1=value1,queryParam2=value2
  • url.path: değişiklik yok
{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "actions": [
          {
            "key": "url.path",
            "pattern": "^(?<httpProtocol>.*):\\/\\/(?<httpDomain>.*)\\/(?<httpPath>.*)(\\?|\\&)(?<httpQueryParams>.*)",
            "action": "extract"
          }
        ]
      }
    ]
  }
}

Maske

Örneğin, aşağıdaki yapılandırmalardan birini kullanarak verilen url.path = https://example.com/user/12345622 güncelleştirilir url.path = https://example.com/user/**** .

İlk yapılandırma örneği:

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "actions": [
          {
            "key": "url.path",
            "pattern": "user\\/\\d+",
            "replace": "user\\/****",
            "action": "mask"
          }
        ]
      }
    ]
  }
}

Normal ifade grubu adıyla ikinci yapılandırma örneği:

{
  "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"
          }
        ]
      }
    ]
  }
}

Dize türü olmayan öznitelik örnekleri

3.4.19 GA'dan itibaren telemetri işlemcileri dize türü olmayan öznitelikleri destekler: boolean, , doublelong, boolean-array, , double-array, long-array, ve string-array.

attributes.type Json'da sağlanmayan durumlarda varsayılan olarak olurstring.

Aşağıdaki örnek, özniteliklerin aşağıdaki örneklerle eşleştiği yeni özniteliği {"newAttributeKeyStrict": "newAttributeValueStrict"} span'lara ve günlüklere ekler: {"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"
      }
    ]
  }
}

Ayrıca, dize türü olmayan öznitelikler destekler regexp.

Aşağıdaki örnek, yeni özniteliği {"newAttributeKeyRegexp": "newAttributeValueRegexp"} span'lara ve günlüklere ekler ve özniteliğin longRegexpAttributeKey değeri ile 400499ile eşleşir.

{
  "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"
      }
    ]
  }
}

Span işlemci örnekleri

Bir yayılma alanı adlandırma

Aşağıdaki örnek , operationve idözniteliklerinin db.svcdeğerlerini belirtir. Bu öznitelikleri değeriyle ayırarak bu öznitelikleri kullanarak yayılma alanının ::yeni adını oluşturur.

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "span",
        "name": {
          "fromAttributes": [
            "db.svc",
            "operation",
            "id"
          ],
          "separator": "::"
        }
      }
    ]
  }
}

Bir span adından öznitelikleri ayıklama

Giriş span adının olduğunu /api/v1/document/12345678/updatevarsayalım. Aşağıdaki örnek çıktı yayılma alanı adını /api/v1/document/{documentId}/updatedöndürür. Yeni özniteliği documentId=12345678 span'a ekler.

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "span",
        "name": {
          "toAttributes": {
            "rules": [
              "^/api/v1/document/(?<documentId>.*)/update$"
            ]
          }
        }
      }
    ]
  }
}

Ekleme ve dışlama kullanarak bir span adından öznitelikleri ayıklama

Aşağıdaki örnekte, span adının {operation_website}olarak nasıl değiştireceği gösterilmektedir. Span aşağıdaki özelliklere sahip olduğunda anahtar operation_website ve değer {oldSpanName} içeren bir öznitelik ekler:

  • Span adı dizenin herhangi bir yerinde bulunur / .
  • Span adı değildir 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>.*?)$"
            ]
          }
        }
      }
    ]
  }
}

Günlük işlemcisi örnekleri

Günlük iletisi gövdesinden öznitelikleri ayıklama

Giriş günlüğü ileti gövdesinin olduğunu Starting PetClinicApplication on WorkLaptop with PID 27984 (C:\randompath\target\classes started by userx in C:\randompath)varsayalım. Aşağıdaki örnek, çıkış iletisi gövdesine neden olur Starting PetClinicApplication on WorkLaptop with PID {PIDVALUE} (C:\randompath\target\classes started by userx in C:\randompath). Yeni özniteliği PIDVALUE=27984 günlüğe ekler.

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "log",
        "body": {
          "toAttributes": {
            "rules": [
              "^Starting PetClinicApplication on WorkLaptop with PID (?<PIDVALUE>\\d+) .*"
            ]
          }
        }
      }
    ]
  }
}

Günlük iletisinde hassas verileri maskeleme

Aşağıdaki örnek, hem günlük işlemcisi hem de öznitelik işlemcisi kullanarak günlük iletisi gövdesindeki hassas verilerin nasıl maskelenip maskelenemini gösterir. Giriş günlüğü ileti gövdesinin olduğunu User account with userId 123456xx failed to loginvarsayalım. Günlük işlemcisi, çıkış iletisi gövdesini olarak User account with userId {redactedUserId} failed to login güncelleştirir ve öznitelik işlemcisi, önceki adımda eklenen yeni özniteliği redactedUserIdsiler.

{
  "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"
          }
        ]
      }
    ]
  }
}

Sık sorulan sorular

Günlük işlemcisi günlük dosyalarını telemetryClient.trackTrace() kullanarak neden işlemez?

TelemetryClient.trackTrace(), Application Analizler Klasik SDK köprüsünün bir parçasıdır ve günlük işlemcileri yalnızca yeni OpenTelemetry tabanlı izleme ile çalışır.