heroku - jak zobaczyć wszystkie logi

468

Mam małą aplikację na Heroku. Ilekroć chcę zobaczyć dzienniki, przechodzę do wiersza poleceń i robię to

heroku logs

To pokazuje mi tylko około 100 linii. Czy nie ma sposobu, aby zobaczyć pełne logi dla naszej aplikacji na heroku?

josh
źródło

Odpowiedzi:

784

Aktualizacja (dzięki dawmail333):

heroku logs -n 1500

lub, aby ogonić dzienniki na żywo

heroku logs -t 

Dokumentacja dziennika Heroku

Jeśli potrzebujesz więcej niż kilku tysięcy linii, możesz użyć Syslog Drains heroku

Alternatywnie (stara metoda):

$ heroku run rails c
File.open('log/production.log', 'r').each_line { |line| puts line }
glebm
źródło
5
To nie działa teraz na stosie cedru. Czy ktoś znalazł nową alternatywę?
nathanvda,
2
Wystarczy użyć heroku logs -n 1500, to najlepsza metoda dostępna na Cedrze. Jeśli potrzebujesz więcej linii, potrzebujesz drenażu syslog: devcenter.heroku.com/articles/logging#syslog_drains
Liam Dawson
Jest to przydatna wskazówka również w przypadku problemów związanych z rurociągiem zasobów: heroku logs -n 2000 | grep „precompiled”
Dave Collins
To rzeczywiście heroku run rails c. Zaktualizowano!
glebm
3
W przypadku starej metody, dlaczego miałbyś uruchamiać konsolę szynową zamiast po prostu heroku run cat log/production.log?
Chloe
139

Rejestrowanie znacznie się poprawiło w Heroku!

$ heroku logs -n 500

Lepszy!

$ heroku logs --tail

referencje: http://devcenter.heroku.com/articles/logging

AKTUALIZACJA

To już nie są dodatki, ale część domyślnej funkcjonalności :)

nessur
źródło
4
Ponadto, -n może wzrosnąć do 1500, zakładam, że po tym Heroku po prostu odcina wszystko.
Liam Dawson,
52

Heroku traktuje logi jako uporządkowane czasowo strumienie zdarzeń. Dostęp do *.logplików w systemie plików nie jest zalecany w takim środowisku z różnych powodów.

Po pierwsze, jeśli twoja aplikacja ma więcej niż jedną hamownię, to każdy plik dziennika reprezentuje tylko częściowy widok zdarzeń Twojej aplikacji. Aby uzyskać pełny widok, musisz ręcznie zagregować wszystkie pliki.

Po drugie, system plików w Heroku ma efemeryczne znaczenie, gdy za każdym razem restartujesz lub przenosisz hamownię (co zdarza się raz dziennie ) pliki dziennika są tracone. Dzięki temu masz najwyżej jednodniowy widok na dzienniki tego pojedynczego hamowni.

Wreszcie, na stosie Cedar działa, heroku consolea nawet heroku run bashnie łączy cię z aktualnie uruchomioną dynamiką. Pojawia się nowy specjalnie dla tego bashpolecenia. Jest to nazywane procesem jednorazowym . W związku z tym nie znajdziesz plików dziennika dla innych dynos, które wykonują rzeczywiste procesy http na tym, który został stworzony heroku run.

Rejestrowanie i ogólnie widoczność jest pierwszorzędnym obywatelem Heroku i istnieje kilka narzędzi, które rozwiązują te problemy. Po pierwsze, aby zobaczyć strumień zdarzeń aplikacji w czasie rzeczywistym dla wszystkich dynos i wszystkich warstw aplikacji / stosu, użyj heroku logs -tpolecenia, aby dopasować dane wyjściowe do terminala.

$ heroku logs -t
2010-09-16T15:13:46-07:00 app[web.1]: Processing PostController#list (for 208.39.138.12 at 2010-09-16 15:13:46) [GET]
2010-09-16T15:13:46-07:00 app[web.1]: Rendering template within layouts/application
2010-09-16T15:13:46-07:00 heroku[router]: GET myapp.heroku.com/posts queue=0 wait=0ms service=1ms bytes=975
2010-09-16T15:13:47-07:00 app[worker.1]: 2 jobs processed at 16.6761 j/s, 0 failed ...

Działa to doskonale do obserwowania zachowania aplikacji w tej chwili. Jeśli chcesz przechowywać dzienniki przez dłuższy czas, możesz użyć jednego z wielu dodatków do rejestrowania, które zapewniają przechowywanie, alarmowanie i wyzwalanie.

Na koniec, jeśli chcesz samodzielnie przechowywać pliki dziennika, możesz skonfigurować własny drenaż syslog, aby otrzymywać strumień zdarzeń z Heroku i przetwarzać / analizować siebie.

