геройку - как посмотреть все логи

468

У меня есть небольшое приложение на героку. Всякий раз, когда я хочу увидеть логи, я иду в командную строку и делаю

heroku logs

Это показывает только около 100 строк. Нет ли способа посмотреть полные логи нашего приложения на героку?

мистифицировать
источник

Ответы:

785

Обновление (спасибо dawmail333):

heroku logs -n 1500

или, чтобы вести журналы в прямом эфире

heroku logs -t 

Heroku журнал документации

Если вам нужно больше , чем несколько тысяч строк вы можете использовать Heroku в Syslog Водостоки

Альтернативно (старый метод):

$ heroku run rails c
File.open('log/production.log', 'r').each_line { |line| puts line }
glebm
источник
5
Это теперь не работает на стеке кедра. Кто-нибудь нашел новую альтернативу?
Натанвда
2
Просто используйте heroku logs -n 1500, это лучший метод, доступный на Cedar. Если вам нужно больше строк, вам понадобится утечка системного журнала
Лиам Доусон,
Это полезный совет и для проблем с конвейером активов: heroku logs -n 2000 | grep 'precompiled'
Дейв Коллинз,
Это на самом деле heroku run rails c. Обновлено!
Глебм
3
Для старого метода, почему бы вам запустить консоль rails вместо just heroku run cat log/production.log?
Хлоя
139

Лагерь значительно улучшился в героку!

$ heroku logs -n 500

Лучше!

$ heroku logs --tail

ссылки: http://devcenter.heroku.com/articles/logging

ОБНОВЛЕНО

Это уже не надстройки, а часть функциональности по умолчанию :)

Нессур
источник
4
Кроме того, -n может доходить до 1500, я предполагаю, что Heroku просто отключит что-нибудь после этого.
Лиам Доусон
52

Heroku рассматривает журналы как упорядоченные по времени потоки событий. Доступ к *.logфайлам в файловой системе не рекомендуется в такой среде по разным причинам.

Во-первых, если в вашем приложении более одного dyno, то каждый файл журнала представляет только частичное представление событий вашего приложения. Вы должны вручную объединить все файлы, чтобы получить полное представление.

Во-вторых, файловая система в Heroku является эфемерной, то есть всякий раз, когда ваш dyno перезапускается или перемещается (что происходит примерно раз в день ), файлы журнала теряются. Таким образом, вы получаете только дневной обзор журналов этого динамо.

Наконец, в стеке Cedar работает heroku consoleили даже heroku run bashне соединяет вас с в настоящее время работает dyno. Он порождает новый специально для bashкоманды. Это называется одноразовым процессом . Таким образом, вы не найдете файлы журналов для других ваших dyno, на которых запущены реальные http-процессы на том, для которого они созданы heroku run.

Ведение журнала и обзор в целом является первоклассным гражданином в Heroku, и существует несколько инструментов для решения этих проблем. Во-первых, чтобы увидеть поток событий приложения в реальном времени через все dyno и все уровни приложения / стека, используйте heroku logs -tкоманду для привязки вывода к вашему терминалу.

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

Это отлично подходит для наблюдения за поведением вашего приложения прямо сейчас. Если вы хотите хранить журналы в течение более длительных периодов времени, вы можете использовать одну из многих надстроек для ведения журналов, которые обеспечивают сохранение журналов, оповещения и триггеры.

Наконец, если вы хотите сохранить файлы журналов самостоятельно, вы можете настроить свой собственный приемник системного журнала для получения потока событий от Heroku и последующей обработки / анализа самостоятельно.

Сводка: не используйте heroku consoleили heroku run bashдля просмотра файлов статического журнала. Отправьте поток событий журнала Heroku для вашего приложения с heroku logsпомощью надстройки для регистрации.

Райан Дейгл
источник
23

Также смотрите отдельные потоки / фильтры.

Например, хвост только журналы вашего приложения

heroku logs --source app -t

Или посмотреть только логи роутера

heroku logs --ps router

Или связать их вместе

heroku logs --source app --ps worker

Так хорошо..

Шон Вейдер
источник
5
Чтобы увидеть только логи моего приложения, я делаю: heroku logs --ps web.1(с 1 dyno)
Maxence
22

Ну, приведенные выше ответы очень полезны, это поможет вам просматривать из командной строки. Принимая во внимание, что если вы хотите сделать это из своего графического интерфейса, вы должны войти в свою учетную запись heroku, а затем выбрать приложение и, наконец, нажать на просмотр журналов.

просмотр изображения

Аникет Шивам Тивари
источник
1
Этот метод показывает только вывод журнала по мере его появления, начиная с того момента, когда вы нажимаете кнопку «Просмотр журналов». Так что это бесполезно, если вы просто не хотите, по сути, привязывать логи, не заходя в консоль.
Джереми Гантер
2
нет ли какой-либо опции, чтобы увидеть все журналы с самого этого интерфейса?
Сунил
16

Следуйте в журнале Heroku

Для просмотра ваших логов у нас есть:

  1. Команда logs по умолчанию возвращает 100 строк журнала.

heroku logs

  1. показать максимум 1500 строк, --num(или -n) вариант.

heroku logs -n 200

  1. Показывать логи в реальном времени

heroku logs --tail

  1. Если у вас много приложений на героку

heroku logs --app your_app_name

Мин Нгуен
источник
9

heroku logs -t показывает нам живые журналы.

ndrx42
источник
Но это прекратится через некоторое время.
Neeraj Sewani
8

Вы можете получить доступ к своим файлам журнала, используя интерфейс командной строки Heroku ( использование CLI ).

