Cum să utilizați AWS Logs Insights pentru a interoga valorile tabloului de bord din AWS Services Logs

Fiecare serviciu AWS își înregistrează procesarea în fișiere organizate în grupuri de jurnal CloudWatch. Grupurile de jurnal sunt de obicei denumite după serviciul în sine pentru o identificare mai ușoară. Mesajele de sistem ale serviciului sau informațiile comune de stare sunt scrise implicit în acele fișiere jurnal.

Cu toate acestea, puteți adăuga informații despre mesajele de jurnal personalizate peste cele implicite. Dacă astfel de jurnale sunt create cu înțelepciune, ele pot servi pentru a crea tablouri de bord utile CloudWatch.

Cu metrici și informații structurate care oferă detalii suplimentare despre procesarea locurilor de muncă. Nu numai că pot conține widget-uri standard cu informații de sistem despre serviciu. Puteți extinde acest lucru cu propriul dvs. conținut, agregat în widget-ul sau în metrica dvs. personalizată.

Interogați fișierele jurnal

Sursa: aws.amazon.com

AWS CloudWatch Log Insights vă permite să căutați și să analizați datele din jurnal din resursele dvs. AWS în timp real. Îl puteți privi ca pe o vizualizare a bazei de date. Definiți interogarea pe tabloul de bord, iar tabloul de bord o va selecta atunci când îl vizitați sau în fereastra de timp specificată în trecut, așa cum o definiți în vizualizarea tabloului de bord.

Folosește un limbaj de interogare numit CloudWatch Logs Insights pentru a căuta și analiza datele din jurnal. Limbajul de interogare se bazează pe un subset al limbajului SQL. Vă permite să căutați și să filtrați datele din jurnal. Puteți căuta anumite evenimente din jurnal, text personalizat sau cuvinte cheie și puteți filtra datele din jurnal pe baza anumitor câmpuri. Și cel mai important, agregați datele de jurnal în unul sau mai multe fișiere de jurnal pentru a genera valori și vizualizări rezumate.

Când executați o interogare, CloudWatch Log Insights caută prin datele de jurnal din grupul de jurnal. Apoi returnează textele rezultate din fișierele care corespund criteriilor dvs. de interogare.

Exemplu de interogare a fișierului jurnal

Să aruncăm o privire la câteva întrebări de bază pentru a înțelege conceptul.

Fiecare serviciu, implicit, înregistrează câteva erori cruciale de serviciu. Chiar dacă nu creați un jurnal personalizat dedicat pentru astfel de evenimente de eroare. Apoi, cu o simplă interogare, puteți număra numărul de erori din jurnalele aplicației dvs. în ultima oră:

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

Sau iată cum puteți monitoriza timpul mediu de răspuns al API-ului dvs. în ultima zi:

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

Deoarece, în mod implicit, utilizarea CPU este informațiile înregistrate de serviciu în CloudWatch, puteți aduna și acest tip de măsură:

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

Aceste interogări pot fi personalizate pentru a se potrivi cu cazul dvs. de utilizare specific și pot fi folosite pentru a crea valori și vizualizări personalizate în tablourile de bord CloudWatch. Modul de a face acest lucru este să plasați widget-ul pe tabloul de bord și să plasați codul în interiorul widget-ului pentru a defini ce să selectați.

  Cum să salvați o foaie Excel ca PDF

Iată câteva dintre widget-urile care pot fi folosite în tablourile de bord CloudWatch și completate cu conținutul din Log Insights:

  • Widgeturi text – Afișează informații bazate pe text, cum ar fi rezultatul unei interogări CloudWatch Insights.
  • Widgeturi de interogare în jurnal – Afișează rezultatele unei interogări de jurnal CloudWatch Insights, cum ar fi numărul de erori din jurnalele aplicației.

Cum să creați informații utile de jurnal pentru tabloul de bord

Sursa: aws.amazon.com

