Kategoriat

Viimeisin päivitetty 17. syyskuuta 2020

Heroku-sovelluksen lokit kootaan sen kaikkien käynnissä olevien prosessien, järjestelmäkomponenttien ja tukipalveluiden tulostusvirroista. Herokun Logplex reitittää kaikkien näiden erilaisten lähteiden lokivirrat yhteen kanavaan, mikä tarjoaa perustan kattavalle lokien kirjaamiselle.

Lokien tyypit

Lokit suoritusajasta

Heroku kokoaa yhteen käyttöönotetun sovelluksen seuraavat lokikategoriat:

  • Sovelluksen lokit – Sovelluksen itsensä tuottamat lokitulosteet. Tämä sisältää sovelluksen koodin ja riippuvuuksien tuottamat lokit. (Suodatin: --source app)
  • Järjestelmälokit – Viestit toimista, joita Heroku-alustan infrastruktuuri tekee sovelluksesi puolesta, kuten: kaatuneen prosessin uudelleenkäynnistäminen, verkkodynon lepotila tai herättäminen tai virhesivun tarjoaminen sovelluksen ongelman vuoksi. (Suodatin: --source heroku)
  • API-lokit – Viestit hallinnollisista toimista, joita sinä ja muut sovelluksesi parissa työskentelevät kehittäjät ovat toteuttaneet, kuten: uuden koodin käyttöönotto, prosessinmuodostuksen skaalaus tai ylläpitotilan kytkeminen. (Suodatin: --source app --dyno api)
  • Lisäosan lokit – Lisäosan palveluiden viestit. Katso lisätietoja lisäosan Dev Center -artikkelista. (Suodatin vaihtelee lisäosan mukaan)

Build-lokit

Lokit, jotka syntyvät sovelluksen rakentamisen ja käyttöönoton aikana, ovat erillään sovelluksen ajonaikaisista lokeista. Sekä onnistuneiden että epäonnistuneiden rakennusten lokit ovat saatavilla sovelluksesi Activity-välilehdeltä Heroku Dashboardissa:

Screenshot of

Klikkaa View build log minkä tahansa rakennustapahtuman kohdalla Activity Feedissä nähdäksesi sen lokit:

Screenshot of

Logihistorian rajoitukset

Logplex on suunniteltu lokiviestien kokoamiseen ja reitittämiseen, ei tallentamiseen. Se säilyttää viimeisimmät 1 500 riviä koottuja lokitietojasi, jotka vanhenevat 1 viikon kuluttua.

Tuotantokelpoisempaa lokien pysyvyyttä varten voit lisätä sovellukseesi jonkin Heroku-alustan saatavilla olevista lokituslisäosista. Useimmat näistä lisäosista tarjoavat ilmaisen paketin, jolla pääset alkuun.

Vaihtoehtoisesti voit toteuttaa omia lokiviemäreitäsi, jolloin voit hallita täysin sitä, mitä lokeillesi tapahtuu.

Kirjoittaminen lokiisi

Kaikki, mitä sovelluksesi kirjoittaa standardiin out (stdout) tai standardivirheeseen (stderr), tallentuu lokiisi. Tämä tarkoittaa, että voit kirjata lokia mistä tahansa sovelluskoodissasi yksinkertaisella ulostulolausekkeella.

Rubyssä voit käyttää jotakin seuraavanlaista:

puts "Hello, logs!"

Javassa:

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

Sama pätee kaikkiin muihin Herokun tukemiin kieliin.

Hyödyntääksesi reaaliaikaista lokin kirjaamista sinun on ehkä poistettava käytöstä kaikki sovelluksessasi mahdollisesti tapahtuva lokien puskurointi. Lisää esimerkiksi Ruby-kielessä tämä config.ru-tiedostoosi:

$stdout.sync = true

Jotkut kehykset lähettävät lokitulosteen oletusarvoisesti muualle kuin stdout. Nämä saattavat vaatia ylimääräistä konfigurointia. Kun käytät esimerkiksi ActiveSupportin Ruby on Rails TaggedLoggeria, sinun on lisättävä sovelluksesi konfiguraatioon seuraava, jotta saat stdout-loggauksen:

