heroku - comment voir tous les journaux


468

J'ai une petite application sur heroku. Chaque fois que je veux voir les journaux, je vais sur la ligne de commande et je fais

heroku logs

Cela ne me montre qu'une centaine de lignes. N'y a-t-il pas un moyen de voir les journaux complets de notre application sur heroku?

Réponses:


785

Mise à jour (merci à dawmail333):

heroku logs -n 1500

ou, pour suivre les journaux en direct

heroku logs -t 

Documentation du journal Heroku

Si vous avez besoin de plus de quelques milliers de lignes, vous pouvez utiliser les drains Syslog d'Heroku

Alternativement (ancienne méthode):

$ heroku run rails c
File.open('log/production.log', 'r').each_line { |line| puts line }

5
Cela ne fonctionne plus sur la pile de cèdre. Quelqu'un a-t-il trouvé une nouvelle alternative?
nathanvda

2
Il suffit d'utiliser heroku logs -n 1500, c'est la meilleure méthode disponible sur Cedar. Si vous avez besoin de plus de lignes que cela, vous avez besoin d'un drain syslog: devcenter.heroku.com/articles/logging#syslog_drains
Liam Dawson

Ceci est également une astuce utile pour les problèmes de pipeline de ressources: Heroku logs -n 2000 | grep 'précompilé'
Dave Collins

C'est en fait heroku run rails c. Mise à jour!
glebm

3
Pour l'ancienne méthode, pourquoi exécuter une console de rails au lieu de simplement heroku run cat log/production.log?
Chloé

139

La journalisation s'est considérablement améliorée dans Heroku!

$ heroku logs -n 500

Meilleur!

$ heroku logs --tail

références: http://devcenter.heroku.com/articles/logging

MISE À JOUR

Ce ne sont plus des modules complémentaires, mais une partie de la fonctionnalité par défaut :)


4
De plus, -n peut aller jusqu'à 1500, je suppose que Heroku coupe tout ce qui suit.
Liam Dawson

52

Heroku traite les journaux comme des flux d'événements ordonnés dans le temps. Accéder*.log fichiers sur le système de fichiers n'est pas recommandé dans un tel environnement pour diverses raisons.

Tout d'abord, si votre application possède plusieurs dyno, chaque fichier journal ne représente qu'une vue partielle des événements de votre application. Vous devez agréger manuellement tous les fichiers pour obtenir la vue complète.

Deuxièmement, le système de fichiers sur Heroku est éphémère, ce qui signifie chaque fois que votre dyno est redémarré ou déplacé (ce qui se produit environ une fois par jour ), les fichiers journaux sont perdus. Ainsi, vous obtenez au maximum une vue d'une journée dans les journaux de ce seul dyno.

Enfin, sur la pile Cedar en cours d'exécution heroku consoleou même heroku run bashne vous connecte pas à un dyno en cours d'exécution. Il en génère un nouveau spécifiquement pour la bashcommande. C'est ce qu'on appelle un processus ponctuel . En tant que tel, vous ne trouverez pas les fichiers journaux de vos autres dynos qui exécutent les processus http réels sur celui généré heroku run.

La journalisation , et la visibilité en général, est un citoyen de première classe sur Heroku et il existe plusieurs outils pour résoudre ces problèmes. Tout d'abord, pour voir un flux d'événements d'application en temps réel sur tous les dynos et toutes les couches de l'application / pile, utilisez la heroku logs -tcommande pour suivre la sortie vers votre terminal.

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

Cela fonctionne très bien pour observer le comportement de votre application en ce moment. Si vous souhaitez stocker les journaux pendant des périodes plus longues, vous pouvez utiliser l'un des nombreux modules complémentaires de journalisation qui fournissent la conservation des journaux, les alertes et les déclencheurs.

Enfin, si vous souhaitez stocker les fichiers journaux vous-même, vous pouvez configurer votre propre drain Syslog pour recevoir le flux d'événements de Heroku et post-traiter / analyser vous-même.