Pentru a utiliza în mod eficient interogările CloudWatch Insights în tablourile de bord CloudWatch, este bine să urmați câteva bune practici atunci când creați jurnalele CloudWatch pentru fiecare dintre serviciile pe care le utilizați în sistemul dvs. Iată câteva sfaturi:

#1. Utilizați înregistrarea structurată

Trebuie să respectați un format de înregistrare care utilizează o schemă predefinită pentru a înregistra datele într-un format structurat. Acest lucru facilitează căutarea și filtrarea datelor din jurnal folosind interogări CloudWatch Insights.

Acest lucru înseamnă practic standardizarea jurnalelor dvs. în diferite servicii din platforma dvs. de arhitectură. Definirea acestuia în standardele de dezvoltare ajută enorm.

De exemplu, puteți defini că fiecare problemă legată de un anumit tabel al bazei de date va fi înregistrată cu un mesaj de pornire precum: „[TABLE_NAME] Avertisment / Eroare: ”.

Sau puteți separa joburile de date complete de joburile de date delta prin prefixe precum „[FULL/DELTA]” să selecteze doar mesaje legate de procesele de date concrete.

Puteți defini că, în timpul procesării datelor dintr-un anumit sistem sursă, numele sistemului va fi un prefix al fiecărei intrări de jurnal aferente. După aceea, este mult mai ușor să filtrați astfel de mesaje din fișierele jurnal și să construiți valori asupra lor.

Sursa: aws.amazon.com

#2. Utilizați formate de jurnal consistente

Utilizați formate de jurnal coerente în toate resursele dvs. AWS pentru a facilita căutarea și filtrarea datelor din jurnal folosind interogări CloudWatch Insights.

Acest lucru este destul de legat de punctul anterior, dar adevărul este că, cu cât formatul de jurnal este mai standardizat, cu atât este mai ușor să utilizați datele de jurnal. Dezvoltatorii se pot baza apoi pe acest format și îl pot folosi chiar și intuitiv.

  Lista de produse Google relevante pentru afacerea dvs

Faptul crud este că majoritatea proiectelor nu se deranjează cu niciun standard în ceea ce privește exploatarea forestieră. În plus, multe proiecte nu creează nici măcar jurnalele personalizate. Este șocant, dar și atât de comun în același timp.

Nici nu pot spune de câte ori m-am trezit întrebându-mă cum pot locui oamenii aici fără nicio abordare a erorilor. Și dacă cineva a făcut un efort să facă un fel de tratare a erorilor ca excepție, a făcut-o greșit.

Deci, un format de jurnal consistent este un avantaj puternic. Nu mulți le au.

#3. Includeți metadate relevante

Includeți metadate în datele de jurnal, cum ar fi marcajele de timp, ID-urile resurselor și codurile de eroare, pentru a facilita căutarea și filtrarea datelor din jurnal folosind interogările CloudWatch Insights.

#4. Activați Rotația jurnalului

Activați rotația jurnalului pentru a preveni ca datele dvs. de jurnal să devină prea mari și pentru a facilita căutarea și filtrarea datelor din jurnal folosind interogările CloudWatch Insights.

A nu avea date de jurnal este un lucru, dar a avea prea multe dintre ele fără structură este la fel de disperat. Dacă nu vă puteți folosi datele, este ca și cum nu ați avea deloc date.

#5. Utilizați agenții CloudWatch Logs

Dacă nu vă puteți ajuta și refuzați să vă construiți sistemul de jurnal personalizat, atunci cel puțin utilizați agenți CloudWatch Logs. Ei trimit automat date de jurnal din resursele dvs. AWS către CloudWatch Logs. Acest lucru facilitează căutarea și filtrarea datelor din jurnal folosind interogări CloudWatch Insights.

Exemple de interogări cu statistici mai complexe

Interogarea CloudWatch Insights poate fi mai complicată decât declarația pe două rânduri.

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

