Kategorie

Poslední aktualizace 17. září 2020

Protokoly aplikace Heroku jsou agregovány z výstupních toků všech běžících procesů, systémových komponent a záložních služeb. Systém Heroku Logplex směruje proudy protokolů ze všech těchto různorodých zdrojů do jediného kanálu, čímž poskytuje základ pro komplexní protokolování.

Typy protokolů

Prováděcí protokoly

Heroku agreguje následující kategorie protokolů nasazené aplikace:

  • Protokoly aplikace – výstupní protokoly ze samotné aplikace. Patří sem protokoly generované kódem aplikace a závislostmi. (Filtr: --source app)
  • Systémové protokoly – Zprávy o akcích provedených infrastrukturou platformy Heroku jménem vaší aplikace, například: restartování havarovaného procesu, uspání nebo probuzení webového dynama nebo zobrazení chybové stránky kvůli problému ve vaší aplikaci. (Filtr: --source heroku)
  • Protokoly API – Zprávy o správních akcích provedených vámi a dalšími vývojáři pracujícími na vaší aplikaci, například: nasazení nového kódu, škálování tvorby procesu nebo přepnutí režimu údržby. (Filtr: --source app --dyno api)
  • Protokoly doplňků – Zprávy z doplňkových služeb. Podrobnosti naleznete v článku Dev Center doplňku. (Filtr se liší podle doplňku)

Záznamy o sestavování

Záznamy, které jsou generovány při sestavování a nasazování aplikace, jsou oddělené od záznamů o běhu aplikace. Protokoly úspěšných i neúspěšných sestavení jsou k dispozici na kartě Activity vaší aplikace v panelu Heroku Dashboard:

Snímek obrazovky

Kliknutím na View build log u libovolné události sestavení v kanálu aktivit zobrazíte její protokoly:

Snímek obrazovky

Omezení historie záznamů

Logplex je určen pro třídění a směrování zpráv protokolu, nikoli pro ukládání. Uchovává posledních 1 500 řádků konsolidovaných protokolů, jejichž platnost vyprší po 1 týdnu.

Pro větší persistenci protokolů připravených k produkci můžete do své aplikace přidat jeden z dostupných doplňků pro protokolování platformy Heroku. Většina těchto doplňků nabízí pro začátek bezplatný tarif.

Alternativně můžete implementovat vlastní odtoky protokolů a mít tak plnou kontrolu nad tím, co se s vašimi protokoly děje.

Zápis do protokolu

Vše, co vaše aplikace zapíše do standardního výstupu (stdout) nebo standardní chyby (stderr), se zachytí do vašich protokolů. To znamená, že můžete logovat odkudkoli z kódu své aplikace pomocí jednoduchého výstupního příkazu.

V jazyce Ruby můžete použít něco takového:

puts "Hello, logs!"

V jazyce Java:

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

To samé platí pro všechny ostatní jazyky podporované společností Heroku.

Chcete-li využít logování v reálném čase, možná budete muset vypnout vyrovnávací paměť logů, kterou vaše aplikace provádí. Například v jazyce Ruby přidejte do souboru config.ru toto:

$stdout.sync = true

Některé frameworky ve výchozím nastavení odesílají výstup protokolu jinam než do stdout. Ty mohou vyžadovat další konfiguraci. Například při použití Ruby on Rails TaggedLogger od ActiveSupport byste měli do konfigurace své aplikace přidat následující, abyste získali protokolování stdout:

config.logger = Logger.new(STDOUT)

Vyhledávání logů přes CLI

Zobrazení logů

Pro získání nejnovějších logů aplikace použijte příkaz 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 ...

V tomto příkladu výstup obsahuje řádky logů z jednoho z webových dynam aplikace, směrovače HTTP Heroku a jednoho z pracovníků aplikace.

Příkaz logs ve výchozím nastavení načte 100 řádků protokolu. Pomocí volby --num (nebo -n) můžete určit počet načítaných řádků protokolu (maximálně 1 500 řádků).

$ heroku logs -n 200

Real-time tail

Podobně jako tail -f, real-time tail zobrazuje poslední protokoly a nechává relaci otevřenou pro proudění protokolů v reálném čase. Zobrazením živého proudu protokolů z vaší aplikace můžete získat přehled o chování vaší aplikace v reálném čase a odladit aktuální problémy.

Pomocí --tail (nebo -t) můžete provést tail protokolů.

$ heroku logs --tail

Když skončíte, stiskněte klávesy Ctrl+C a vraťte se na výzvu.

Relace tail v reálném čase se automaticky ukončí po jedné hodině nečinnosti.

Formát protokolu

Výstupní formát příkazu heroku logs je následující:

timestamp source: message
  • Časová značka – Datum a čas zaznamenaný v době, kdy byl řádek protokolu vytvořen dynamem nebo komponentou. Časové razítko je ve formátu specifikovaném protokolem RFC5424 a obsahuje mikrosekundovou přesnost.
  • Zdroj – Všechny dynama vaší aplikace (webová dynama, pracovníci na pozadí, cron) mají zdroj, app. Všechny systémové komponenty Heroku (směrovač HTTP, správce dynam) mají zdroj, heroku.
  • Dyno – Název dynama nebo komponenty, která zapsala řádek protokolu. Například worker #3 se zobrazí jako worker.3 a směrovač HTTP Heroku jako router.
  • Zpráva – Obsah řádku protokolu. Řádky generované dynamem, které přesahují 10000 bajtů, jsou rozděleny na 10000 bajtové kousky bez dalších koncových nových řádků. Každý kus je odeslán jako samostatný řádek protokolu.

Filtrování

Pokud chcete načíst pouze protokoly s určitým zdrojem, určitým dynamem nebo obojím, můžete použít filtrovací argumenty --source (nebo -s) a --dyno (nebo -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 ...

Při filtrování podle dynama se zadává buď základní název (např, --dyno web) nebo celý název (např, --dyno web.1).

Přepínače filtrování můžete také kombinovat s --tail a získat tak proud filtrovaného výstupu v reálném čase.

$ heroku logs --source app --tail

Řazení zpráv protokolu

Při načítání protokolů si můžete všimnout, že nejsou vždy v přesném chronologickém pořadí, zejména pokud se jedná o více komponent. Protokoly pocházejí z mnoha zdrojů (uzlů směrovače, dynamických jednotek atd.) a jsou sestaveny do jediného proudu protokolů aplikací Logplex. Samotný Logplex používá distribuovanou architekturu pro zajištění vysoké dostupnosti, což znamená, že zprávy protokolů mohou být shromažďovány ve více uzlech Logplex, a proto mohou být doručeny mimo pořadí.

Vyhledávání protokolů prostřednictvím webového ovládacího panelu

Zobrazení protokolů

Přihlášením se k ovládacímu panelu Heroku můžete zobrazit své protokoly na webu. Přejděte na aplikaci, kterou chcete zobrazit, například https://dashboard.heroku.com/apps/<app-name>. Jakmile na této stránce vyberete možnost „více“, měli byste vidět rozbalovací nabídku:

V této nabídce vyberte možnost „Zobrazit protokoly“.

.

Leave a Reply