config.logger = Logger.new(STDOUT)

Lokien haku CLI:n kautta

Katsele lokit

Noutaaksesi sovelluksesi viimeisimmät lokit käytä komentoa 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 ...

Tässä esimerkissä ulostulo sisältää lokirivejä yhdestä sovelluksen web-dynosta, Herokun HTTP-reitittimestä ja yhdestä sovelluksen työläisistä.

Komento logs hakee oletusarvoisesti 100 lokiriviä. Voit määrittää haettavien lokirivien määrän (enintään 1500 riviä) käyttämällä --num (tai -n) -vaihtoehtoa.

$ heroku logs -n 200

Real-time tail

Samankaltainen kuin tail -f, reaaliaikainen tail näyttää viimeisimmät lokit ja jättää istunnon auki reaaliaikaisten lokien virtaamista varten. Katsomalla sovelluksesi lokien suoraa virtausta voit saada käsityksen reaaliaikaisen sovelluksesi käyttäytymisestä ja debugata nykyisiä ongelmia.

Voit seurata lokeja käyttämällä --tail (tai -t).

$ heroku logs --tail

Kun olet valmis, paina Ctrl+C palataksesi kehotteeseen.

Reaaliaikainen tail-istunto päättyy automaattisesti tunnin käyttämättömyyden jälkeen.

Lokin muoto

Komennon heroku logs tulostusmuoto on seuraava:

timestamp source: message
  • Aikaleima – Päivämäärä ja kellonaika, joka on tallennettu sillä hetkellä, kun dyno tai komponentti tuotti lokirivin. Aikaleima on RFC5424:n määrittelemässä muodossa, ja se sisältää mikrosekunnin tarkkuuden.
  • Lähde – Kaikilla sovelluksesi dynoilla (web-dynot, taustatyöläiset, cron) on lähde, app. Kaikilla Herokun järjestelmäkomponenteilla (HTTP-reititin, dynonhallinta) on lähde, heroku.
  • Dyno – Sen dynon tai komponentin nimi, joka kirjoitti lokirivin. Esimerkiksi worker #3 näkyy nimellä worker.3 ja Herokun HTTP-reititin nimellä router.
  • Message – Lokirivin sisältö. Dynojen tuottamat rivit, jotka ylittävät 10000 tavua, jaetaan 10000 tavun lohkoihin ilman ylimääräisiä perässä olevia rivinvaihtoja. Jokainen lohko lähetetään erillisenä lokirivinä.

Suodatus

Jos haluat hakea vain lokit, joissa on tietty lähde, tietty dyno tai molemmat, voit käyttää suodatusargumentteja --source (tai -s) ja --dyno (tai -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 ...

Suodatettaessa dynon mukaan, joko perusnimi (esim, --dyno web) tai koko nimi (esim, --dyno web.1) voidaan käyttää.

Voit myös yhdistää suodatuskytkimet --tail:n kanssa saadaksesi reaaliaikaisen virran suodatetusta tulosteesta.

$ heroku logs --source app --tail

Lokiviestien järjestys

Kun haet lokitietoja, saatat huomata, etteivät ne aina ole täsmällisessä kronologisessa järjestyksessä, varsinkin kun mukana on useita komponentteja. Lokit ovat peräisin monista lähteistä (reititinsolmut, dynot jne.), ja Logplex kokoaa ne yhdeksi lokivirraksi. Logplex itse käyttää hajautettua arkkitehtuuria korkean saatavuuden varmistamiseksi, mikä tarkoittaa, että lokiviestejä saatetaan kerätä useisiin Logplex-solmuihin ja siksi ne saatetaan toimittaa epäjärjestyksessä.

Lokien haku web-kojelaudan kautta

Katsele lokiviestejä

Voit tarkastella lokejasi web-verkkopalvelimella kirjautumalla Herokun kojelautaan. Siirry sovellukseen, jonka haluat nähdä esimerkiksi https://dashboard.heroku.com/apps/<app-name>. Kun olet tällä sivulla valitsemalla ”lisää” sinun pitäisi nähdä pudotusvalikko:

Tässä valikossa valitse ”Näytä lokit”.

Leave a Reply