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:
Klikkaa View build log
minkä tahansa rakennustapahtuman kohdalla Activity Feedissä nähdäksesi sen lokit:
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