Како користити увиде у АВС евиденције за упите о метрикама контролне табле из евиденције АВС услуга

Svaki AWS servis beleži svoje aktivnosti obrade podataka u datotekama koje su organizovane u CloudWatch grupama logova. Te grupe logova obično su imenovane prema samom servisu, radi lakše identifikacije. Sistemske poruke servisa ili informacije o njegovom opštem stanju, po default-u se upisuju u ove datoteke.

Međutim, imate mogućnost da dodate prilagođene informacije u log poruke, iznad onih koje se beleže automatski. Ako se ovi logovi kreiraju na odgovarajući način, mogu poslužiti kao osnova za izradu veoma korisnih CloudWatch kontrolnih tabli.

Uz pomoć metrika i strukturisanih informacija koje pružaju dodatne detalje o procesiranju zadataka, oni ne samo da mogu sadržati standardne vidžete sa sistemskim podacima o servisu, već i omogućavaju proširenje sopstvenim sadržajem, agregiranim u vaše prilagođene vidžete ili metrike.

Pretraživanje datoteka sa logovima

Izvor: aws.amazon.com

AWS CloudWatch Log Insights vam omogućava da pretražujete i analizirate podatke logova iz vaših AWS resursa u realnom vremenu. Možete ga posmatrati kao neku vrstu prikaza baze podataka. Definišete upit na kontrolnoj tabli, a kontrolna tabla će ga izvršavati kada je posetite ili u određenom vremenskom periodu u prošlosti, kako ste definisali u prikazu kontrolne table.

Koristi se upitni jezik nazvan CloudWatch Logs Insights za pretraživanje i analizu podataka u logovima. Ovaj upitni jezik zasnovan je na podskupu SQL-a. Omogućava vam da pretražujete i filtrirate log podatke. Možete pretraživati određene događaje u logovima, prilagođeni tekst ili ključne reči i filtrirati podatke na osnovu određenih polja. Takođe, možete agregirati podatke iz logova unutar jedne ili više datoteka da biste generisali sažete metrike i vizualizacije.

Kada pokrenete upit, CloudWatch Log Insights pretražuje podatke logova u grupi logova. Zatim vraća rezultate koji odgovaraju kriterijumima vašeg upita.

Primer upita za datoteku logova

Pogledajmo nekoliko osnovnih upita da bismo razumeli koncept.

Svaki servis po default-u beleži određene ključne greške servisa, čak i ako ne kreirate namenske prilagođene logove za takve događaje. Korišćenjem jednostavnog upita, možete izbrojati broj grešaka u logovima aplikacije tokom poslednjeg sata:

fields @timestamp, @message
| filter @message like /ERROR/
| stats count() by bin(1h)

Ili, evo primera kako možete pratiti prosečno vreme odziva vašeg API-ja tokom prethodnog dana:

fields @timestamp, @message
| filter @message like /API response time/
| stats avg(response_time) by bin(1d)

Pošto je upotreba CPU-a informacija koju servis po default-u beleži u CloudWatch-u, možete prikupljati i ovu vrstu metrike:

fields @timestamp, @message
| filter @message like /CPUUtilization/
| stats avg(value) by bin(1h)

Ovi upiti se mogu prilagoditi kako bi odgovarali vašem specifičnom slučaju upotrebe i mogu se koristiti za kreiranje prilagođenih metrika i vizualizacija na CloudWatch kontrolnim tablama. To možete učiniti tako što ćete postaviti vidžet na kontrolnu tablu i u okviru vidžeta definisati kod koji određuje šta će biti izabrano.

Evo nekih vidžeta koji se mogu koristiti na CloudWatch kontrolnim tablama i popuniti sadržajem iz Log Insights-a:

  • Tekstualni vidžeti – prikaz informacija zasnovanih na tekstu, kao što je rezultat CloudWatch Insights upita.
  • Vidžeti za upite logova – prikazuju rezultate CloudWatch Insights upita logova, kao što je broj grešaka u logovima vaše aplikacije.

Kako kreirati korisne log informacije za kontrolnu tablu

Izvor: aws.amazon.com

Da biste efikasno koristili CloudWatch Insights upite na CloudWatch kontrolnim tablama, dobro je pratiti određene najbolje prakse pri kreiranju CloudWatch logova za svaki servis koji koristite u vašem sistemu. Evo nekoliko saveta:

