Skip to content
Josip Volarević edited this page Oct 29, 2019 · 3 revisions

Platforma za nadgledanje podataka. Svi podaci koje prikuplja AM mogu se svrstati u dva osnovna tipa: metrike i logovi. Metrike su numeričke vrijednosti koje opisuju neki aspekat sistema u određenom trenutku. Lagane su i sposobne podržavati skoro pa trenutne scenarije. Logovi sadrže različite tipove podataka organizirane u zapise sa različitim setovima svojstva za svaki tip. Telemetrije poput događaja i tragova (traces) su pohranje kao logovi uz dodatak podataka o performansama, kako bi sve sve skupa povezala za analizu.

https://docs.microsoft.com/en-us/azure/azure-monitor/media/overview/overview.png

Application Insights je platforma za analizu podataka pod okriljem AM-a. AI zapravo predstavlja proširivi Application Performance Management servis za web developere na različitim platformama. Nadgleda dostupnost, performanse, i korištenost web aplikacija postavljenih bilo na oblaku, bilo na lokalno.

Instalira se mali instrumentacijski paket u aplikaciju, i uspostavi se AI resurs na Micorsoft Azure portalu. Instrumentacija potom nadgleda aplikaciju i šalje telemetrijske podatke AM-u. Resurs i aplikacija se povezuju preko instrumentacijskoga ključa. Osim web servis aplikacije mogu se instrumentirati i pozadinske komponente ili JS u samoj web stranici (telemetrija od strane klijenta).

Application Insights instrumentation in your app sends telemetry to your Application Insights resource. Utjecaj na performanse aplikacije je vrlo mali, pošto su pozivi za praćenje ne-blokirajući, serijalizirani, te poslani u različitim nitima.

AI je integriran u nopCommerce web shop aplikaciju na način da se instalira kao klasični nopCommerce plugin. Potrebno je napraviti novi AI resurs na Azure portalu te slijediti upute za instalaciju nopCommerceAI plugina. Onog trenutka kada se instalira plugin, vezu sa AI resursom se može testirati na način opisan u sljedećim cjelinama.

AI je namjenjen developerima, kako bi im pomogao shvatiti kako je njihova aplikacija korištena i kakvih je performansi.

Nadgleda:

  • Request rates, response times, and failure rates - ukoliko je vrijeme odgovora i količina neuspjeha velika dok je povišen broj zahtjeva, može se lako povući zaključak da web aplikacija ima problem sa resursiranjem.
  • Dependency rates, response times, and failure rates - moguće da neka vanjska zavisnost usporava rad
  • Exceptions - prijavljuju se ujedno iznimke i servera i klijenta
  • Page views and load performance - izvješteni od strane klijentskog preglednika
  • AJAX calls sa web stranica - vrijeme odgovora, količina neuspjeha i poziva
  • User and session counts.
  • Performance counters - performanse server mašina poput CPU, memorije, i korištenja mreže
  • Host diagnostics od Dockera ili Azurea
  • Diagnostic trace logs iz aplikacije - omogućuje povlačenje poveznica između pratiteljskih događaja sa zahtjevima
  • Custom events i metrics - mogućnost pisanja vlastitih događaja i metrika koje bi se pratile (bilo u server ili klijent kodu) kako bi se popratili poslovni događaji poput kupnja artikla i slično.

Postoje brojni načini za pregledavanje podataka. Navesti ću ih sve, ali kroz ostatak dokumentacije primjeri će biti sa nadgledanjem putem Azure portala.

Preglednici: Vizualni prikaz:
Smart detection and manual alerts - automatske obavijesti se prilagode na normalne uzorke telemetrije vaše aplikacije, te se oglase kada se pojavi nešto neobičajno Alert sample
Application map - komponente vaše aplikacije sa ključnim metrikama i obavijestima Application map
Profiler - istraživanje izvršiteljskih profila određenih zahtjeva Profiler
Usage analysis - analiziranje segmentacije korisnika i njihovo zadržavanje na stranicama Retention tool
Diagnostic search for instance data - pretraživanje i filtriranje događaja poput zahtjeva, iznimki, poziva zavisnosti, log tragova i pregleda stranica Search telemetry
Metrics Explorer for aggregated data - istraživanje, filtriranje i segmentacija grupiranih podataka poput količine zahtjeva, neuspjeha, i iznimki; vrijeme odgovora... Metrics
Dashboards - na jednom mjestu podaci sa više različitih izvora. Odličan za više-sastavne aplikacije i za stalni prikaz stanja Dashboards sample
Live Metrics Stream - skoro neposredni pokazatelji performansi. Super za provjeru da sve redi kako je očekivano Live metrics sample
Analytics - Kusto upitni jezik koji omogućuje ručnu analizu performansi i korištenja aplikacije Analytics sample
Visual Studio - pregled performansi podataka u kodu Visual studio
Snapshot debugger - debugiranje snimki live operacija sa vrijednostima parametara Visual studio
Power BI - integracija korisničkih metrika sa ostalim poslovnim cjelinama Power BI
REST API - omogućava pisanje koda za pokretanje upita o metrici i "sirovim" podacima REST API
Continuous export - serijalizirani izvoz podataka u pohranu u trenutku dolaska Export

Početna točka AI resursa. Nakon prispajanja aplikacije na AI, ovdje se svraća kako bi se provjerila valjanost veze. Podaci se generiraju u stvarnome vremenu, za razliku od ostalih dijelova AI koji imaju zakašnjenja 3-10 minuta. Najčešće ćemo napisati malu powershell skriptu koja će pozivati zahtjeve na server.

