Telemetri işlemcisi örnekleri - Java için Azure İzleyici Application Insights
Bu makalede Java için Application Insights'ta telemetri işlemcilerine örnek olarak yapılandırmaları ekleme ve dışlama örnekleri verilmektedir. 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 spanB
değ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 spanB
değ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ğerledev
) bulunmalıdır. - Yayılma alanının anahtarı
test_request
olan 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 foo
gü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_card
sahip 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=value2
aş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
, , double
long
, 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 400
499
ile 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 , operation
ve id
özniteliklerinin db.svc
değ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/update
varsayalım. Aşağıdaki örnek çıktı yayılma alanı adını /api/v1/document/{documentId}/update
dö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 login
varsayalı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 redactedUserId
siler.
{
"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 Insights 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.