Podsumowanie: Nie używaj heroku consoleani heroku run bashdo przeglądania statycznych plików dziennika. Dołącz do strumienia zdarzeń dziennika Heroku dla aplikacji za pomocą heroku logslub dodatku rejestrującego.

Ryan Daigle
źródło
23

Zobacz także poszczególne strumienie / filtry.

Na przykład przeglądaj tylko dzienniki aplikacji

heroku logs --source app -t

Lub zobacz tylko dzienniki routera

heroku logs --ps router

Lub połącz je razem

heroku logs --source app --ps worker

Tak dobrze..

Shawn Vader
źródło
5
Aby zobaczyć tylko logi mojej aplikacji, robię: heroku logs --ps web.1(z 1 dyno)
Maxence
22

Cóż, powyższe odpowiedzi są bardzo pomocne, pomogą ci zobaczyć z linii poleceń. Natomiast jeśli chcesz to zrobić z GUI, musisz zalogować się na swoje konto heroku, a następnie wybrać aplikację i na koniec kliknąć przeglądać logi

widok obrazu

Aniket Shivam Tiwari
źródło
1
Ta metoda pokazuje wyniki dziennika tylko wtedy, gdy się pojawiają, począwszy od momentu kliknięcia opcji „Wyświetl dzienniki”. Nie jest to więc przydatne, chyba że chcesz po prostu ogonić dzienniki bez wchodzenia do konsoli.
Jeremy Gunter
2
czy nie ma opcji, aby wyświetlić wszystkie dzienniki z tego samego interfejsu użytkownika?
Sunil Garg,
16

Śledź rejestrowanie Heroku

Aby wyświetlić twoje logi, mamy:

  1. Komenda logs domyślnie pobiera 100 linii dziennika.

heroku logs

  1. pokaż maksymalnie 1500 linii, --num(lub -n) opcję.

heroku logs -n 200

  1. Pokaż dzienniki w czasie rzeczywistym

heroku logs --tail

  1. Jeśli masz wiele aplikacji na heroku

heroku logs --app your_app_name

Minh Nguyen
źródło
9

heroku logs -t pokazuje nam dzienniki na żywo.

ndrx42
źródło
Ale po pewnym czasie się zatrzyma.
Neeraj Sewani
8

Możesz uzyskać dostęp do swoich plików dziennika za pomocą interfejsu wiersza poleceń Heroku ( użycie CLI ).