#1. Koristite strukturisano logovanje

Trebalo bi da se pridržavate formata logovanja koji koristi unapred definisanu šemu za logovanje podataka u strukturisanom formatu. Ovo olakšava pretragu i filtriranje log podataka pomoću CloudWatch Insights upita.

U osnovi, ovo znači standardizaciju vaših logova u različitim servisima na vašoj arhitektonskoj platformi. Definisanje ovakvih pravila u razvojnim standardima je od izuzetne pomoći.

Na primer, možete definisati da će svaki problem koji se odnosi na određenu tabelu baze podataka biti logovan sa početnom porukom: „[TABLE_NAME] Upozorenje/Greška: <poruka>”.

Ili možete razdvojiti pune poslove podataka od delta poslova podataka pomoću prefiksa kao što je „[FULL/DELTA]“ da biste izabrali samo poruke koje se odnose na konkretne procese podataka.

Možete definisati da će, tokom obrade podataka iz određenog izvornog sistema, ime sistema biti prefiks za svaki povezani unos u log. Kasnije je mnogo lakše filtrirati ovakve poruke iz log datoteka i graditi metrike na osnovu njih.

Izvor: aws.amazon.com

#2. Koristite dosledne formate logova

Koristite dosledne formate logova u svim vašim AWS resursima da biste olakšali pretragu i filtriranje podataka logova pomoću CloudWatch Insights upita.

Ovo je prilično povezano sa prethodnom tačkom, ali je činjenica da što je format logova standardizovaniji, lakše je koristiti podatke logova. Programeri se tada mogu osloniti na taj format i koristiti ga intuitivno.

Gola istina je da se većina projekata ne zamara nikakvim standardima kada je reč o logovanju. Štaviše, mnogi projekti uopšte ne kreiraju nikakve prilagođene logove. To je šokantno, ali i tako često u isto vreme.

Ne mogu ni da kažem koliko puta sam se zapitao kako ljudi mogu da rade bez ikakvog pristupa rukovanju greškama. A ako se neko i potrudio da uradi neku vrstu obrade grešaka kao izuzetak, uradio je to pogrešno.

Dakle, dosledan format logova je velika prednost. Nema ih mnogo.

#3. Uključite relevantne metapodatke

Uključite metapodatke u vaše podatke logova, kao što su vremenske oznake, ID-evi resursa i kodovi grešaka, da biste olakšali pretragu i filtriranje podataka logova pomoću CloudWatch Insights upita.

#4. Omogućite rotaciju logova

Omogućite rotaciju logova kako biste sprečili da vaši podaci logova postanu preveliki i kako biste olakšali pretragu i filtriranje podataka pomoću CloudWatch Insights upita.

Nemati podatke logova je jedna stvar, ali imati previše logova bez strukture je isto tako loše. Ako ne možete da koristite svoje podatke, to je kao da ih uopšte nemate.

#5. Koristite CloudWatch Logs agente

Ako ne možete sebi pomoći i jednostavno odbijate da kreirate sopstveni prilagođeni sistem logovanja, onda bar koristite CloudWatch Logs agente. Oni automatski šalju podatke logova iz vaših AWS resursa u CloudWatch logove. Ovo olakšava pretragu i filtriranje podataka logova pomoću CloudWatch Insights upita.

Složeniji primeri upita

CloudWatch Insights upit može biti kompleksniji od samo dva reda naredbi.

fields @timestamp, @message
| filter @message like /ERROR/
| filter @message not like /404/
| parse @message /.*[(?<timestamp>[^]]+)].*"(?<method>[^s]+)s+(?<path>[^s]+).*" (?<status>d+) (?<response_time>d+)/
| stats avg(response_time) as avg_response_time, count() as count by bin(1h), method, path, status
| sort count desc
| limit 20

Ovaj upit radi sledeće:

  • Bira događaje u logu koji sadrže string „ERROR“, ali ne i „404“.
  • Raščlanjuje poruku u logu da bi izdvojio vremensku oznaku, HTTP metodu, putanju, statusni kod i vreme odziva.
  • Izračunava prosečno vreme odziva i broj događaja u logu za svaku kombinaciju HTTP metode, putanje, statusnog koda i sata.
  • Sortira rezultate prema broju događaja u opadajućem redosledu.
  • Ograničava izlaz na prvih 20 rezultata.