Если CLI Heroku установлен и вы знаете имя своего приложения (например https://myapp.herokuapp.com/), то вы можете выполнить следующую команду:

heroku logs --tail --app=myapp

Вы также можете получить доступ к журналам в режиме реального времени, используя:

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

Если логи говорят вам что-то вроде этого:

нпм ERR! Полный журнал этого прогона можно найти в:

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

Затем вы также можете получить к ним доступ через терминал bash через Heroku CLI:

heroku run bash --app=myapp
less ./.npm/_logs/2017-07-11T08_29_45_291Z-debug.log
Бенни Нойгебауэр
источник
Я получаю/usr/bin/less: cannot execute binary files
Майкл Фултон
7

Может быть, стоит добавить что-то вроде бесплатного плана Papertrail в ваше приложение. Нулевая конфигурация, и вы получаете данные за 7 дней до 10 МБ / день, и можете искать через 2 дня журналов.

Клем
источник
4

для файлов WAR:

Я не использовал github, вместо этого я загрузил напрямую файл WAR (который, как мне показалось, намного проще и быстрее).

Так что мне помогло следующее:

heroku logs --app appname

Надеюсь, это кому-нибудь поможет.

Ула
источник
4

Вам нужно использовать -tили --tailопцию, и вам нужно определить имя вашего приложения heroku.

heroku logs -t --app app_name
Питер Кота
источник
4

Мое решение - получить полный журнал при первом запуске приложения, например:

heroku logs -n 1500 > log

затем добавьте, fgrep -vfчтобы поддерживать его в актуальном состоянии, например:

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

для непрерывного ведения журнала просто повторяйте его, используя часы каждые x минут (или секунд).

кпск кпск
источник
2

Чтобы увидеть подробный журнал, вам нужно поместить в production.rbфайл две строки :

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

а затем запустив

heroku logs -t

Вы можете увидеть подробные журналы.

Sumit
источник
2

Я предпочитаю делать это так

heroku logs --tail | tee -a herokuLogs

Вы можете оставить скрипт запущенным в фоновом режиме и просто отфильтровывать логи из текстового файла так, как вам хочется в любое время.

Ашиш Пахва
источник
спасибо, я потратил некоторое время на прокрутку, но наконец нашел решение для меня.
Майнкрафт
2

Вам нужно внедрить некоторые операции очистки журналов, и там должны быть очищены ваши журналы, чтобы увидеть все журналы (также управлять историческими журналами):

  1. Первый вариант - Splunk может быть использован: вы можете слить все ваши журналы, как:
heroku drains:add syslog+tls://splunk-server.com:514 -a app_name

А затем войдите в свой сервер Spunk и найдите любое количество журналов. Я использую Splunk, и это прекрасно работает для меня.

  1. Второй вариант - вы можете приобрести надстройку для своего приложения, как указано ниже: (я не использовал эти опции, но они доступны).

    • Timber.io
    • Сумо Логик
    • LogEnteries
    • Лог ДНК
    • Papertrail

Вы также можете взглянуть на следующие варианты: если вы хотите, чтобы ваши журналы были в формате JSON, так как это поможет, если вы загружаете свои журналы во внешнюю систему, такую ​​как Splunk / ELK, поиск станет проще (также с точки зрения производительности) для поиска в формате JSON.

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

У него нет Readme.md, но некоторые объяснения даются по адресу https://github.com/goodeggs/bites/issues/20.

наконец

И вы всегда можете использовать команду ниже, как уже упоминалось другими пользователями:

Следующая команда завяжет генерирующие логи на героку

heroku logs -t -a <app_name>

Следующая команда покажет 1000 строк в логах от heroku

heroku logs -n 1000 -a <app_name>

Обратите внимание, что доступно только 1500 последних строк журналов, а остальные из них удаляются из heroku dyno.

Вайбхав Шарма
источник
1

Я предлагаю использовать аддон, я использую Logentries. Чтобы использовать его, запустите в командной строке:

heroku addons:create logentries:le_tryit

(эта команда создает аддон для бесплатной учетной записи, но вы можете обновить ее, если хотите)

Logentries позволяет сохранить до 5 ГБ объема журнала в месяц. Эта информация доступна для поиска по команде поиска в течение последних 7 дней, и она имеет оповещения в режиме реального времени.

Поэтому, чтобы ответить на ваш вопрос, используя это дополнение, вы гарантируете, что ваши журналы больше не будут потеряны, когда вы достигнете 1500 строк, которые Heroku сохраняет по умолчанию. Надеюсь это поможет! Хорошего дня!

Хосе Паес
источник
1

heroku logs -t показывает нам живые журналы. heroku logs -n 1500для определенного количества бревен

Но все же я бы порекомендовал использовать надстройку бумажного следа, которая имеет определенные преимущества и имеет бесплатный базовый план.

svikramjeet
источник
0

Ты можешь использовать heroku logs -n 1500

Но это не рекомендуемый подход (другими словами, не показывает реальную картину)

Я хотел бы предложить вам подключить некоторые средства ведения журнала. (sumoLogic, бумага все) в качестве дополнения

Все они имеют бесплатную версию (с небольшими ограничениями, хотя этого достаточно для небольшого приложения или dev env, что обеспечит хорошее понимание и инструмент для анализа журналов)

Рохит Сурека
источник
-2

Для стека кедра см .:

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

вам нужно запустить:

геройку беги баш ...

JBN
источник
9
На Кедре heroku run bashраскручивается новый динамо для размещения bashкоманды. Файловая система в этом dyno не будет содержать никаких файлов журналов от «активных» веб-dyno, поэтому этот подход не будет работать.
Райан Дейгл