Résumé: n'utilisez pas heroku consoleou heroku run bashpour afficher les fichiers journaux statiques. Connectez-vous au flux d'événements de journal de Heroku pour votre application à l'aide d' heroku logsun module complémentaire de journalisation.


23

Voir également les flux / filtres individuels.

Par exemple, ne conservez que vos journaux d'application

heroku logs --source app -t

Ou voir uniquement les journaux du routeur

heroku logs --ps router

Ou enchaînez-les ensemble

heroku logs --source app --ps worker

Tellement bon..


5
Pour ne voir que les logs de mon application je fais: heroku logs --ps web.1(avec 1 dyno)
Maxence

22

Eh bien, les réponses ci-dessus sont très utiles, elles vous aideront à visualiser à partir de la ligne de commande. Alors que si vous voulez faire à partir de votre interface graphique, vous devez vous connecter à votre compte heroku, puis sélectionner votre application et enfin cliquer sur afficher les journaux

vue de l'image


1
Cette méthode ne vous montre que la sortie du journal au fur et à mesure qu'elle se produit, à partir du moment où vous cliquez sur l'option "Afficher les journaux". Il n'est donc pas utile à moins que vous ne vouliez essentiellement suivre les journaux sans entrer dans la console.
Jeremy Gunter

2
n'y a-t-il pas d'option pour voir tous les journaux de cette interface utilisateur elle-même?
Sunil Garg, le

16

Suivez la journalisation Heroku

Pour consulter vos journaux, nous avons:

  1. La commande logs récupère 100 lignes de journal par défaut.

heroku logs

  1. afficher au maximum 1500 lignes, --num(ou -n) option.

heroku logs -n 200

  1. Afficher les journaux en temps réel

heroku logs --tail

  1. Si vous avez de nombreuses applications sur Heroku

heroku logs --app your_app_name



8

Vous pouvez accéder à vos fichiers journaux à l'aide de l'interface de ligne de commande de Heroku ( utilisation CLI ).

Si l'interface CLI de Heroku est installée et que vous connaissez le nom de votre application (comme https://myapp.herokuapp.com/), vous pouvez exécuter la commande suivante:

heroku logs --tail --app=myapp

Vous pouvez également accéder aux journaux dans un flux en temps réel en utilisant:

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

Si les journaux vous indiquent quelque chose comme ceci:

npm ERR! Un journal complet de cette course peut être trouvé dans:

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

Ensuite, vous pouvez également y accéder en utilisant le terminal bash via Heroku CLI:

heroku run bash --app=myapp
less ./.npm/_logs/2017-07-11T08_29_45_291Z-debug.log

Je reçois/usr/bin/less: cannot execute binary files
Michael Fulton

7

Cela pourrait valoir la peine d'ajouter quelque chose comme le plan Papertrail gratuit à votre application. Aucune configuration, et vous obtenez 7 jours de données de journalisation jusqu'à 10 Mo / jour, et pouvez rechercher dans 2 jours de journaux.


4

pour les fichiers WAR:

