Heroku - wie man alle Protokolle sieht

468

Ich habe eine kleine App auf Heroku. Wann immer ich die Protokolle sehen möchte, gehe ich zur Befehlszeile und mache es

heroku logs

Das zeigt mir nur etwa 100 Zeilen. Gibt es keine Möglichkeit, vollständige Protokolle für unsere Anwendung auf Heroku anzuzeigen?

Josh
quelle

Antworten:

785

Update (danke an dawmail333):

heroku logs -n 1500

oder, um die Protokolle live zu verfolgen

heroku logs -t 

Heroku-Protokolldokumentation

Wenn Sie mehr als ein paar tausend Zeilen benötigen, können Sie die Syslog-Abflüsse von Heroku verwenden

Alternativ (alte Methode):

$ heroku run rails c
File.open('log/production.log', 'r').each_line { |line| puts line }
glebm
quelle
5
Dies funktioniert jetzt nicht auf Zedernstapel. Hat jemand eine neue Alternative gefunden?
Nathanvda
2
Verwenden Sie heroku logs -n 1500es einfach , es ist die beste auf Cedar verfügbare Methode. Wenn Sie mehr Zeilen benötigen, benötigen Sie einen Syslog-Abfluss: devcenter.heroku.com/articles/logging#syslog_drains
Liam Dawson
Dies ist auch ein nützlicher Tipp für Asset Pipeline-Probleme: heroku logs -n 2000 | grep 'vorkompiliert'
Dave Collins
Es ist tatsächlich heroku run rails c. Aktualisiert!
Glebm
3
Warum sollten Sie bei der alten Methode statt nur eine Rails-Konsole verwenden heroku run cat log/production.log?
Chloe
139

Die Protokollierung in Heroku hat sich erheblich verbessert!

$ heroku logs -n 500

Besser!

$ heroku logs --tail

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

AKTUALISIERT

Dies sind keine Add-Ons mehr, sondern Teil der Standardfunktionalität :)

nessur
quelle
4
Außerdem kann -n bis zu 1500 gehen, ich gehe davon aus, dass Heroku danach einfach alles abschneidet.
Liam Dawson
52

Heroku behandelt Protokolle als zeitlich geordnete Ereignisströme. Der Zugriff auf *.logDateien im Dateisystem wird in einer solchen Umgebung aus verschiedenen Gründen nicht empfohlen.

Wenn Ihre App mehr als einen Prüfstand hat, repräsentiert jede Protokolldatei nur eine Teilansicht der Ereignisse Ihrer App. Sie müssten alle Dateien manuell aggregieren, um die vollständige Ansicht zu erhalten.

Zweitens ist das Dateisystem auf Heroku kurzlebig, was bedeutet, dass die Protokolldateien verloren gehen, wenn Ihr Prüfstand neu gestartet oder verschoben wird (was ungefähr einmal am Tag geschieht ). Sie erhalten also höchstens einen Tagesblick in die Protokolle dieses einzelnen Prüfstands.

Schließlich werden Sie auf dem Cedar-Stack ausgeführt heroku consoleoder heroku run bashverbinden sich nicht mit einem aktuell ausgeführten Prüfstand. Es wird eine neue speziell für den bashBefehl erzeugt. Dies wird als einmaliger Vorgang bezeichnet . Daher finden Sie nicht die Protokolldateien für Ihre anderen Dynos, in denen die tatsächlichen http-Prozesse auf dem für sie erstellten ausgeführt werden heroku run.

Die Protokollierung und Sichtbarkeit im Allgemeinen ist ein erstklassiger Bürger von Heroku, und es gibt verschiedene Tools, mit denen diese Probleme behoben werden können. Um einen Echtzeitstrom von Anwendungsereignissen über alle Dynos und alle Ebenen der Anwendung / des Stapels hinweg anzuzeigen, verwenden Sie zunächst den heroku logs -tBefehl, um die Ausgabe an Ihr Terminal zu steuern .

$ 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 ...

Dies funktioniert hervorragend, um das Verhalten Ihrer Anwendung jetzt zu beobachten. Wenn Sie die Protokolle über einen längeren Zeitraum speichern möchten, können Sie eines der vielen Protokollierungs-Add-Ons verwenden , die Protokollaufbewahrung, Warnungen und Auslöser bereitstellen.

Wenn Sie die Protokolldateien selbst speichern möchten, können Sie Ihren eigenen Syslog-Drain einrichten, um den Ereignisstrom von Heroku zu empfangen und sich selbst zu verarbeiten / zu analysieren.

