Categorii

Ultima actualizare 17 septembrie 2020

Logurile unei aplicații Heroku sunt agregate din fluxurile de ieșire ale tuturor proceselor care rulează, componentelor de sistem și serviciilor de backing. Logplex de la Heroku direcționează fluxurile de jurnal de la toate aceste surse diverse într-un singur canal, oferind o bază pentru o logare cuprinzătoare.

Tipuri de jurnale

Jurnale de execuție

Heroku agregă următoarele categorii de jurnale pentru o aplicație implementată:

  • Jurnale de aplicație – Ieșire de jurnal de la aplicația însăși. Aceasta include jurnalele generate de codul și dependențele aplicației dumneavoastră. (Filtru: --source app)
  • Jurnale de sistem – Mesaje despre acțiunile întreprinse de infrastructura platformei Heroku în numele aplicației dumneavoastră, cum ar fi: repornirea unui proces prăbușit, dormitul sau trezirea unui dyno web sau servirea unei pagini de eroare din cauza unei probleme din aplicația dumneavoastră. (Filter: --source heroku)
  • Jurnale API – Mesaje despre acțiunile administrative întreprinse de dumneavoastră și de alți dezvoltatori care lucrează la aplicația dumneavoastră, cum ar fi: implementarea de cod nou, scalarea formării procesului sau comutarea modului de întreținere. (Filtru: --source app --dyno api)
  • Jurnale add-on – Mesaje de la serviciile add-on. Consultați articolul Dev Center al add-on-ului pentru detalii. (Filtrul variază în funcție de add-on)
  • Build logs

    Jurnalele care sunt generate în timpul construirii și implementării aplicației dvs. sunt separate de jurnalele de execuție ale aplicației. Jurnalele atât pentru compilările reușite, cât și pentru cele nereușite sunt disponibile din fila Activity a aplicației dvs. din Heroku Dashboard:

    Captură de ecran din

    Click View build log pentru orice eveniment de compilare din Activity Feed pentru a vedea jurnalele acestuia:

    Captură de ecran din

    Limitele istoricului de jurnale

    Logplex este conceput pentru colaționarea și direcționarea mesajelor de jurnal, nu pentru stocare. Acesta reține cele mai recente 1.500 de linii din jurnalele dvs. consolidate, care expiră după 1 săptămână.

    Pentru o persistență mai pregătită pentru producție a jurnalelor, puteți adăuga aplicației dvs. unul dintre suplimentele de logare disponibile pe platforma Heroku. Cele mai multe dintre aceste add-on-uri oferă un plan gratuit pentru a începe.

    Alternativ, puteți implementa propriile drenaje de jurnal pentru un control total asupra a ceea ce se întâmplă cu jurnalele dumneavoastră.

    Scrierea în jurnalul dumneavoastră

    Ceea ce aplicația dumneavoastră scrie la ieșire standard (stdout) sau eroare standard (stderr) este capturat în jurnalele dumneavoastră. Acest lucru înseamnă că puteți înregistra de oriunde din codul aplicației dvs. cu o simplă instrucțiune de ieșire.

    În Ruby, ați putea folosi ceva de genul:

puts "Hello, logs!"

În Java:

System.err.println("Hello, logs!");System.out.println("Hello, logs!");

Același lucru este valabil pentru toate celelalte limbaje acceptate de Heroku.

Pentru a profita de înregistrarea în timp real a jurnalelor, ar putea fi necesar să dezactivați orice tamponare a jurnalelor pe care o realizează aplicația dvs. De exemplu, în Ruby, adăugați acest lucru în fișierul config.ru:

$stdout.sync = true

Câteva framework-uri trimit ieșirea de jurnal în alt loc decât stdout în mod implicit. Acestea ar putea necesita o configurare suplimentară. De exemplu, atunci când folosiți Ruby on Rails TaggedLogger de la ActiveSupport, ar trebui să adăugați următoarele în configurația aplicației dvs. pentru a obține jurnalizarea stdout:

config.logger = Logger.new(STDOUT)

Recuperare jurnale prin CLI

Vizualizare jurnale

Pentru a prelua cele mai recente jurnale ale aplicației dumneavoastră, utilizați comanda heroku logs:

$ heroku logs2010-09-16T15:13:46.677020+00:00 app: Processing PostController#list (for 208.39.138.12 at 2010-09-16 15:13:46) 2010-09-16T15:13:46.677023+00:00 app: Rendering template within layouts/application2010-09-16T15:13:46.677902+00:00 app: Rendering post/list2010-09-16T15:13:46.678990+00:00 app: Rendered includes/_header (0.1ms)2010-09-16T15:13:46.698234+00:00 app: Completed in 74ms (View: 31, DB: 40) | 200 OK 2010-09-16T15:13:46.723498+00:00 heroku: at=info method=GET path="/posts" host=myapp.herokuapp.com" fwd="204.204.204.204" dyno=web.1 connect=1ms service=18ms status=200 bytes=9752010-09-16T15:13:47.893472+00:00 app: 2 jobs processed at 16.6761 j/s, 0 failed ...

