Procesory telemetryczne (wersja zapoznawcza) — usługa Azure Monitor Application Insights dla języka Java
Uwaga
Funkcja procesorów telemetrycznych jest wyznaczona jako wersja zapoznawcza, ponieważ nie możemy zagwarantować zgodności z poprzednimi wersjami z wersji do wydania ze względu na stan eksperymentalny konwencji semantycznych atrybutów. Jednak funkcja została przetestowana i jest obsługiwana w środowisku produkcyjnym.
Środowisko Java 3.x usługi Application Insights może przetwarzać dane telemetryczne przed wyeksportowanie danych.
Niektóre przypadki użycia:
- Maskuj poufne dane.
- Warunkowe dodawanie wymiarów niestandardowych.
- Zaktualizuj nazwę zakresu, która jest używana do agregowania podobnych danych telemetrycznych w witrynie Azure Portal.
- Porzucanie określonych atrybutów zakresu w celu kontrolowania kosztów pozyskiwania.
- Odfiltruj niektóre metryki, aby kontrolować koszty pozyskiwania.
Uwaga
Jeśli chcesz usunąć określone (całe) zakresy w celu kontrolowania kosztów pozyskiwania, zobacz przesłonięcia próbkowania.
Terminologia
Przed zapoznaniem się z procesorami telemetrii należy zrozumieć terminy dotyczące zakresu i dziennika.
Zakres to typ telemetrii, który reprezentuje jedną z:
- Żądanie przychodzące.
- Zależność wychodząca (na przykład zdalne wywołanie do innej usługi).
- Zależność w procesie (na przykład praca wykonywana przez podskładniki usługi).
Dziennik jest typem danych telemetrycznych reprezentujących:
- dane dziennika przechwycone z dzienników Log4j, Logback i java.util.logging
W przypadku procesorów telemetrycznych te składniki span/log są ważne:
- Nazwisko
- Treść
- Atrybuty
Nazwa zakresu jest podstawowym wyświetlaniem żądań i zależności w witrynie Azure Portal. Atrybuty span reprezentują zarówno właściwości standardowe, jak i niestandardowe danego żądania lub zależności.
Komunikat śledzenia lub treść jest podstawowym wyświetlaniem dzienników w witrynie Azure Portal. Atrybuty dziennika reprezentują zarówno standardowe, jak i niestandardowe właściwości danego dziennika.
Typy procesorów telemetrycznych
Obecnie cztery typy procesorów telemetrii to
- Procesory atrybutów
- Procesory obejmujące
- Procesory dzienników
- Filtry metryk
Procesor atrybutów może wstawiać, aktualizować, usuwać lub skróty atrybutów elementu telemetrii (span
lub log
).
Może również użyć wyrażenia regularnego, aby wyodrębnić jeden lub więcej nowych atrybutów z istniejącego atrybutu.
Procesor zakresu może zaktualizować nazwę telemetrii żądań i zależności. Może również użyć wyrażenia regularnego, aby wyodrębnić jeden lub więcej nowych atrybutów z nazwy zakresu.
Procesor dzienników może zaktualizować nazwę telemetrii dzienników. Może również użyć wyrażenia regularnego, aby wyodrębnić jeden lub więcej nowych atrybutów z nazwy dziennika.
Filtr metryki może filtrować metryki, aby ułatwić kontrolowanie kosztów pozyskiwania.
Uwaga
Obecnie procesory telemetryczne przetwarzają tylko atrybuty typu ciąg. Nie przetwarzają atrybutów typu Wartość logiczna ani liczba.
Wprowadzenie
Aby rozpocząć, utwórz plik konfiguracji o nazwie applicationinsights.json. Zapisz go w tym samym katalogu co applicationinsights-agent-*.jar. Użyj następującego szablonu.
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "attribute",
...
},
{
"type": "attribute",
...
},
{
"type": "span",
...
},
{
"type": "log",
...
},
{
"type": "metric-filter",
...
}
]
}
}
Procesor atrybutów
Procesor atrybutów modyfikuje atrybuty obiektu span
lub log
. Może obsługiwać możliwość dołączania lub wykluczania lub log
.span
Wykonuje listę akcji wykonywanych w kolejności określonej przez plik konfiguracji. Procesor obsługuje następujące akcje:
insert
update
delete
hash
extract
mask
insert
Akcja insert
wstawia nowy atrybut w elemencie telemetrii, w którym key
jeszcze nie istnieje.
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "attribute1",
"value": "value1",
"action": "insert"
}
]
}
]
Akcja insert
wymaga następujących ustawień:
key
value
lubfromAttribute
.action
:insert
update
Akcja update
aktualizuje atrybut w elemencie telemetrii, w którym key
już istnieje.
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "attribute1",
"value": "newValue",
"action": "update"
}
]
}
]
Akcja update
wymaga następujących ustawień:
key
value
lubfromAttribute
.action
:update
delete
Akcja delete
usuwa atrybut z elementu telemetrii.
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "attribute1",
"action": "delete"
}
]
}
]
Akcja delete
wymaga następujących ustawień:
key
action
:delete
hash
Skróty hash
akcji (SHA1) istniejącą wartość atrybutu.
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "attribute1",
"action": "hash"
}
]
}
]
Akcja hash
wymaga następujących ustawień:
key
action
:hash
extract
Uwaga
Ta extract
funkcja jest dostępna tylko w wersji 3.0.2 lub nowszej.
Akcja extract
wyodrębnia wartości przy użyciu reguły wyrażenia regularnego z klucza wejściowego do kluczy docelowych określonych przez regułę. Jeśli klucz docelowy już istnieje, extract
akcja zastępuje klucz docelowy. Ta akcja działa jak ustawienie procesora toAttributes
span, gdzie istniejący atrybut jest źródłem.
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "attribute1",
"pattern": "<regular pattern with named matchers>",
"action": "extract"
}
]
}
]
Akcja extract
wymaga następujących ustawień:
key
pattern
action
:extract
mask
Uwaga
Ta mask
funkcja jest dostępna tylko w wersji 3.2.5 lub nowszej.
Akcja mask
maskuje wartości atrybutów przy użyciu reguły wyrażenia regularnego określonego w i replace
pattern
.
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "attributeName",
"pattern": "<regular expression pattern>",
"replace": "<replacement value>",
"action": "mask"
}
]
}
]
Akcja mask
wymaga następujących ustawień:
key
pattern
replace
action
:mask
pattern
może zawierać nazwaną grupę umieszczoną między ?<
i >:
. Przykład: (?<userGroupName>[a-zA-Z.:\/]+)\d+
? Grupa to (?<userGroupName>[a-zA-Z.:\/]+)
i userGroupName
jest nazwą grupy. pattern
może następnie zawierać tę samą grupę o nazwie między ${
i }
po której następuje maska. Przykład, w którym maska to **: ${userGroupName}**
.
Zobacz Przykłady procesora telemetrii, aby zapoznać się z przykładami maskowania.
Uwzględnij kryteria i wyklucz kryteria
Procesory atrybutów obsługują opcjonalne include
i exclude
kryteria.
Procesor atrybutów jest stosowany tylko do danych telemetrycznych, które spełniają kryteria include
(jeśli są dostępne) i nie są zgodne z jej exclude
kryteriami (jeśli są dostępne).
Aby skonfigurować tę opcję, w obszarze include
lub exclude
(lub obu), określ co najmniej jeden matchType
i spanNames
lub .attributes
Konfiguracja include
lub exclude
zezwala na więcej niż jeden określony warunek.
Wszystkie określone warunki muszą mieć wartość true, aby spowodować dopasowanie.
Wymagane pola:
matchType
określa sposób interpretowania elementów wspanNames
tablicach iattributes
tablicach. Możliwe wartości toregexp
istrict
. Dopasowania wyrażeń regularnych są wykonywane względem całej wartości atrybutu, więc jeśli chcesz dopasować wartość zawierającąabc
ją w dowolnym miejscu, musisz użyć polecenia.*abc.*
.
Pola opcjonalne:
spanNames
musi odpowiadać co najmniej jednemu z elementów.attributes
określa listę atrybutów, które mają być zgodne. Wszystkie te atrybuty muszą być dokładnie zgodne, aby spowodować dopasowanie.
Uwaga
Jeśli określono obie include
wartości i exclude
, include
właściwości są sprawdzane przed sprawdzeniem exclude
właściwości.
Uwaga
include
Jeśli konfiguracja lub exclude
nie została spanNames
określona, kryteria dopasowania są stosowane zarówno w systemach , jak spans
i logs
.
Przykładowe zastosowanie
"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"
}
]
}
]
Aby uzyskać więcej informacji, zobacz Przykłady procesora telemetrii.
Procesor rozpiętości
Procesor span modyfikuje nazwę zakresu lub atrybuty zakresu na podstawie nazwy zakresu. Może obsługiwać możliwość dołączania lub wykluczania zakresów.
Nazwij zakres
Sekcja name
wymaga fromAttributes
ustawienia. Wartości z tych atrybutów służą do tworzenia nowej nazwy, łączonej w kolejności określonej przez konfigurację. Procesor zmienia nazwę zakresu tylko wtedy, gdy wszystkie te atrybuty znajdują się na rozpiętości.
Ustawienie separator
jest opcjonalne. To ustawienie jest ciągiem i można użyć wartości podzielonych.
Uwaga
Jeśli zmiana nazwy zależy od procesora atrybutów w celu zmodyfikowania atrybutów, upewnij się, że procesor span jest określony po procesor atrybutów w specyfikacji potoku.
"processors": [
{
"type": "span",
"name": {
"fromAttributes": [
"attributeKey1",
"attributeKey2",
],
"separator": "::"
}
}
]
Wyodrębnianie atrybutów z nazwy zakresu
Sekcja toAttributes
zawiera listę wyrażeń regularnych odpowiadających nazwie zakresu. Wyodrębnia atrybuty na podstawie podwyrażeń.
Ustawienie rules
jest wymagane. To ustawienie wyświetla listę reguł używanych do wyodrębniania wartości atrybutów z nazwy zakresu.
Wyodrębnione nazwy atrybutów zastępują wartości w nazwie zakresu. Każda reguła na liście jest ciągiem wzorca wyrażenia regularnego (regex).
Oto jak wyodrębnione nazwy atrybutów zastępują wartości:
- Nazwa zakresu jest sprawdzana względem wyrażenia regularnego.
- Wszystkie nazwane podwyrażenia wyrażenia regularnego są wyodrębniane jako atrybuty, jeśli wyrażenie regularne jest zgodne.
- Wyodrębnione atrybuty są dodawane do zakresu.
- Każda nazwa podexpressionu staje się nazwą atrybutu.
- Podexpressiona dopasowana część staje się wartością atrybutu.
- Nazwa wyodrębnionego atrybutu zastępuje dopasowaną część w nazwie zakresu. Jeśli atrybuty już istnieją w zakresie, są one zastępowane.
Ten proces jest powtarzany dla wszystkich reguł w podanej kolejności. Każda kolejna reguła działa na nazwie zakresu, która jest wynikiem poprzedniej reguły.
"processors": [
{
"type": "span",
"name": {
"toAttributes": {
"rules": [
"rule1",
"rule2",
"rule3"
]
}
}
}
]
Typowe atrybuty zakresu
W tej sekcji wymieniono niektóre typowe atrybuty zakresu, których mogą używać procesory telemetryczne.
Zakresy HTTP
Atrybut | Type | Opis |
---|---|---|
http.request.method (używane do )http.method |
string | Metoda żądania HTTP. |
url.full (zakres klienta) lub url.path (zakres serwera) (używany do http.url ) |
string | Pełny adres URL żądania HTTP w formularzu scheme://host[:port]/path?query[#fragment] . Fragment zazwyczaj nie jest przesyłany za pośrednictwem protokołu HTTP. Ale jeśli fragment jest znany, powinien zostać uwzględniony. |
http.response.status_code (używane do )http.status_code |
Liczba | Kod stanu odpowiedzi HTTP. |
network.protocol.version (używane do )http.flavor |
string | Typ protokołu HTTP. |
user_agent.original (używane do )http.user_agent |
string | Wartość nagłówka HTTP User-Agent wysłanego przez klienta. |
Łączność z bazą danych Java obejmuje zakresy
W poniższej tabeli opisano atrybuty, których można używać w zakresie łączności bazy danych Java (JDBC):
Atrybut | Type | opis |
---|---|---|
db.system |
string | Identyfikator używanego produktu systemu zarządzania bazami danych (DBMS). Zobacz Semantyczne konwencje dotyczące operacji bazy danych. |
db.connection_string |
string | Parametry połączenia używane do nawiązywania połączenia z bazą danych. Zalecamy usunięcie osadzonych poświadczeń. |
db.user |
string | Nazwa użytkownika na potrzeby uzyskiwania dostępu do bazy danych. |
db.name |
string | Ciąg używany do raportowania nazwy bazy danych, do którego uzyskuje się dostęp. W przypadku poleceń, które przełączają bazę danych, ten ciąg powinien być ustawiony na docelową bazę danych, nawet jeśli polecenie zakończy się niepowodzeniem. |
db.statement |
string | Instrukcja bazy danych, która jest uruchamiana. |
Uwzględnij kryteria i wyklucz kryteria
Procesory span obsługują opcjonalne include
i exclude
kryteria.
Procesor zakresu jest stosowany tylko do danych telemetrycznych, które spełniają kryteria include
(jeśli są dostępne) i nie są zgodne z jej exclude
kryteriami (jeśli są dostępne).
Aby skonfigurować tę opcję, w obszarze include
lub exclude
(lub obu), określ co najmniej jeden matchType
i spanNames
lub zakres attributes
.
Konfiguracja include
lub exclude
zezwala na więcej niż jeden określony warunek.
Wszystkie określone warunki muszą mieć wartość true, aby spowodować dopasowanie.
Wymagane pola:
matchType
określa sposób interpretowania elementów wspanNames
tablicach iattributes
tablicach. Możliwe wartości toregexp
istrict
. Dopasowania wyrażeń regularnych są wykonywane względem całej wartości atrybutu, więc jeśli chcesz dopasować wartość zawierającąabc
ją w dowolnym miejscu, musisz użyć polecenia.*abc.*
.
Pola opcjonalne:
spanNames
musi odpowiadać co najmniej jednemu z elementów.attributes
określa listę atrybutów, które mają być zgodne. Wszystkie te atrybuty muszą być dokładnie zgodne, aby spowodować dopasowanie.
Uwaga
Jeśli określono obie include
wartości i exclude
, include
właściwości są sprawdzane przed sprawdzeniem exclude
właściwości.
Przykładowe zastosowanie
"processors": [
{
"type": "span",
"include": {
"matchType": "strict",
"spanNames": [
"spanA",
"spanB"
]
},
"exclude": {
"matchType": "strict",
"attributes": [
{
"key": "attribute1",
"value": "attributeValue1"
}
]
},
"name": {
"toAttributes": {
"rules": [
"rule1",
"rule2",
"rule3"
]
}
}
}
]
Aby uzyskać więcej informacji, zobacz Przykłady procesora telemetrii.
Procesor dzienników
Uwaga
Procesory dzienników są dostępne od wersji 3.1.1.
Procesor dziennika modyfikuje treść komunikatu dziennika lub atrybuty dziennika na podstawie treści komunikatu dziennika. Może obsługiwać możliwość dołączania lub wykluczania dzienników.
Aktualizowanie treści komunikatu dziennika
Sekcja body
wymaga fromAttributes
ustawienia. Wartości z tych atrybutów służą do tworzenia nowej treści, łączonej w kolejności określonej przez konfigurację. Procesor zmienia treść dziennika tylko wtedy, gdy wszystkie te atrybuty są obecne w dzienniku.
Ustawienie separator
jest opcjonalne. To ustawienie jest ciągiem. Można określić ją tak, aby dzieliła wartości.
Uwaga
Jeśli zmiana nazwy zależy od procesora atrybutów w celu zmodyfikowania atrybutów, upewnij się, że procesor dzienników jest określony po procesorze atrybutów w specyfikacji potoku.
"processors": [
{
"type": "log",
"body": {
"fromAttributes": [
"attributeKey1",
"attributeKey2",
],
"separator": "::"
}
}
]
Wyodrębnianie atrybutów z treści komunikatu dziennika
Sekcja toAttributes
zawiera listę wyrażeń regularnych odpowiadających treści komunikatu dziennika. Wyodrębnia atrybuty na podstawie podwyrażeń.
Ustawienie rules
jest wymagane. To ustawienie wyświetla listę reguł używanych do wyodrębniania wartości atrybutów z treści.
Wyodrębnione nazwy atrybutów zastępują wartości w treści komunikatu dziennika. Każda reguła na liście jest ciągiem wzorca wyrażenia regularnego (regex).
Oto jak wyodrębnione nazwy atrybutów zastępują wartości:
- Treść komunikatu dziennika jest sprawdzana względem wyrażenia regularnego.
- Wszystkie nazwane podwyrażenia wyrażenia regularnego są wyodrębniane jako atrybuty, jeśli wyrażenie regularne jest zgodne.
- Wyodrębnione atrybuty są dodawane do dziennika.
- Każda nazwa podexpressionu staje się nazwą atrybutu.
- Podexpressiona dopasowana część staje się wartością atrybutu.
- Nazwa wyodrębnionego atrybutu zastępuje dopasowaną część w nazwie dziennika. Jeśli atrybuty już istnieją w dzienniku, zostaną zastąpione.
Ten proces jest powtarzany dla wszystkich reguł w podanej kolejności. Każda kolejna reguła działa na nazwie dziennika, która jest wynikiem poprzedniej reguły.
"processors": [
{
"type": "log",
"body": {
"toAttributes": {
"rules": [
"rule1",
"rule2",
"rule3"
]
}
}
}
]
Uwzględnij kryteria i wyklucz kryteria
Procesory dzienników obsługują opcjonalne include
i exclude
kryteria.
Procesor dzienników jest stosowany tylko do danych telemetrycznych, które spełniają kryteria include
(jeśli są dostępne) i nie są zgodne z jej exclude
kryteriami (jeśli są dostępne).
Aby skonfigurować tę opcję, w obszarze include
lub exclude
(lub obu), określ wartości matchType
i attributes
.
Konfiguracja include
lub exclude
zezwala na więcej niż jeden określony warunek.
Wszystkie określone warunki muszą mieć wartość true, aby spowodować dopasowanie.
- Wymagane pole:
matchType
określa sposób interpretowania elementów wattributes
tablicach. Możliwe wartości toregexp
istrict
. Dopasowania wyrażeń regularnych są wykonywane względem całej wartości atrybutu, więc jeśli chcesz dopasować wartość zawierającąabc
ją w dowolnym miejscu, musisz użyć polecenia.*abc.*
.attributes
określa listę atrybutów, które mają być zgodne. Wszystkie te atrybuty muszą być dokładnie zgodne, aby spowodować dopasowanie.
Uwaga
Jeśli określono obie include
wartości i exclude
, include
właściwości są sprawdzane przed sprawdzeniem exclude
właściwości.
Uwaga
Procesory dzienników nie obsługują spanNames
polecenia .
Przykładowe zastosowanie
"processors": [
{
"type": "log",
"include": {
"matchType": "strict",
"attributes": [
{
"key": "attribute1",
"value": "value1"
}
]
},
"exclude": {
"matchType": "strict",
"attributes": [
{
"key": "attribute2",
"value": "value2"
}
]
},
"body": {
"toAttributes": {
"rules": [
"rule1",
"rule2",
"rule3"
]
}
}
}
]
Aby uzyskać więcej informacji, zobacz Przykłady procesora telemetrii.
Filtr metryk
Uwaga
Filtry metryk są dostępne od wersji 3.1.1.
Filtry metryk służą do wykluczania niektórych metryk w celu kontrolowania kosztów pozyskiwania.
Filtry metryk obsługują tylko kryteria obsługi exclude
. Metryki spełniające kryteria exclude
nie są eksportowane.
Aby skonfigurować tę opcję, w obszarze exclude
określ matchType
co najmniej jeden metricNames
element .
- Wymagane pole:
matchType
określa sposób dopasowywania elementówmetricNames
. Możliwe wartości toregexp
istrict
. Dopasowania wyrażeń regularnych są wykonywane względem całej wartości atrybutu, więc jeśli chcesz dopasować wartość zawierającąabc
ją w dowolnym miejscu, musisz użyć polecenia.*abc.*
.metricNames
musi odpowiadać co najmniej jednemu z elementów.
Przykładowe zastosowanie
W poniższym przykładzie pokazano, jak wykluczyć metryki o nazwach "metricA" i "metricB":
"processors": [
{
"type": "metric-filter",
"exclude": {
"matchType": "strict",
"metricNames": [
"metricA",
"metricB"
]
}
}
]
W poniższym przykładzie pokazano, jak wyłączyć wszystkie metryki, w tym domyślne metryki wydajności, takie jak procesor i pamięć.
"processors": [
{
"type": "metric-filter",
"exclude": {
"matchType": "regexp",
"metricNames": [
".*"
]
}
}
]
Domyślne metryki przechwycone przez agenta Java
Nazwa metryki | Typ metryki | opis | Filtrowanie |
---|---|---|---|
Current Thread Count |
metryki niestandardowe | Zobacz ThreadMXBean.getThreadCount(). | tak |
Loaded Class Count |
metryki niestandardowe | Zobacz ClassLoadingMXBean.getLoadedClassCount(). | tak |
GC Total Count |
metryki niestandardowe | Suma liczby wszystkich wystąpień GarbageCollectorMXBean (różnice od ostatniego zgłoszenia). Zobacz GarbageCollectorMXBean.getCollectionCount(). | tak |
GC Total Time |
metryki niestandardowe | Suma czasu dla wszystkich wystąpień GarbageCollectorMXBean (różnice od ostatniego zgłoszenia). Zobacz GarbageCollectorMXBean.getCollectionTime(). | tak |
Heap Memory Used (MB) |
metryki niestandardowe | Zobacz MemoryMXBean.getHeapMemoryUsage().getUsed(). | tak |
% Of Max Heap Memory Used |
metryki niestandardowe | java.lang:type=Memory / maksymalna ilość pamięci w bajtach. Zobacz PamięćUsage | tak |
\Processor(_Total)\% Processor Time |
domyślne metryki | Różnica w licznikach znaczników obciążenia procesora CPU (tylko użytkownik i system) podzielonych przez liczbę procesorów logicznych w danym interwale czasu | nie |
\Process(??APP_WIN32_PROC??)\% Processor Time |
domyślne metryki | Zobacz OperatingSystemMXBean.getProcessCpuTime() (różnice od czasu ostatniego zgłoszenia, znormalizowane według czasu i liczby procesorów CPU). | nie |
\Process(??APP_WIN32_PROC??)\Private Bytes |
domyślne metryki | Suma pamięciMXBean.getHeapMemoryUsage() i MemoryMXBean.getNonHeapMemoryUsage(). | nie |
\Process(??APP_WIN32_PROC??)\IO Data Bytes/sec |
domyślne metryki | /proc/[pid]/io Suma bajtów odczytanych i zapisanych przez proces (różnice od ostatniego zgłoszenia). Zobacz proc(5). |
nie |
\Memory\Available Bytes |
domyślne metryki | Zobacz OperatingSystemMXBean.getFreePhysicalMemorySize(). | nie |
Często zadawane pytania
Dlaczego procesor dziennika nie przetwarza plików dziennika przy użyciu elementu TelemetryClient.trackTrace()?
TelemetryClient.trackTrace() jest częścią klasycznego mostka zestawu SDK usługi Application Insights, a procesory dzienników współpracują tylko z nową instrumentacją opartą na protokole OpenTelemetry.