LMS example LMS je neinvazivan dijagnostički alat i koristi se za:

  • Potvrdu eliminacije problema gledajući performansu aplikacije uživo i brojeći neuspjehe
  • Promatranje učinka testnih preopterećenja i dijagnoza problema uživo
  • Fokusiranje na specifične test sesije ili filtriranje poznatih problema, na način da se odabiru i filtriraju metrike koje se žele pratiti
  • Dobivanje tragova iznimki čim se dogode
  • Eksperimentiranje sa filterima kako bi se pronašli najrelevantniji ključni pokazatelji performanse (KPI)
  • Nadgledanje bilokojih windows pratitelja performansi uživo
  • Jednostavno otkrivanje server problema i filtriranje svih KPI-ova problematičnoga servera

Live Metrics Stream ćemo naći na Azure Portalu na način da uđemo u željeni resurs, te sa bočnog izbornika potražimo Investigate -> Live Metrics Stream

ASP.NET Core podržava logging API koji radi sa raznim built-in i third-party logging providerima. Logiranje se radi pozivom Log( ) ili neke njene varijante na ILogger instancama. ApplicationInsightsLoggerProivder može stajati samostalno, odnosno bez ostalih AI telemetrija, no to nije standard. Za naučiti više o logiranju, baciti oko na Logging in ASP.NET Core.

Logovi emitirani putem ILogger, a ozbiljnosti Warning ili veće, su automatski uhvaćeni. Prateći ILogger dokumentaciju može se naučiti odrediti koje razine logova uhvatiti sa AI.

Kolektiranje zavisnosti omogućeno je po standardu. AI SDK-ovi za .NET i .NET Core su prepakirani sa DependencyTrackingTelemetryModule, odnosno telemetrijski modul koji automatski prikuplja zavisnosti. DependencyTrackingTelemetryModule je uključen u ovaj NuGet paket. Uključen je kada se instalira bilo koji od paketa Microsoft.ApplicationInsights.Web ili Microsoft.ApplicationInsights.AspNetCore

Modul prati sljedeće zavisnosti automatski:

Zavisnosti Detalji
Http/Https Lokalni ili udaljeni http/https pozivi
WCF pozivi Praćeni automatski samo ako su Http-bazirana povezivanja korištena
SQL Pozivi učinjeni sa SqlClient. Pogledaj ovdje za hvatanje SQL queryja
Azure Storage (Blob, Table, Queue) Pozivi napravljeni sa Azure Storage Client
EventHub Client SDK Verzije 1.1.0 i iznad
ServiceBus Client SDK Verzije 3.0.0 i iznad
Azure Cosmos DB Praćeni automatski samo ako se koriste HTTP/HTTPS. TCP način neće biti uhvaćen sa AI

Za web stranice, AI JS SDK automatski prikuplja i AJAX pozive kao zavisnosti.

Može se implementirati i ručno praćenje zavinosti ili napredno SQL praćenje.

Svi zahtjevi na server naše web aplikacije su povezani na pozive zavisnosti, iznimke, i druge događaje koji su praćeni dok aplikacija procesuira zahtjev. Ukoliko je neki zahtjev spor, moguće da je problem u sporom odgovoru od zavisnosti. Za detekciju problema potrebna je dodatna dijagnoza sporog zahtjeva.

Praćenje zavisnosti na Azure portalu u Logs (Analytics) je moguće sa Kusto upitnim jezikom. Primjerice izlistavanje neuspjelih poziva na zavisnosti:

enter image description here Logs (Analytics) ćemo naći na Azure Portalu na način da uđemo u željeni resurs, te sa bočnog izbornika potražimo Monitoring -> Logs (Analytics)

Podrška za Performance counters je ograničena, više na linku. Ukratko, ukoliko se aplikacija vrti na linuxu, za malo više funkcionalnosti bit će potrebno nadograditi SDK verziju na 2.8.0 ili više.

Neću previše izmišljati toplu vodu, nego pročitajte sve na linku o brojačima performansi.

EventCounterCollectionModule je omogućen po standardu, i prikupljati će standardni set brojača iz .NET Core 3.0 aplikacija. EventCounter tutorial nabraja sve brojače iz liste standardnih brojača. Također ima i instrukcije za mijenjanje liste.

Kako bi mogli prikupljati klijentske komponente, potrebno je omogućiti Client-side telemetry. Postoje dva načina za uključiti klijentsku telemetriju u web aplikaciju: npm bazirana uspostava te uspostava putem snippeta.

Npm nam nije zanimljiv jer je u cilju ukomponirati AI u nopCommerce temu, te izbjeći ručnu instalaciju kako bi olakšali krajnjem korisniku posao. Ono što zapravo želimo je ubaciti snippet u našu web aplikaciju, i to direktoriju naše nopCommerce teme. Razlog je taj što tema ima kontrolu nad <head></head> u svakoj stranici web aplikacije (Head.cshtml), te se tema uvijek može lako uključiti i isključiti, ovisno o tome je li želimo ukomponirati klijentsku telemetriju ili ne.

Snippet nećemo hard kodirati, već ćemo slijediti druge upute za uključivanje klijentske telemetrije u web aplikaciju. Dodati ćemo linije u Head.cshtml i _ViewImports.cshtml. Dependency injection će odraditi svoj dio i automatski detektirati i uključiti instrumentacijski ključ kojega već koristi AI resurs.

Standardna AI tema koja omogućuje client-side telemetry nalazi se i na GitHub repozitoriju sa uputama za instalaciju.

//TODO: podaci koje prikupljamo sa klijentskom telemetrijom, fiddler/chrome dev tools

Javascript error monitoring

//TODO

//TODO