Zusammenfassung: Verwenden heroku consoleoder verwenden Sie keine heroku run bashstatischen Protokolldateien. Pipe in Herokus Stream von Protokollereignissen für Ihre App mithilfe heroku logseines Protokollierungs-Add-Ons.

Ryan Daigle
quelle
23

Siehe auch einzelne Streams / Filter.

ZB nur Ihre Anwendungsprotokolle beenden

heroku logs --source app -t

Oder sehen Sie nur die Router-Protokolle

heroku logs --ps router

Oder verkette sie

heroku logs --source app --ps worker

So gut..

Shawn Vader
quelle
5
Um nur Protokolle meiner Anwendung zu sehen, mache ich: heroku logs --ps web.1(mit 1 Prüfstand)
Maxence
22

Nun, die obigen Antworten sind sehr hilfreich. Sie helfen Ihnen, sie über die Befehlszeile anzuzeigen. Wenn Sie dies über Ihre GUI tun möchten, müssen Sie sich bei Ihrem Heroku-Konto anmelden, Ihre Anwendung auswählen und schließlich auf Protokolle anzeigen klicken

Bildansicht

Aniket Shivam Tiwari
quelle
1
Diese Methode zeigt Ihnen nur die Protokollausgabe, sobald sie auftritt, ab dem Zeitpunkt, an dem Sie auf die Option "Protokolle anzeigen" klicken. Es ist also nur dann nützlich, wenn Sie nur die Protokolle im Wesentlichen verfolgen möchten, ohne in die Konsole zu gehen.
Jeremy Gunter
2
Gibt es keine Option, um alle Protokolle von dieser Benutzeroberfläche selbst anzuzeigen?
Sunil Garg
16

Folgen Sie der Heroku-Protokollierung

Um Ihre Protokolle anzuzeigen, haben wir:

  1. Der Befehl logs ruft standardmäßig 100 Protokollzeilen ab.

heroku logs

  1. zeige maximal 1500 Zeilen, --num(oder -n) Option.

heroku logs -n 200

  1. Protokolle in Echtzeit anzeigen

heroku logs --tail

  1. Wenn Sie viele Apps auf Heroku haben

heroku logs --app your_app_name

Minh Nguyen
quelle
9

heroku logs -t zeigt uns die Live-Protokolle.

ndrx42
quelle
Aber es wird nach einer Weile aufhören.
Neeraj Sewani
8

Sie können über die Befehlszeilenschnittstelle ( CLI-Verwendung ) von Heroku auf Ihre Protokolldateien zugreifen .