Je n'ai pas utilisé github, mais j'ai téléchargé directement un fichier WAR (que j'ai trouvé beaucoup plus facile et plus rapide).

Donc, ce qui suit m'a aidé:

heroku logs --app appname

J'espère que cela aidera quelqu'un.


4

Vous devez utiliser l' option -tou --tailet vous devez définir le nom de votre application heroku.

heroku logs -t --app app_name

4

Ma solution consiste à obtenir un journal complet au premier démarrage de l'application, comme:

heroku logs -n 1500 > log

puis ajoutez fgrep -vfpour le garder à jour, comme:

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

pour une journalisation continue, il suffit de l'itérer en utilisant watch pour toutes les x minutes (ou secondes).


2

Pour voir le journal détaillé, vous devez mettre deux lignes dans le production.rbfichier:

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

puis en exécutant

heroku logs -t

vous pouvez voir les journaux détaillés.


2

Je préfère le faire de cette façon

heroku logs --tail | tee -a herokuLogs

Vous pouvez laisser le script s'exécuter en arrière-plan et vous pouvez simplement filtrer les journaux du fichier texte comme vous le souhaitez à tout moment.


merci, il m'a fallu un certain temps pour faire défiler mais finalement trouvé la solution pour moi.
Meinkraft

2

Vous devez avoir un vidage de certains journaux implémenté et vous devez y vider vos journaux, pour voir tous les journaux (gérer également les journaux historiques):

  1. Première option - Splunk peut être utilisé: vous pouvez vider tous vos journaux comme:
heroku drains:add syslog+tls://splunk-server.com:514 -a app_name

Connectez-vous ensuite à votre serveur Splunk et recherchez un nombre illimité de journaux. J'utilise Splunk et cela fonctionne parfaitement bien pour moi.

  1. Deuxième option - Vous pouvez acheter un module complémentaire à votre application, comme indiqué ci-dessous: (Je n'ai pas utilisé ces options, mais ce sont celles disponibles).

    • Timber.io
    • Sumo Logic
    • LogEnteries
    • Log ADN
    • Piste de papier

Vous pouvez également consulter les options ci-dessous: Si vous souhaitez avoir vos journaux au format JSON, car cela vous aidera si vous transférez vos journaux vers un système externe comme Splunk / ELK, il deviendrait facile (en termes de performances également) de rechercher en JSON.

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

Il n'a pas Readme.md, mais une explication est donnée à https://github.com/goodeggs/bites/issues/20

enfin

Et vous pouvez toujours utiliser la commande ci-dessous comme mentionné par d'autres utilisateurs déjà:

La commande suivante réduira les journaux générés sur heroku

heroku logs -t -a <app_name>

La commande suivante montrera le nombre de 1000 lignes de journaux de heroku

heroku logs -n 1000 -a <app_name>

Notez que seulement 1500 dernières lignes de journaux sont disponibles et le reste d'entre eux est supprimé de Heroku Dyno.


1

Je suggère d'utiliser un addon, j'utilise Logentries. Pour l'utiliser, exécutez dans votre ligne de commande:

heroku addons:create logentries:le_tryit

(cette commande crée l'addon pour un compte gratuit mais vous pouvez clairement mettre à niveau si vous le souhaitez)

Logentries vous permet d'économiser jusqu'à 5 Go de volume de journal par mois. Cette information est consultable par leur recherche de commandes au cours des 7 derniers jours et elle dispose d'alertes en temps réel.

Donc, pour répondre à votre question, en utilisant cet addon, vous vous assurez que vos journaux ne sont plus perdus lorsque vous atteignez les 1500 lignes que Heroku enregistre par défaut. J'espère que cela t'aides! Passez une bonne journée!


1

heroku logs -t nous montre les journaux en direct. heroku logs -n 1500pour un nombre spécifique de journaux

Mais je recommanderais tout de même d'utiliser l'add-on Paper Trail qui présente certains avantages et propose un plan de base gratuit.


0

Vous pouvez utiliser heroku logs -n 1500

Mais ce n'est pas une approche recommandée (en d'autres termes ne vous montre pas la vraie image)

Je vous suggère de brancher un outil de journalisation. (sumoLogic, paper trail n all) comme module complémentaire

Ils ont tous une version gratuite (avec quelques limitations, bien que suffisante pour une petite application ou un env dev, qui fournira de bonnes informations et un outil pour analyser les journaux)


-2

Pour la pile de cèdre, voir:

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

vous devez exécuter:

heroku run bash ...


9
Sur Cedar heroku run bashtourne un nouveau dynamo pour héberger la bashcommande. Le système de fichiers de ce banc d'essai ne contiendra aucun fichier journal des bancs d'essai Web «actifs», de sorte que cette approche ne fonctionnera pas.
Ryan Daigle
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.