Jeśli zainstalowany jest interfejs CLI Heroku i znasz nazwę swojej aplikacji (np. https://myapp.herokuapp.com/), Możesz uruchomić następującą komendę:

heroku logs --tail --app=myapp

Możesz również uzyskać dostęp do dzienników w strumieniu czasu rzeczywistego, używając:

heroku logs --source app --tail --app=myapp

Jeśli dzienniki mówią coś takiego:

npm ERR! Pełny dziennik tego uruchomienia można znaleźć w:

npm ERR! /app/.npm/_logs/2017-07-11T08_29_45_291Z-debug.log

Następnie możesz uzyskać do nich dostęp za pomocą terminalu bash za pośrednictwem interfejsu Heroku CLI:

heroku run bash --app=myapp
less ./.npm/_logs/2017-07-11T08_29_45_291Z-debug.log
Benny Neugebauer
źródło
Rozumiem/usr/bin/less: cannot execute binary files
Michael Fulton
7

Być może warto dodać do swojej aplikacji coś w rodzaju bezpłatnego planu Papertrail . Zero konfiguracji, a otrzymasz 7 dni rejestrowania danych do 10 MB / dzień i możesz przeszukiwać 2 dni dzienników.

Clem
źródło
4

dla plików WAR:

Nie korzystałem z github, zamiast tego przesłałem bezpośrednio plik WAR (który okazał się znacznie łatwiejszy i szybszy).

Więc następujące pomogły mi:

heroku logs --app appname

Mam nadzieję, że to komuś pomoże.

Ula
źródło
4

Musisz użyć -tlub --tailopcji i musisz zdefiniować nazwę swojej aplikacji heroku.

heroku logs -t --app app_name
Peter Kota
źródło
4

Moim rozwiązaniem jest uzyskanie pełnego dziennika przy pierwszym uruchomieniu aplikacji, na przykład:

heroku logs -n 1500 > log

następnie dodaj, fgrep -vfaby być na bieżąco, na przykład:

heroku logs -n 1500 > newlog ; fgrep -vf log newlog >> log

w celu ciągłego logowania wystarczy iterować za pomocą zegarka co x minut (lub sekund).

kpsk kpsk
źródło
2

Aby zobaczyć szczegółowy dziennik, musisz umieścić dwa wiersze w production.rbpliku:

config.logger = Logger.new(STDOUT)
config.logger.level = Logger::DEBUG

a następnie uruchamiając

heroku logs -t

możesz zobaczyć szczegółowe logi.

sumit
źródło
2

Wolę to robić w ten sposób

heroku logs --tail | tee -a herokuLogs

Możesz pozostawić skrypt działający w tle i możesz po prostu filtrować dzienniki z pliku tekstowego w dowolny sposób w dowolnym momencie.

Ashish Pahwa
źródło
dzięki, zajęło mi trochę czasu, aby przewinąć, ale w końcu znalazłem rozwiązanie dla mnie.
Meinkraft
2

Musisz zaimplementować opróżnianie dzienników i opróżniać je tam, aby zobaczyć wszystkie dzienniki (zarządzaj również dziennikami historycznymi):

  1. Pierwsza opcja - można użyć Splunk: możesz opróżnić wszystkie dzienniki, takie jak:
heroku drains:add syslog+tls://splunk-server.com:514 -a app_name

A następnie zaloguj się do serwera splunk i wyszukaj dowolną liczbę dzienników. Używam Splunk i działa to dla mnie idealnie.

  1. Druga opcja - możesz kupić dodatek do swojej aplikacji, jak podano poniżej: (Nie korzystałem z tych opcji, ale są one dostępne).

    • Timber.io
    • Logika sumo
    • LogEnteries
    • Log DNA
    • Papierowy szlak

Możesz także spojrzeć na poniższe opcje: Jeśli chcesz mieć swoje dzienniki w formacie JSON, ponieważ pomoże to w przekazywaniu dzienników do systemu zewnętrznego, takiego jak Splunk / ELK, wyszukiwanie (również pod względem wydajności) byłoby łatwe w JSON.

https://github.com/goodeggs/heroku-log-normalizer

Nie ma Readme.md, ale niektóre wyjaśnienia znajdują się na https://github.com/goodeggs/bites/issues/20

W końcu

I zawsze możesz użyć poniższego polecenia, o którym wspominali już inni użytkownicy:

Następujące polecenie spowoduje dopasowanie generowanych dzienników do heroku

heroku logs -t -a <app_name>

Poniższa komenda pokaże 1000 wierszy dzienników z heroku

heroku logs -n 1000 -a <app_name>

Uwaga: dostępnych jest tylko 1500 najnowszych wierszy dzienników, a reszta jest usuwana z heroku dyno.

Vaibhav Sharma
źródło
1

Sugeruję użycie dodatku, używam Logentries. Aby go użyć, uruchom w linii poleceń:

heroku addons:create logentries:le_tryit

(to polecenie tworzy dodatek do darmowego konta, ale oczywiście możesz je uaktualnić, jeśli chcesz)

Logentries pozwala zaoszczędzić do 5 GB woluminu dziennika na miesiąc. Informacje te można przeszukiwać za pomocą wyszukiwania poleceń w ciągu ostatnich 7 dni i zawiera alerty w czasie rzeczywistym.

Tak więc, aby odpowiedzieć na twoje pytanie, używając tego dodatku upewniasz się, że twoje logi nie są już tracone po osiągnięciu 1500 linii zapisanych domyślnie przez Heroku. Mam nadzieję że to pomoże! Miłego dnia!

Jose Paez
źródło
1

heroku logs -t pokazuje nam dzienniki na żywo. heroku logs -n 1500dla określonej liczby dzienników

Ale nadal polecam korzystanie z dodatku szlak papieru, który ma pewne zalety i ma bezpłatny plan podstawowy.

svikramjeet
źródło
0

Możesz użyć heroku logs -n 1500

Ale to nie jest zalecane podejście (innymi słowy nie pokazuje prawdziwego obrazu)

Sugeruję podłączenie jakiegoś narzędzia do logowania. (sumoLogic, ślad papieru n wszystkie) jako dodatek

Wszystkie mają darmową wersję (z kilkoma ograniczeniami, choć wystarczająca do małej aplikacji lub środowiska programistycznego, co zapewni dobry wgląd i narzędzie do analizy dzienników)

Rohit Sureka
źródło
-2

Aby zobaczyć stos cedru, patrz:

https://devcenter.heroku.com/articles/oneoff-admin-ps

musisz uruchomić:

heroku run bash ...

JBN
źródło
9
Na Cedar heroku run bashuruchamia nową hamownię, aby obsłużyć bashpolecenie. System plików na tym urządzeniu nie będzie zawierał żadnych plików dziennika z „aktywnych” web dynos, więc to podejście nie zadziała.
Ryan Daigle