Wenn die CLI von Heroku installiert ist und Sie Ihren Anwendungsnamen (wie https://myapp.herokuapp.com/) kennen, können Sie den folgenden Befehl ausführen:

heroku logs --tail --app=myapp

Sie können auch in einem Echtzeit-Stream auf die Protokolle zugreifen, indem Sie:

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

Wenn die Protokolle Ihnen so etwas sagen:

npm ERR! Ein vollständiges Protokoll dieses Laufs finden Sie in:

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

Sie können dann auch über das Bash-Terminal über die Heroku-CLI darauf zugreifen:

heroku run bash --app=myapp
less ./.npm/_logs/2017-07-11T08_29_45_291Z-debug.log
Benny Neugebauer
quelle
Ich bekomme/usr/bin/less: cannot execute binary files
Michael Fulton
7

Es könnte sich lohnen , Ihrer App so etwas wie den kostenlosen Papertrail-Plan hinzuzufügen . Keine Konfiguration, und Sie erhalten 7 Tage Protokolldaten bis zu 10 MB / Tag und können 2 Tage lang Protokolle durchsuchen.

Clem
quelle
4

für WAR-Dateien:

Ich habe kein Github verwendet, sondern direkt eine WAR-Datei hochgeladen (was ich als viel einfacher und schneller empfand).

Folgendes hat mir also geholfen:

heroku logs --app appname

Hoffe es wird jemandem helfen.

Ula
quelle
4

Sie müssen -toder --tailOption verwenden und Sie müssen Ihren Heroku-App-Namen definieren.

heroku logs -t --app app_name
Peter Kota
quelle
4

Meine Lösung besteht darin, beim ersten Start der Anwendung ein vollständiges Protokoll zu erstellen, z.

heroku logs -n 1500 > log

Fügen fgrep -vfSie dann hinzu , um es auf dem neuesten Stand zu halten, wie:

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

Für eine kontinuierliche Protokollierung wiederholen Sie diese einfach alle x Minuten (oder Sekunden) mit watch.

kpsk kpsk
quelle
2

Um das detaillierte Protokoll anzuzeigen, müssen Sie zwei Zeilen in die production.rbDatei einfügen:

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

und dann durch Laufen

heroku logs -t

Sie können die detaillierten Protokolle sehen.

sumit
quelle
2

Ich mache es lieber so

heroku logs --tail | tee -a herokuLogs

Sie können das Skript im Hintergrund laufen lassen und die Protokolle aus der Textdatei jederzeit nach Ihren Wünschen filtern.

Ashish Pahwa
quelle
danke, ich habe eine Weile gebraucht, um zu scrollen, aber endlich die Lösung für mich gefunden.
Meinkraft
2

Sie müssen einige Protokolle entleeren lassen und sollten Ihre Protokolle dort entleeren, um alle Protokolle anzuzeigen (auch historische Protokolle verwalten):

  1. Erste Option - Splunk kann verwendet werden: Sie können alle Ihre Protokolle entleeren wie:
heroku drains:add syslog+tls://splunk-server.com:514 -a app_name

Melden Sie sich dann bei Ihrem Splunk-Server an und suchen Sie nach einer beliebigen Anzahl von Protokollen. Ich benutze Splunk und das funktioniert perfekt für mich.

  1. Zweite Option - Sie können ein Add-On zu Ihrer App erwerben, wie unten angegeben: (Ich habe diese Optionen nicht verwendet, es sind jedoch die verfügbaren).

    • Timber.io
    • Sumo-Logik
    • LogEnteries
    • Log DNA
    • Papier Spur

Sie können sich auch die folgenden Optionen ansehen: Wenn Sie Ihre Protokolle im JSON-Format haben möchten, da es hilfreich ist, wenn Sie Ihre Protokolle auf ein externes System wie Splunk / ELK übertragen, wird die Suche einfach (auch in Bezug auf die Leistung) in JSON.

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

Readme.md ist nicht vorhanden, aber einige Erklärungen finden Sie unter https://github.com/goodeggs/bites/issues/20

zuletzt

Und Sie können immer den folgenden Befehl verwenden, wie bereits von anderen Benutzern erwähnt:

Der folgende Befehl beendet die generierenden Protokolle auf Heroku

heroku logs -t -a <app_name>

Der folgende Befehl zeigt die 1000 Anzahl von Protokollzeilen von Heroku an

heroku logs -n 1000 -a <app_name>

Beachten Sie, dass nur 1500 aktuelle Protokollzeilen verfügbar sind und der Rest von ihnen aus dem Heroku-Dyno gelöscht wird.

Vaibhav Sharma
quelle
1

Ich schlage vor, ein Addon zu verwenden, ich verwende Logentries. Um es zu verwenden, führen Sie es in Ihrer Befehlszeile aus:

heroku addons:create logentries:le_tryit

(Dieser Befehl erstellt das Addon für ein kostenloses Konto, aber Sie können natürlich ein Upgrade durchführen, wenn Sie möchten.)

Mit Logentries können Sie bis zu 5 GB Protokollvolumen pro Monat sparen. Diese Informationen können über die Befehlssuche innerhalb der letzten 7 Tage durchsucht werden und enthalten Echtzeitwarnungen.

Um Ihre Frage zu beantworten, stellen Sie mit diesem Addon sicher, dass Ihre Protokolle nicht mehr verloren gehen, wenn Sie die 1500 Zeilen erreichen, die Heroku standardmäßig speichert. Hoffe das hilft! Ich wünsche ihnen einen wunderbaren Tag!

Jose Paez
quelle
1

heroku logs -t zeigt uns die Live-Protokolle. heroku logs -n 1500für eine bestimmte Anzahl von Protokollen

Trotzdem würde ich empfehlen, ein Paper Trail Add-On zu verwenden, das bestimmte Vorteile hat und einen kostenlosen Basisplan hat.

svikramjeet
quelle
0

Sie können verwenden heroku logs -n 1500

Dies ist jedoch kein empfohlener Ansatz (mit anderen Worten, es wird nicht das tatsächliche Bild angezeigt).

Ich würde vorschlagen, dass Sie ein Protokollierungstool anschließen. (sumoLogic, paper trail n all) als Add-On

Sie haben alle eine kostenlose Version (mit wenigen Einschränkungen, obwohl genug für eine kleine App oder eine Entwickler-Umgebung, die gute Einblicke und Tools zum Analysieren von Protokollen bietet).

Rohit Sureka
quelle
-2

Für Zedernstapel siehe:

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

Sie müssen ausführen:

Heroku Run Bash ...

JBN
quelle
9
On Cedar heroku run bashdreht einen neuen Prüfstand, um den bashBefehl zu hosten . Das Dateisystem auf diesem Prüfstand enthält keine Protokolldateien von den "aktiven" Webprüfständen, sodass dieser Ansatz nicht funktioniert.
Ryan Daigle