Kategorie

Ostatnia aktualizacja 17 września, 2020

Dzienniki aplikacji Heroku są agregowane ze strumieni wyjściowych wszystkich uruchomionych procesów, komponentów systemu i usług wspierających. Heroku’s Logplex kieruje strumienie logów z wszystkich tych różnorodnych źródeł do pojedynczego kanału, zapewniając podstawę dla kompleksowego rejestrowania.

Typy logów

Logi czasu pracy

Heroku agreguje następujące kategorie logów dla wdrożonej aplikacji:

  • Logi aplikacji – Dane wyjściowe logowania z samej aplikacji. Obejmuje to logi generowane przez kod aplikacji i jej zależności. (Filtr: --source app)
  • Logi systemowe – Komunikaty o działaniach podjętych przez infrastrukturę platformy Heroku w imieniu Twojej aplikacji, takich jak: ponowne uruchomienie zawieszonego procesu, uśpienie lub wybudzenie web dyno lub obsługa strony błędu z powodu problemu w Twojej aplikacji. (Filtr: --source heroku)
  • Logi API – Komunikaty o działaniach administracyjnych podejmowanych przez Ciebie i innych deweloperów pracujących nad Twoją aplikacją, takich jak: wdrażanie nowego kodu, skalowanie procesu tworzenia lub przełączanie trybu konserwacji. (Filtr: --source app --dyno api)
  • Dzienniki dodatków – Wiadomości z usług dodatków. Zobacz artykuł Dev Center dodatku, aby uzyskać szczegółowe informacje. (Filtr zależy od dodatku)

Dzienniki budowania

Dzienniki, które są generowane podczas budowania i wdrażania aplikacji, są oddzielone od dzienników działania aplikacji. Dzienniki zarówno udanych, jak i nieudanych budów są dostępne na karcie Activity Twojej aplikacji w panelu Heroku Dashboard:

Zrzut ekranu

Kliknij View build logdla dowolnego zdarzenia budowania w kanale aktywności, aby zobaczyć jego dzienniki:

Zrzut ekranu z

Limity historii dziennika

Logplex jest przeznaczony do zestawiania i kierowania komunikatów dziennika, a nie do przechowywania. Zachowuje on ostatnie 1500 linii skonsolidowanych logów, które wygasają po 1 tygodniu.

Aby zapewnić trwałość logów na poziomie produkcyjnym, można dodać jeden z dostępnych na platformie Heroku dodatków do logowania do swojej aplikacji. Większość z tych dodatków oferuje darmowy plan, aby zacząć.

Alternatywnie, można wdrożyć własne drenaże dziennika dla pełnej kontroli nad tym, co dzieje się z dziennikami.

Pisanie do dziennika

Wszystko, co twoja aplikacja pisze do standardowego wyjścia (stdout) lub standardowego błędu (stderr) jest przechwytywane w dziennikach. Oznacza to, że możesz logować się z dowolnego miejsca w kodzie aplikacji za pomocą prostej instrukcji wyjścia.

W Ruby, możesz użyć czegoś takiego:

puts "Hello, logs!"

W Javie:

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

To samo dotyczy wszystkich innych języków obsługiwanych przez Heroku.

Aby skorzystać z logowania w czasie rzeczywistym, może być konieczne wyłączenie buforowania logów przez twoją aplikację. Na przykład, w Ruby, dodaj to do swojego pliku config.ru:

$stdout.sync = true

Niektóre frameworki domyślnie wysyłają dane wyjściowe logów gdzie indziej niż stdout. Mogą one wymagać dodatkowej konfiguracji. Na przykład, gdy używasz Ruby on Rails TaggedLogger firmy ActiveSupport, powinieneś dodać poniższe do konfiguracji swojej aplikacji, aby uzyskać logowanie stdout:

config.logger = Logger.new(STDOUT)

Pobieranie logów przez CLI

Przeglądanie logów

