Telemetriprocessorer (förhandsversion) – Azure Monitor Application Insights för Java
Kommentar
Funktionen telemetriprocessorer är avsedd som förhandsversion eftersom vi inte kan garantera bakåtkompatibilitet från lansering till lansering på grund av det experimentella tillståndet för attributsemantiska konventioner. Funktionen har dock testats och stöds i produktion.
Application Insights Java 3.x kan bearbeta telemetridata innan data exporteras.
Vissa användningsfall:
- Maskera känsliga data.
- Lägg till anpassade dimensioner villkorligt.
- Uppdatera span-namnet, som används för att aggregera liknande telemetri i Azure Portal.
- Ta bort specifika span-attribut för att kontrollera inmatningskostnader.
- Filtrera bort vissa mått för att kontrollera inmatningskostnader.
Kommentar
Om du vill ta bort specifika (hela) intervall för att kontrollera inmatningskostnaden kan du läsa om samplings åsidosättningar.
Terminologi
Innan du lär dig mer om telemetriprocessorer bör du förstå termerna span och log.
Ett spann är en typ av telemetri som representerar något av:
- En inkommande begäran.
- Ett utgående beroende (till exempel ett fjärranrop till en annan tjänst).
- Ett pågående beroende (till exempel arbete som utförs av underkomponenter i tjänsten).
En logg är en typ av telemetri som representerar:
- loggdata som samlats in från Log4j, Logback och java.util.logging
För telemetriprocessorer är dessa span-/loggkomponenter viktiga:
- Name
- Brödtext
- Attribut
Spannamnet är den primära visningen för begäranden och beroenden i Azure Portal. Span-attribut representerar både standard- och anpassade egenskaper för en viss begäran eller ett visst beroende.
Spårningsmeddelandet eller brödtexten är den primära visningen för loggar i Azure Portal. Loggattribut representerar både standard- och anpassade egenskaper för en viss logg.
Typer av telemetriprocessorer
För närvarande är de fyra typerna av telemetriprocessorer
- Attributprocessorer
- Spänn över processorer
- Loggprocessorer
- Måttfilter
En attributprocessor kan infoga, uppdatera, ta bort eller hash-attribut för ett telemetriobjekt (span
eller log
).
Den kan också använda ett reguljärt uttryck för att extrahera ett eller flera nya attribut från ett befintligt attribut.
En span-processor kan uppdatera telemetrinamnet för begäranden och beroenden. Det kan också använda ett reguljärt uttryck för att extrahera ett eller flera nya attribut från span-namnet.
En loggprocessor kan uppdatera telemetrinamnet för loggar. Det kan också använda ett reguljärt uttryck för att extrahera ett eller flera nya attribut från loggnamnet.
Ett måttfilter kan filtrera bort mått för att styra inmatningskostnaden.
Kommentar
För närvarande bearbetar telemetriprocessorer endast attribut av typen sträng. De bearbetar inte attribut av typen Booleskt värde eller tal.
Komma igång
Börja med att skapa en konfigurationsfil med namnet applicationinsights.json. Spara den i samma katalog som applicationinsights-agent-*.jar. Använd följande mall.
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "attribute",
...
},
{
"type": "attribute",
...
},
{
"type": "span",
...
},
{
"type": "log",
...
},
{
"type": "metric-filter",
...
}
]
}
}
Attributprocessor
Attributprocessorn ändrar attribut för en span
eller en log
. Det kan stödja möjligheten att inkludera eller exkludera span
eller log
. Den tar en lista över åtgärder som utförs i den ordning som konfigurationsfilen anger. Processorn stöder följande åtgärder:
insert
update
delete
hash
extract
mask
insert
Åtgärden insert
infogar ett nytt attribut i telemetriobjektet där det key
inte redan finns.
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "attribute1",
"value": "value1",
"action": "insert"
}
]
}
]
Åtgärden insert
kräver följande inställningar:
key
- Antingen
value
ellerfromAttribute
action
:insert
update
Åtgärden update
uppdaterar ett attribut i telemetriobjektet där det key
redan finns.
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "attribute1",
"value": "newValue",
"action": "update"
}
]
}
]
Åtgärden update
kräver följande inställningar:
key
- Antingen
value
ellerfromAttribute
action
:update
delete
Åtgärden delete
tar bort ett attribut från ett telemetriobjekt.
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "attribute1",
"action": "delete"
}
]
}
]
Åtgärden delete
kräver följande inställningar:
key
action
:delete
hash
Åtgärden hash
hashar (SHA1) ett befintligt attributvärde.
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "attribute1",
"action": "hash"
}
]
}
]
Åtgärden hash
kräver följande inställningar:
key
action
:hash
extract
Kommentar
Funktionen extract
är endast tillgänglig i version 3.0.2 och senare.
Åtgärden extract
extraherar värden med hjälp av en regel för reguljära uttryck från indatanyckeln till målnycklar som regeln anger. Om det redan finns en målnyckel åsidosätter åtgärden extract
målnyckeln. Den här åtgärden fungerar som inställningen för spännviddsprocessorntoAttributes
, där det befintliga attributet är källan.
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "attribute1",
"pattern": "<regular pattern with named matchers>",
"action": "extract"
}
]
}
]
Åtgärden extract
kräver följande inställningar:
key
pattern
action
:extract
mask
Kommentar
Funktionen mask
är endast tillgänglig i version 3.2.5 och senare.
Åtgärden mask
maskerar attributvärden med hjälp av en regel för reguljära uttryck som anges i pattern
och replace
.
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "attributeName",
"pattern": "<regular expression pattern>",
"replace": "<replacement value>",
"action": "mask"
}
]
}
]
Åtgärden mask
kräver följande inställningar:
key
pattern
replace
action
:mask
pattern
kan innehålla en namngiven grupp placerad mellan ?<
och >:
. Exempel: (?<userGroupName>[a-zA-Z.:\/]+)\d+
? Gruppen är (?<userGroupName>[a-zA-Z.:\/]+)
och userGroupName
är namnet på gruppen. pattern
kan sedan innehålla samma namngivna grupp placerad mellan ${
och }
följt av masken. Exempel där masken är **: ${userGroupName}**
.
Se Exempel på telemetriprocessor för maskeringsexempel.
Inkludera kriterier och exkludera kriterier
Attributprocessorer stöder valfritt include
och exclude
villkor.
En attributprocessor tillämpas endast på telemetri som matchar dess include
kriterier (om den är tillgänglig) och inte matchar dess exclude
kriterier (om den är tillgänglig).
Om du vill konfigurera det här alternativet under include
eller exclude
(eller båda) anger du minst en matchType
och antingen spanNames
eller attributes
.
Konfigurationen include
eller exclude
tillåter mer än ett angivet villkor.
Alla angivna villkor måste utvärderas till true för att resultera i en matchning.
Obligatoriska fält:
matchType
styr hur objekt ispanNames
matriser ochattributes
matriser tolkas. Möjliga värden ärregexp
ochstrict
. Reguljära uttrycksmatchningar utförs mot hela attributvärdet, så om du vill matcha ett värde som innehållerabc
var som helst i det måste du använda.*abc.*
.
Valfria fält:
spanNames
måste matcha minst ett av objekten.attributes
anger listan över attribut som ska matchas. Alla dessa attribut måste matcha exakt för att resultera i en matchning.
Kommentar
Om både include
och exclude
anges include
kontrolleras egenskaperna innan exclude
egenskaperna kontrolleras.
Kommentar
Om konfigurationen include
eller inte har spanNames
angetts tillämpas matchningsvillkoren på både spans
och logs
exclude
.
Exempelanvändning
"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"
}
]
}
]
Mer information finns i Exempel på telemetriprocessor.
Spänn över processor
Span-processorn ändrar antingen spannamnet eller attributen för ett spann baserat på spannets namn. Det kan stödja möjligheten att inkludera eller exkludera intervall.
Namnge ett intervall
Avsnittet name
kräver inställningen fromAttributes
. Värdena från dessa attribut används för att skapa ett nytt namn, sammanfogat i den ordning som konfigurationen anger. Processorn ändrar endast spannamnet om alla dessa attribut finns i intervallet.
Inställningen separator
är valfri. Den här inställningen är en sträng och du kan använda delade värden.
Kommentar
Om namnbytet förlitar sig på attributprocessorn för att ändra attribut kontrollerar du att span-processorn har angetts efter attributprocessorn i pipelinespecifikationen.
"processors": [
{
"type": "span",
"name": {
"fromAttributes": [
"attributeKey1",
"attributeKey2",
],
"separator": "::"
}
}
]
Extrahera attribut från spannsnamnet
I toAttributes
avsnittet visas de reguljära uttryck som ska matcha span-namnet mot. Den extraherar attribut baserat på underuttryck.
Inställningen rules
krävs. Den här inställningen visar de regler som används för att extrahera attributvärden från span-namnet.
Extraherade attributnamn ersätter värdena i span-namnet. Varje regel i listan är en mönstersträng för reguljära uttryck (regex).
Så här ersätter extraherade attributnamn värden:
- Spannamnet kontrolleras mot regexen.
- Alla namngivna underuttryck av regex extraheras som attribut om regex matchar.
- De extraherade attributen läggs till i intervallet.
- Varje underuttrycksnamn blir ett attributnamn.
- Den underuttrycksmatchade delen blir attributvärdet.
- Det extraherade attributnamnet ersätter den matchade delen i spannamnet. Om attributen redan finns i intervallet skrivs de över.
Den här processen upprepas för alla regler i den ordning de anges. Varje efterföljande regel fungerar på span-namnet som är utdata från den tidigare regeln.
"processors": [
{
"type": "span",
"name": {
"toAttributes": {
"rules": [
"rule1",
"rule2",
"rule3"
]
}
}
}
]
Vanliga span-attribut
I det här avsnittet visas några vanliga span-attribut som telemetriprocessorer kan använda.
HTTP-intervall
Attribut | Typ | Beskrivning |
---|---|---|
http.request.method (brukade vara http.method ) |
sträng | HTTP-begärandemetod. |
url.full (klientintervall) eller url.path (serverintervall) (brukade vara http.url ) |
sträng | Fullständig URL för HTTP-begäran i formuläret scheme://host[:port]/path?query[#fragment] . Fragmentet överförs vanligtvis inte via HTTP. Men om fragmentet är känt bör det inkluderas. |
http.response.status_code (brukade vara http.status_code ) |
Nummer | Statuskod för HTTP-svar. |
network.protocol.version (brukade vara http.flavor ) |
sträng | Typ av HTTP-protokoll. |
user_agent.original (brukade vara http.user_agent ) |
sträng | Värdet för HTTP User-Agent-huvudet som skickas av klienten. |
Java Database-anslutning sträcker sig över
I följande tabell beskrivs attribut som du kan använda i JDBC(Java Database Connectivity):
Attribut | Typ | Description |
---|---|---|
db.system |
sträng | Identifierare för den databashanteringssystemprodukt (DBMS) som används. Se Semantiska konventioner för databasåtgärder. |
db.connection_string |
sträng | Anslutningssträng som används för att ansluta till databasen. Vi rekommenderar att du tar bort inbäddade autentiseringsuppgifter. |
db.user |
sträng | Användarnamn för åtkomst till databasen. |
db.name |
sträng | Sträng som används för att rapportera namnet på databasen som används. För kommandon som växlar databasen bör den här strängen anges till måldatabasen, även om kommandot misslyckas. |
db.statement |
sträng | Databasuttryck som körs. |
Inkludera kriterier och exkludera kriterier
Span-processorer stöder valfritt include
och exclude
kriterier.
En span-processor tillämpas endast på telemetri som matchar dess include
kriterier (om den är tillgänglig) och inte matchar dess exclude
kriterier (om den är tillgänglig).
Om du vill konfigurera det här alternativet, under include
eller (eller båda), anger du minst en matchType
och antingen spanNames
eller sträcker sig över attributes
exclude
.
Konfigurationen include
eller exclude
tillåter mer än ett angivet villkor.
Alla angivna villkor måste utvärderas till true för att resultera i en matchning.
Obligatoriska fält:
matchType
styr hur objekt ispanNames
matriser ochattributes
matriser tolkas. Möjliga värden ärregexp
ochstrict
. Reguljära uttrycksmatchningar utförs mot hela attributvärdet, så om du vill matcha ett värde som innehållerabc
var som helst i det måste du använda.*abc.*
.
Valfria fält:
spanNames
måste matcha minst ett av objekten.attributes
anger listan över attribut som ska matchas. Alla dessa attribut måste matcha exakt för att resultera i en matchning.
Kommentar
Om både include
och exclude
anges include
kontrolleras egenskaperna innan exclude
egenskaperna kontrolleras.
Exempelanvändning
"processors": [
{
"type": "span",
"include": {
"matchType": "strict",
"spanNames": [
"spanA",
"spanB"
]
},
"exclude": {
"matchType": "strict",
"attributes": [
{
"key": "attribute1",
"value": "attributeValue1"
}
]
},
"name": {
"toAttributes": {
"rules": [
"rule1",
"rule2",
"rule3"
]
}
}
}
]
Mer information finns i Exempel på telemetriprocessor.
Loggprocessor
Kommentar
Loggprocessorer är tillgängliga från version 3.1.1.
Loggprocessorn ändrar antingen loggmeddelandetexten eller attributen för en logg baserat på loggmeddelandetexten. Det kan ge stöd för möjligheten att inkludera eller exkludera loggar.
Uppdatera loggmeddelandetexten
Avsnittet body
kräver inställningen fromAttributes
. Värdena från dessa attribut används för att skapa en ny brödtext, sammanfogad i den ordning som konfigurationen anger. Processorn ändrar endast loggtexten om alla dessa attribut finns i loggen.
Inställningen separator
är valfri. Den här inställningen är en sträng. Du kan ange det för att dela upp värden.
Kommentar
Om namnbytet förlitar sig på attributprocessorn för att ändra attribut kontrollerar du att loggprocessorn har angetts efter attributprocessorn i pipelinespecifikationen.
"processors": [
{
"type": "log",
"body": {
"fromAttributes": [
"attributeKey1",
"attributeKey2",
],
"separator": "::"
}
}
]
Extrahera attribut från loggmeddelandetexten
Avsnittet toAttributes
visar de reguljära uttryck som matchar loggmeddelandetexten. Den extraherar attribut baserat på underuttryck.
Inställningen rules
krävs. Den här inställningen visar de regler som används för att extrahera attributvärden från brödtexten.
Extraherade attributnamn ersätter värdena i loggmeddelandetexten. Varje regel i listan är en mönstersträng för reguljära uttryck (regex).
Så här ersätter extraherade attributnamn värden:
- Loggmeddelandetexten kontrolleras mot regex.
- Alla namngivna underuttryck av regex extraheras som attribut om regex matchar.
- De extraherade attributen läggs till i loggen.
- Varje underuttrycksnamn blir ett attributnamn.
- Den underuttrycksmatchade delen blir attributvärdet.
- Det extraherade attributnamnet ersätter den matchade delen i loggnamnet. Om attributen redan finns i loggen skrivs de över.
Den här processen upprepas för alla regler i den ordning de anges. Varje efterföljande regel fungerar på loggnamnet som är utdata från den tidigare regeln.
"processors": [
{
"type": "log",
"body": {
"toAttributes": {
"rules": [
"rule1",
"rule2",
"rule3"
]
}
}
}
]
Inkludera kriterier och exkludera kriterier
Loggprocessorer stöder valfritt include
och exclude
villkor.
En loggprocessor tillämpas endast på telemetri som matchar dess include
kriterier (om den är tillgänglig) och inte matchar dess exclude
kriterier (om den är tillgänglig).
Om du vill konfigurera det här alternativet under include
eller exclude
(eller båda) anger du matchType
och attributes
.
Konfigurationen include
eller exclude
tillåter mer än ett angivet villkor.
Alla angivna villkor måste utvärderas till true för att resultera i en matchning.
- Obligatoriskt fält:
matchType
styr hur objekt iattributes
matriser tolkas. Möjliga värden ärregexp
ochstrict
. Reguljära uttrycksmatchningar utförs mot hela attributvärdet, så om du vill matcha ett värde som innehållerabc
var som helst i det måste du använda.*abc.*
.attributes
anger listan över attribut som ska matchas. Alla dessa attribut måste matcha exakt för att resultera i en matchning.
Kommentar
Om både include
och exclude
anges include
kontrolleras egenskaperna innan exclude
egenskaperna kontrolleras.
Kommentar
Loggprocessorer stöder spanNames
inte .
Exempelanvändning
"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"
]
}
}
}
]
Mer information finns i Exempel på telemetriprocessor.
Måttfilter
Kommentar
Måttfilter är tillgängliga från version 3.1.1.
Måttfilter används för att exkludera vissa mått för att styra inmatningskostnaden.
Måttfilter stöder exclude
endast kriterier. Mått som matchar kriterierna exclude
exporteras inte.
Om du vill konfigurera det här alternativet under exclude
anger du matchType
en eller flera metricNames
.
- Obligatoriskt fält:
matchType
styr hur objekt imetricNames
matchas. Möjliga värden ärregexp
ochstrict
. Reguljära uttrycksmatchningar utförs mot hela attributvärdet, så om du vill matcha ett värde som innehållerabc
var som helst i det måste du använda.*abc.*
.metricNames
måste matcha minst ett av objekten.
Exempelanvändning
Följande exempel visar hur du exkluderar mått med namnen "metricA" och "metricB":
"processors": [
{
"type": "metric-filter",
"exclude": {
"matchType": "strict",
"metricNames": [
"metricA",
"metricB"
]
}
}
]
I följande exempel visas hur du inaktiverar alla mått, inklusive standardmått för automatisk insamling av prestanda som processor och minne.
"processors": [
{
"type": "metric-filter",
"exclude": {
"matchType": "regexp",
"metricNames": [
".*"
]
}
}
]
Standardmått som samlas in av Java-agenten
Måttnamn | Måtttyp | beskrivning | Filtrerbar |
---|---|---|---|
Current Thread Count |
anpassade mått | Se ThreadMXBean.getThreadCount(). | ja |
Loaded Class Count |
anpassade mått | Se ClassLoadingMXBean.getLoadedClassCount(). | ja |
GC Total Count |
anpassade mått | Summan av antalet för alla GarbageCollectorMXBean-instanser (diff sedan senast rapporterade). Se GarbageCollectorMXBean.getCollectionCount(). | ja |
GC Total Time |
anpassade mått | Tidsåtgång för alla GarbageCollectorMXBean-instanser (diff sedan senast rapporterade). Se GarbageCollectorMXBean.getCollectionTime(). | ja |
Heap Memory Used (MB) |
anpassade mått | Se MemoryMXBean.getHeapMemoryUsage().getUsed(). | ja |
% Of Max Heap Memory Used |
anpassade mått | java.lang:type=Memory/maximum amount of memory in bytes. Se Minnesanvändning | ja |
\Processor(_Total)\% Processor Time |
standardmått | Skillnad i systemomfattande processorbelastningsräknare (endast användare och system) dividerat med antalet logiska processorer under ett givet tidsintervall | nej |
\Process(??APP_WIN32_PROC??)\% Processor Time |
standardmått | Se OperatingSystemMXBean.getProcessCpuTime() (diff sedan senast rapporterad, normaliserad efter tid och antal processorer). | nej |
\Process(??APP_WIN32_PROC??)\Private Bytes |
standardmått | Summan av MemoryMXBean.getHeapMemoryUsage() och MemoryMXBean.getNonHeapMemoryUsage(). | nej |
\Process(??APP_WIN32_PROC??)\IO Data Bytes/sec |
standardmått | /proc/[pid]/io Summan av byte som lästs och skrivits av processen (diff sedan senast rapporterade). Se proc(5). |
nej |
\Memory\Available Bytes |
standardmått | Se OperatingSystemMXBean.getFreePhysicalMemorySize(). | nej |
Vanliga frågor och svar
Varför bearbetar inte loggfilerna för loggprocessorn med TelemetryClient.trackTrace()?
TelemetryClient.trackTrace() är en del av Application Insights klassiska SDK-brygga och loggprocessorerna fungerar bara med den nya OpenTelemetry-baserade instrumentationen.