Ovaj upit identifikuje najčešće greške u vašoj aplikaciji i prati prosečno vreme odziva za svaku kombinaciju HTTP metode, putanje i statusnog koda. Možete koristiti rezultate da biste kreirali prilagođene metrike i vizualizacije u CloudWatch kontrolnim tablama za nadgledanje performansi vaše veb aplikacije i rešavanje problema.

Još jedan primer upita za servisne poruke Amazon S3:

fields @timestamp, @message
| filter @message like /REST.API.REQUEST/
| parse @message /.*"(?<method>[^s]+)s+(?<path>[^s]+).*" (?<status>d+) (?<response_time>d+)/
| stats avg(response_time) as avg_response_time, count() as count by bin(1h), method, path, status
| sort count desc
| limit 20
  • Upit bira događaje loga koji sadrže string „REST.API.REQUEST“.
  • Zatim analizira poruku loga da bi izdvojio HTTP metodu, putanju, statusni kod i vreme odziva.
  • On izračunava prosečno vreme odziva i broj događaja loga za svaku kombinaciju HTTP metode, putanje i statusnog koda i sortira rezultate po broju u opadajućem redosledu.
  • Ograničava izlaz na prvih 20 rezultata.

Možete da koristite izlaz ovog upita da napravite linijski grafikon na CloudWatch kontrolnoj tabli koji prikazuje prosečno vreme odziva za svaku kombinaciju HTTP metode, putanje i statusnog koda tokom vremena.

Izgradnja kontrolne table

Da biste popunili metrike i vizualizacije na CloudWatch kontrolnim tablama iz izlaza CloudWatch Insights upita logova, možete otići na CloudWatch konzolu i pratiti čarobnjaka za kontrolnu tablu da biste izgradili svoj sadržaj.

Nakon toga, ovako izgleda kod CloudWatch kontrolne table i sadrži metriku popunjenu podacima CloudWatch Insights upita:

{
    "widgets": [
        {
            "type": "metric",
            "x": 0,
            "y": 0,
            "width": 12,
            "height": 6,
            "properties": {
                "metrics": [
                    [
                        "AWS/EC2",
                        "CPUUtilization",
                        "InstanceId",
                        "i-0123456789abcdef0",
                        {
                            "label": "CPU Utilization",
                            "stat": "Average",
                            "period": 300
                        }
                    ]
                ],
                "view": "timeSeries",
                "stacked": false,
                "region": "us-east-1",
                "title": "EC2 CPU Utilization"
            }
        },
        {
            "type": "log",
            "x": 0,
            "y": 6,
            "width": 12,
            "height": 6,
            "properties": {
                "query": "fields @timestamp, @message
| filter @message like /ERROR/
| stats count() by bin(1h)
",
                "region": "us-east-1",
                "title": "Application Errors"
            }
        }
    ]
}

Ova CloudWatch kontrolna tabla sadrži dva vidžeta:

  • Metrički vidžet koji prikazuje prosečnu iskorišćenost CPU-a EC2 instance tokom vremena. CloudWatch Insights upit popunjava ovaj vidžet. On bira podatke o korišćenju CPU-a za određenu EC2 instancu i agregira ih u intervalima od 5 minuta.
  • Vidžet logova koji prikazuje broj grešaka u aplikaciji tokom vremena. On bira događaje logova koji sadrže string „ERROR“ i agregira ih po satu.

Ovo je datoteka JSON formata sa definicijom kontrolne table i metrika unutra. Sadrži (kao svojstvo) i sam upit za uvid.

Možete uzeti ovaj kod i primeniti ga na bilo koji AWS nalog koji vam je potreban. Pod pretpostavkom da su servisi i poruke logova konzistentni u svim vašim AWS nalozima i fazama, kontrolna tabla će raditi na svim nalozima bez potrebe za promenom izvornog koda kontrolne table.

Završne reči

Izgradnja čvrste strukture logovanja je oduvek bila dobra investicija u budućnost pouzdanosti sistema. Sada, to može poslužiti još većoj svrsi. Možete imati korisne kontrolne table sa metrikama i vizualizacijama kao sporedni efekat toga.

Pošto je potrebno da se uradi samo jednom, uz samo malo dodatnog truda, razvojni tim, tim za testiranje i korisnici u proizvodnji mogu imati koristi od istog rešenja.

Zatim pogledajte najbolje AWS alate za praćenje.