Aby pobrać najnowsze logi aplikacji, użyj polecenia 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 ...

W tym przykładzie dane wyjściowe zawierają linie logów z jednego z web dynosów aplikacji, routera HTTP Heroku i jednego z robotników aplikacji.

Polecenie logs domyślnie pobiera 100 linii dziennika. Można określić liczbę linii dziennika do pobrania (maksymalnie do 1500 linii) za pomocą opcji --num (lub -n).

$ heroku logs -n 200

Real-time tail

Podobnie do polecenia tail -f, polecenie real-time tail wyświetla ostatnie dzienniki i pozostawia sesję otwartą dla dzienników w czasie rzeczywistym. Przeglądając strumień logów na żywo ze swojej aplikacji, możesz uzyskać wgląd w zachowanie swojej aplikacji na żywo i debugować bieżące problemy.

Możesz ogonić swoje logi za pomocą --tail (lub -t).

$ heroku logs --tail

Kiedy skończysz, naciśnij Ctrl+C, aby powrócić do zachęty.

Sesja ogona czasu rzeczywistego jest automatycznie kończona po jednej godzinie bezczynności.

Format dziennika

Format wyjściowy polecenia heroku logs jest następujący:

timestamp source: message
  • Znacznik czasowy – data i godzina zarejestrowana w czasie, gdy wiersz dziennika został utworzony przez hamownię lub komponent. Znacznik czasowy jest w formacie określonym przez RFC5424 i zawiera dokładność do mikrosekundy.
  • Źródło – Wszystkie dynosy Twojej aplikacji (web dynosy, background workers, cron) mają źródło, app. Wszystkie komponenty systemowe Heroku (router HTTP, menedżer dyno) mają źródło heroku.
  • Dyno – Nazwa dyno lub komponentu, który napisał linię dziennika. Na przykład worker #3 pojawia się jako worker.3, a Heroku HTTP router pojawia się jako router.
  • Wiadomość – Treść linii dziennika. Linie wygenerowane przez dynos, które przekraczają 10000 bajtów są dzielone na 10000 bajtowe kawałki bez dodatkowych znaków nowej linii. Każdy fragment jest przesyłany jako osobny wiersz dziennika.

Filtrowanie

Jeśli chcesz pobierać tylko dzienniki z określonego źródła, określonego dynama lub obu, możesz użyć argumentów filtrowania --source (lub -s) i --dyno (lub -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 ...

Przy filtrowaniu według dynama można użyć albo nazwy bazowej (np., --dyno web) lub pełna nazwa (np, --dyno web.1) można użyć.

Możesz także połączyć przełączniki filtrowania z --tail, aby uzyskać strumień przefiltrowanych danych wyjściowych w czasie rzeczywistym.

$ heroku logs --source app --tail

Porządkowanie komunikatów dziennika

Podczas pobierania dzienników możesz zauważyć, że nie zawsze są one w dokładnej kolejności chronologicznej, zwłaszcza gdy zaangażowanych jest wiele komponentów. Logi pochodzą z wielu źródeł (węzły routerów, dynosów, itp.) i są łączone w jeden strumień logów przez Logplex. Sam Logplex używa rozproszonej architektury, aby zapewnić wysoką dostępność, co oznacza, że wiadomości dziennika mogą być zbierane w wielu węzłach Logplex i dlatego mogą być dostarczane poza kolejnością.

Pobieranie dzienników za pomocą pulpitu nawigacyjnego

Wyświetl dzienniki

Możesz wyświetlić swoje dzienniki w sieci, logując się do pulpitu nawigacyjnego Heroku. Przejdź do aplikacji, którą chcesz zobaczyć, na przykład https://dashboard.heroku.com/apps/<app-name>. Po wejściu na tę stronę wybierz „więcej” powinieneś zobaczyć rozwijane menu:

W tym menu wybierz „Wyświetl dzienniki”.

.

Leave a Reply