Azure
Il-benefiċċji ta’ Azure Application Insights
X’juri Application Insights, x’dejta jiġbor OpenTelemetry f’.NET, kif il-monitoraġġ tal-browser huwa differenti, u kif iżżid telemetrija bażika ma’ ASP.NET Core.
Meta applikazzjoni tfalli fil-produzzjoni, l-ewwel problema ħafna drabi mhijiex li tirranġa l-bug. Hija li tifhem x’ġara.
Azure Application Insights jgħin f’din l-investigazzjoni. Jiġbor it-telemetrija ta’ applikazzjoni u jlaqqa’ f’Azure Monitor it-talbiet, id-dipendenzi, l-eċċezzjonijiet, il-logs u l-informazzjoni dwar il-prestazzjoni. Minflok tfittex f’fajls separati u tipprova tibni mill-ġdid falliment manwalment, tista’ ssegwi l-operazzjoni f’post wieħed, mit-talba li tidħol sas-sejħiet li tagħmel l-applikazzjoni.
Dan huwa utli anke għal applikazzjoni .NET żgħira. Il-konfigurazzjoni inizjali hija sempliċi u d-dejta miġbura tista’ twieġeb mistoqsijiet prattiċi bħal:
- Liema endpoints qed ifallu?
- Liema talbiet huma bil-mod?
- Id-database jew API esterna qed tikkawża d-dewmien?
- Liema eċċezzjoni seħħet waqt talba?
- Il-problema affettwat operazzjoni waħda jew ħafna utenti?
Application Insights ma jsolvix dawn il-problemi awtomatikament. Il-benefiċċju ewlieni tiegħu huwa li jissostitwixxi parti mill-konġetturi b’evidenza.
X’tiġbor l-integrazzjoni ma’ .NET
Microsoft tirrakkomanda d-distribuzzjoni OpenTelemetry ta’ Azure Monitor għal applikazzjonijiet ASP.NET Core ġodda. OpenTelemetry jaħdem bi tliet sinjali ewlenin: traces, metriċi u logs.
Bil-konfigurazzjoni standard ta’ ASP.NET Core, Application Insights jista’ jirċievi:
- talbiet HTTP deħlin, inklużi t-tul u l-istatus tagħhom;
- sejħiet ħerġin magħmula b’
HttpClient; - sejħiet ta’ dipendenzi appoġġjati lejn SQL u l-Azure SDKs;
- eċċezzjonijiet mhux immaniġġjati u l-stack traces tagħhom;
- logs miktuba permezz ta’
ILogger; - metriċi u dejta ta’ korrelazzjoni li jgħaqqdu operazzjoni mat-telemetrija relatata.
Il-korrelazzjoni hija waħda mill-aktar partijiet utli. Talba li falliet tista’ tintrabat mal-eċċezzjoni tagħha u mas-sejħa tad-dipendenza li falliet waqt l-istess operazzjoni.
Għal-logs tal-applikazzjoni, il-livelli l-aktar rilevanti fil-produzzjoni normalment huma:
- Information għal avvenimenti magħżula tal-applikazzjoni;
- Warning meta tiġri xi ħaġa mhux mistennija iżda l-operazzjoni tista’ tkompli;
- Error meta operazzjoni tfalli;
- Critical meta l-applikazzjoni jew funzjoni essenzjali ma tistax tkompli b’mod sigur.
Debug u Trace huma utli waqt l-iżvilupp, iżda jekk jintbagħtu fi kwantitajiet kbar fil-produzzjoni jistgħu joħolqu storbju u jżidu l-volum tat-telemetrija.
Logs strutturati jagħmlu wkoll id-dejta aktar faċli biex tfittex fiha:
logger.LogWarning(
"Order {OrderId} could not be sent to provider {Provider}",
orderId,
providerName);
F’dan l-eżempju, OrderId u Provider isiru proprjetajiet li tista’ tfittex minflok ma jibqgħu moħbija f’messaġġ wieħed twil.
ASP.NET Core jibqa’ jikkontrolla liema livelli ta’ log jiġu esportati. Konfigurazzjoni sempliċi għall-produzzjoni tista’ żżomm l-informazzjoni tal-applikazzjoni filwaqt li tnaqqas l-istorbju normali tal-framework:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}
Dan huwa biss punt tat-tluq. Servizz jista’ jkollu bżonn logs aktar dettaljati għal namespace wieħed u inqas għal ieħor. L-għan huwa li jinżammu l-avvenimenti li jgħinu investigazzjoni u jitneħħew messaġġi ripetuti li ma jbiddlux id-dijanjosi.
X’ma jinġabarx awtomatikament
L-istrumentazzjoni awtomatika għandha l-limiti tagħha. Application Insights ma jistax jirrapporta informazzjoni li l-applikazzjoni qatt ma pproduċiet.
Eżempji jinkludu:
- eċċezzjoni li tinqabad u mbagħad tiġi injorata mingħajr ma tinkiteb f’log;
- avveniment tan-negozju li ma jipproduċix log, trace jew telemetrija personalizzata;
- xogħol magħmul minn librerija mingħajr strumentazzjoni appoġġjata;
- il-kontenut tat-talbiet u t-tweġibiet;
- fallimenti li jiġru qabel it-traffiku jasal għand l-applikazzjoni;
- page views u żbalji JavaScript meta l-browser SDK ma jkunx installat.
Informazzjoni sensittiva m’għandhiex tiżdied biex timla dawn in-nuqqasijiet. Passwords, access tokens, connection strings, dettalji tal-ħlas u dejta personali ma għandhomx ikunu parti mit-telemetrija.
Monitoraġġ tal-backend u tal-browser
Il-monitoraġġ tal-backend jaħdem ġewwa l-applikazzjoni .NET. Josserva t-talbiet tas-server, l-eċċezzjonijiet, il-logs tal-applikazzjoni, is-sejħiet lejn id-database u l-operazzjonijiet HTTP ħerġin.
Il-monitoraġġ tal-browser jaħdem fuq it-tagħmir tal-viżitatur permezz tal-Application Insights JavaScript SDK. Jista’ jirrapporta page views, il-prestazzjoni fuq in-naħa tal-klijent, sessions u żbalji JavaScript.
Dawn iż-żewġ perspettivi jwieġbu mistoqsijiet differenti. It-telemetrija tal-backend tista’ turi li API rritornat żball. It-telemetrija tal-browser tista’ turi x’esperjenza l-viżitatur qabel ma saret dik it-talba. API tista’ teħtieġ biss monitoraġġ tal-backend, filwaqt li applikazzjoni Razor Pages, Angular jew React tista’ tuża t-tnejn meta l-imġiba fuq in-naħa tal-klijent tkun importanti.
Konfigurazzjoni bażika f’ASP.NET Core
Installa l-pakkett Azure Monitor OpenTelemetry fil-proġett web:
dotnet add package Azure.Monitor.OpenTelemetry.AspNetCore
Imbagħad irreġistra Azure Monitor f’Program.cs:
using Azure.Monitor.OpenTelemetry.AspNetCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services
.AddOpenTelemetry()
.UseAzureMonitor();
var app = builder.Build();
app.Run();
Application Insights juża connection string biex jidentifika fejn għandha tintbagħat it-telemetrija. Fil-produzzjoni, Microsoft tirrakkomanda li din tingħata permezz tal-ambjent:
APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=...;IngestionEndpoint=...
Il-valur jinsab fir-riżorsa Application Insights fil-portal ta’ Azure u għandu jibqa’ barra mill-kontroll tal-verżjoni. Wara li l-applikazzjoni tibda tirċievi traffiku, it-telemetrija tista’ tieħu ftit minuti biex tidher.
L-ewwel query KQL
Il-portal ta’ Azure diġà jinkludi veduti għall-fallimenti, il-prestazzjoni, il-live metrics u d-dipendenzi tal-applikazzjoni. Għal mistoqsijiet aktar speċifiċi, Log Analytics juża Kusto Query Language.
Din il-query turi t-talbiet li fallew fl-aħħar 24 siegħa:
AppRequests
| where TimeGenerated > ago(24h)
| where Success == false
| project TimeGenerated, Name, ResultCode, DurationMs, OperationId
| order by TimeGenerated desc
L-OperationId jgħin biex talba tintrabat mat-traces, id-dipendenzi u l-eċċezzjonijiet relatati.
Il-logs tal-applikazzjoni jinħażnu f’AppTraces. Din il-query tiffoka fuq l-entrati Warning, Error u Critical:
AppTraces
| where TimeGenerated > ago(24h)
| where SeverityLevel >= 2
| project TimeGenerated, SeverityLevel, Message, Properties, OperationId
| order by TimeGenerated desc
Pass utli li jmiss huwa li tieħu l-OperationId minn riżultat interessanti u tfittex telemetrija oħra mill-istess operazzjoni. Hawnhekk il-korrelazzjoni ssir aktar utli milli taqra messaġġi ta’ log waħedhom.
Spiża u volum tat-telemetrija
Application Insights mhuwiex sempliċement servizz bi spiża fissa. Il-ħlas għal Azure Monitor jiddependi prinċipalment mill-ammont ta’ telemetrija miġbura u minn kemm iddum tinżamm.
Logs dettaljati żżejjed, eċċezzjonijiet ripetuti, traffiku għoli u proprjetajiet personalizzati mhux meħtieġa jistgħu jżidu dan il-volum. Sampling u filtering jistgħu jnaqqsuh, filwaqt li cost alerts u daily caps jistgħu jgħinu biex tinstab żieda mhux mistennija. Dawn il-kontrolli jeħtieġu bilanċ: jekk titneħħa wisq telemetrija, tista’ tintilef ukoll l-informazzjoni meħtieġa biex jiġi investigat falliment.
Punt tat-tluq raġonevoli huwa t-telemetrija awtomatika tal-backend, logs strutturati f’livelli utli u numru żgħir ta’ queries għal problemi komuni. Tista’ tiżdied aktar telemetrija meta jkun hemm mistoqsija ċara li trid twieġeb.