În acest exemplu, ieșirea include linii de jurnal de la unul dintre dynos-urile web ale aplicației, de la routerul HTTP Heroku și de la unul dintre lucrătorii aplicației.

Comanda logs recuperează 100 de linii de jurnal în mod implicit. Puteți specifica numărul de linii de jurnal de recuperat (până la un maxim de 1.500 de linii) utilizând opțiunea --num (sau -n).

$ heroku logs -n 200

Real-time tail

Similar cu tail -f, real-time tail afișează jurnalele recente și lasă sesiunea deschisă pentru ca jurnalele în timp real să intre în flux. Prin vizualizarea unui flux de jurnale în timp real din aplicația dumneavoastră, puteți obține informații despre comportamentul aplicației dumneavoastră în timp real și puteți depana problemele curente.

Puteți coda jurnalele utilizând --tail (sau -t).

$ heroku logs --tail

Când ați terminat, apăsați Ctrl+C pentru a reveni la prompt.

O sesiune de coadă în timp real se termină automat după o oră de inactivitate.

Formatul jurnalului

Formatul de ieșire al comenzii heroku logs este următorul:

timestamp source: message
  • Timestamp – Data și ora înregistrate în momentul în care linia de jurnal a fost produsă de către banc sau componentă. Timestamp-ul este în formatul specificat de RFC5424 și include o precizie de microsecunde.
  • Source – Toate dino-urile aplicației dumneavoastră (dino-uri web, lucrători în fundal, cron) au sursa, app. Toate componentele de sistem Heroku (router HTTP, manager de dyno) au sursa, heroku.
  • Dyno – Numele dyno-ului sau al componentei care a scris linia de jurnal. De exemplu, worker #3 apare ca worker.3, iar Heroku HTTP router apare ca router.
  • Message – Conținutul liniei de jurnal. Liniile generate de dynos care depășesc 10.000 de octeți sunt împărțite în bucăți de 10.000 de octeți fără linii noi suplimentare la sfârșit. Fiecare bucată este transmisă ca o linie de jurnal separată.

Filtrare

Dacă doriți să preluați doar jurnalele cu o anumită sursă, un anumit dyno sau ambele, puteți utiliza argumentele de filtrare --source (sau -s) și --dyno (sau -d):

$ heroku logs --dyno router2012-02-07T09:43:06.123456+00:00 heroku: at=info method=GET path="/stylesheets/dev-center/library.css" host=devcenter.heroku.com fwd="204.204.204.204" dyno=web.5 connect=1ms service=18ms status=200 bytes=132012-02-07T09:43:06.123456+00:00 heroku: at=info method=GET path="/articles/bundler" host=devcenter.heroku.com fwd="204.204.204.204" dyno=web.6 connect=1ms service=18ms status=200 bytes=20375$ heroku logs --source app2012-02-07T09:45:47.123456+00:00 app: Rendered shared/_search.html.erb (1.0ms)2012-02-07T09:45:47.123456+00:00 app: Completed 200 OK in 83ms (Views: 48.7ms | ActiveRecord: 32.2ms)2012-02-07T09:45:47.123456+00:00 app: 1 jobs processed at 23.0330 j/s, 0 failed ...2012-02-07T09:46:01.123456+00:00 app: Started GET "/articles/buildpacks" for 4.1.81.209 at 2012-02-07 09:46:01 +0000$ heroku logs --source app --dyno worker2012-02-07T09:47:59.123456+00:00 app: Article#record_view_without_delay completed after 0.02212012-02-07T09:47:59.123456+00:00 app: 5 jobs processed at 31.6842 j/s, 0 failed ...

Când filtrați după dyno, fie numele de bază (de ex, --dyno web) fie numele complet (de ex, --dyno web.1) poate fi utilizat.

Puteți, de asemenea, combina comutatoarele de filtrare cu --tail pentru a obține un flux în timp real de ieșire filtrată.

$ heroku logs --source app --tail

Ordonarea mesajelor din jurnal

Când preluați jurnalele, s-ar putea să observați că acestea nu sunt întotdeauna în ordine cronologică exactă, în special atunci când sunt implicate mai multe componente. Jurnalele provin din mai multe surse (noduri de router, dinozauri etc.) și sunt asamblate într-un singur flux de jurnale de către Logplex. Logplex însuși utilizează o arhitectură distribuită pentru a asigura o disponibilitate ridicată, ceea ce înseamnă că mesajele de jurnal ar putea fi colectate în mai multe noduri Logplex și, prin urmare, să fie livrate în afara ordinii.

Recuperarea jurnalelor prin intermediul tabloului de bord web

Vezi jurnalele

Puteți vizualiza jurnalele pe web, conectându-vă la tabloul dvs. de bord Heroku. Navigați la aplicația pe care doriți să o vedeți, de exemplu https://dashboard.heroku.com/apps/<app-name>. Odată ajuns pe această pagină, selectați „more” (mai mult), ar trebui să vedeți un meniu derulant:

În acest meniu selectați „View logs” (Vizualizare jurnale).

.

Leave a Reply