Această interogare face următoarele:

  • Selectează evenimentele din jurnal care conțin șirul „EROARE”, dar nu „404”.
  • Analizează mesajul de jurnal pentru a extrage marcajul de timp, metoda HTTP, calea, codul de stare și timpul de răspuns.
  • Calculează timpul mediu de răspuns și numărul de evenimente din jurnal pentru fiecare combinație de metodă HTTP, cale, cod de stare și oră.
  • Sortează rezultatele numărând în ordine descrescătoare.
  • Limitează rezultatul la primele 20 de rezultate.
  • Această interogare identifică cele mai frecvente erori din aplicația dvs. și urmărește timpul mediu de răspuns pentru fiecare combinație de metodă HTTP, cale și cod de stare. Puteți utiliza rezultatele pentru a crea valori și vizualizări personalizate în tablourile de bord CloudWatch pentru a monitoriza performanța aplicației dvs. web și a depana problemele.

      Ce înseamnă „OTOH” și cum îl folosiți?

    Un alt exemplu de interogare a mesajelor serviciului 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
    • Interogarea selectează evenimentele din jurnal care conțin șirul „REST.API.REQUEST”.
    • Apoi analizează mesajul de jurnal pentru a extrage metoda HTTP, calea, codul de stare și timpul de răspuns.
    • Acesta calculează timpul mediu de răspuns și numărul de evenimente din jurnal pentru fiecare combinație de metodă HTTP, cale și cod de stare și sortează rezultatele după număr în ordine descrescătoare.
    • Limitează rezultatul la primele 20 de rezultate.

    Puteți utiliza rezultatul acestei interogări pentru a crea un grafic cu linii într-un tablou de bord CloudWatch care arată timpul mediu de răspuns pentru fiecare combinație de metodă HTTP, cale și cod de stare de-a lungul timpului.

    Construirea tabloului de bord

    Pentru a completa valorile și vizualizările din tablourile de bord CloudWatch din rezultatul interogărilor din jurnalul CloudWatch Insights, puteți naviga la consola CloudWatch și urmați vrăjitorul Dashboard pentru a vă crea conținut.

    După aceea, așa arată codul unui tablou de bord CloudWatch și conține valori completate de datele de interogare CloudWatch Insights:

    {
        "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"
                }
            }
        ]
    }

    Acest tablou de bord CloudWatch conține două widget-uri:

  • Un widget metric care afișează utilizarea medie a CPU a unei instanțe EC2 în timp. Interogarea CloudWatch Insights populează widgetul. Selectează datele de utilizare a procesorului pentru o anumită instanță EC2 și le adună la intervale de 5 minute.
  • Un widget de jurnal care afișează numărul de erori ale aplicației de-a lungul timpului. Selectează evenimentele de jurnal care conțin șirul „EROARE” și le adună pe oră.
  • Este un fișier în format JSON cu o definiție a tabloului de bord și a valorilor în interior. Conține (ca proprietate) și interogarea insight în sine.

    Puteți lua codul și îl puteți implementa în orice cont AWS de care aveți nevoie. Presupunând că serviciile și mesajele de jurnal sunt consecvente în toate conturile și etapele dvs. AWS, tabloul de bord va funcționa pe toate conturile fără a fi nevoie să schimbați codul sursă al tabloului de bord.

    Cuvinte finale

    Construirea unei structuri solide de logare a fost întotdeauna o investiție bună în viitorul fiabilității sistemului. Acum poate servi unui scop și mai mare. Puteți avea tablouri de bord utile cu valori și vizualizări doar ca efect secundar al acestui lucru.

    Având necesitatea de a fi făcut o singură dată, cu doar puțină muncă suplimentară, echipa de dezvoltare, echipa de testare și utilizatorii de producție pot beneficia cu toții de aceeași soluție.

    Apoi, consultați cele mai bune instrumente de monitorizare AWS.