Использование хрю с герокой - PullRequest
16 голосов
/ 24 января 2012

Я установил oink gem для мониторинга использования памяти моего приложения rails. Для просмотра отчета oink мне нужно запустить в терминале следующую команду:

oink --threshold=75 /log/*

Когда я запускаю его на своем компьютере, он показывает отчет для среды разработки. Дело в том, что мне больше интересно увидеть отчет для моей производственной среды. Мое приложение размещено на heroku, есть ли способ запуска команд терминала oink для рабочей среды heroku?

Спасибо

Ответы [ 7 ]

31 голосов
/ 03 января 2013

У меня есть хрю, работая над герою, выполняя это:

Вы должны изменить свой log_level на информацию для логов oink, чтобы показать:

heroku config:add LOG_LEVEL=info

Добавить промежуточное программное обеспечение oink в production.rbс пользовательским регистратором stdout

config.middleware.use( Oink::Middleware, :logger => Hodel3000CompliantLogger.new(STDOUT))

Если вы хотите проанализировать ваши журналы, привязайте их к локальному файлу, затем удалите префикс heroku и отфильтруйте только строки хрю.

heroku logs --tail > log/production.log
cat log/production.log | cut -c 46- | grep 'Oink\|Memory\|Instantiation' > log/production-oink.log

Затем запустите oink в вашем новом локальном журнале

oink --threshold=0 log/production-oink.log

Вы также можете скачать журналы из logentries или paperclip

16 голосов
/ 20 июля 2013

К сожалению, я пока не могу комментировать, но в случае, если у кого-то еще есть эта проблема, некоторые вещи, по-видимому, изменились после ответа Гейба Койна (очень полезно) выше.Мне не нужно было менять свою heroku log_level, поэтому, чтобы начать генерировать логи, вы можете просто использовать инициализатор config/initializers/oink.rb, например, так:

YourApp::Application.middleware.use( Oink::Middleware, :logger => Hodel3000CompliantLogger.new(STDOUT))

Или поместить эту строку в production.rb, если хотите толькобревно в производстве.Затем вам нужно получить журналы в локальный файл журнала, также упомянутый в предыдущем ответе:

heroku logs n500 --app app_name > log/production.log

Или вы можете получить их из Papertrail или из вашего любимого архиватора журналов.Локальные журналы должны быть обновлены до ожидаемого формата oink, но я обнаружил, что grep 'Oink|Memory|Instantiation' не работает, так как эта строка, кажется, была удалена из журналов, поэтому я использовал это вместо:

cat log/production.log | cut -c 46- | grep 'rails\[' > log/production-oink.log

Тогда вы можете использовать oink --threshold=0 log/production-oink.log, и это будет работать.

Единственное, что меня настигло, это количество предыдущих символов, которые нужно вырезать.В то время как cut -c 39-, похоже, работал раньше, мне пришлось использовать cut -c 46-.Очевидно, что это меняется, поэтому в случае, если это не очевидно, вы просто пытаетесь получить строки в необработанных журналах, которые выглядят так:

2013-07-19T18:47:09.494475+00:00 app[web.1]: Jul 19 18:47:09 24ab5d5s-g46c-2d44-dss2-233sdfa99852wd rails[5]: Oink Action: welcome#about

Чтобы выглядеть так:

Jul 19 18:47:09 24ab5d5s-g46c-2d44-dss2-233sdfa99852wd rails[5]: Oink Action: welcome#about

С удаленной передней частью.Надеюсь, это поможет!

5 голосов
/ 10 сентября 2013

Если вы используете архив журналов, загруженный из Papertrail, вы можете использовать эту однострочную строку для форматирования вывода:

cat log/production.log | cut -f 10- | grep 'rails\[' > log/production-oink.log
2 голосов
/ 26 января 2013

Вместо переключения регистратора на Hodel3000Compliant, вы также можете слегка модифицировать ваши логи heroku с помощью vim, например, используя следующие команды:

:%s/2013-01-25T/Jan 25 /
:%s/+00:00//
:%s/app\[web.1\]/rails\[1\]/
:%s/app\[web.2\]/rails\[2\]/

ваши оригинальные логи heroku, подобные этим:

2013-01-25T15:05:58+00:00 app[web.1]: Oink Action: tools#some_tool
2013-01-25T15:05:58+00:00 app[web.1]: Memory usage: 303444 | PID: 2
2013-01-25T15:05:58+00:00 app[web.1]: Oink Log Entry Complete

становится:

Jan 25 15:05:58 rails[1]: Oink Action: tools#some_tool
Jan 25 15:05:58 rails[1]: Memory usage: 303444 | PID: 2
Jan 25 15:05:58 rails[1]: Oink Log Entry Complete

и Oink любит их;) Конечно, сначала сузьте время, когда возможная проблема возникла в журнале, используя NewRelic.

ОБНОВЛЕНИЕ:

Другой набор команд vim для исправления журналов Papertrail для oink:

:%s/\v^\d+\t//
:%s/2013-01-27T/Jan 27 /

И перейдите к первой строке, используйте CTRL-V, чтобы отметить несколько оставшихся столбцов, затем введите G, чтобы выбратьэти столбцы до конца файла.Внесите изменения в ваш выбор с помощью стрелок «влево» / «вправо», а затем нажмите «c», чтобы удалить их.

2 голосов
/ 25 мая 2012

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

1 голос
/ 13 августа 2013

Понял, что работает с ответом hiattp, но нужно добавить --text к grep.

cat log/production.log | cut -c 46- | grep 'rails\[' > log/production-oink.log
0 голосов
/ 24 января 2012

Используйте New Relic - как ответили на ваш другой вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...