Использование хрю с геройкой
Я установил oink gem для мониторинга использования памяти моего приложения rails. Чтобы увидеть отчет oink, мне нужно запустить эту команду в терминале:
oink --threshold=75 /log/*
Когда я запускаю его на своем компьютере, он показывает отчет для среды разработки. Дело в том, что мне больше интересно увидеть отчет для моей производственной среды. Мое приложение размещено на heroku, есть ли способ запустить команды терминала oink для рабочей среды heroku?
Спасибо
7 ответов
Хрю, работая над герокой, делаю так:
Вы должны изменить свой 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
Вы также можете скачать журналы из журналов или скрепки
К сожалению, я пока не могу комментировать, но в случае, если у кого-то еще есть эта проблема, некоторые вещи, по-видимому, изменились после ответа Гейба Койна (очень полезно) выше. Мне не нужно было менять свою герою 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 или вашего любимого архиватора журналов. Локальные журналы должны быть обновлены до ожидаемого формата, но я обнаружил, что 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
Со снятой передней частью. Надеюсь это поможет!
Если вы используете архив журналов, загруженный из Papertrail, вы можете использовать эту однострочную строку для форматирования выходных данных:
cat log/production.log | cut -f 10- | grep 'rails\[' > log/production-oink.log
Вам нужно настроить сток для ваших логов героку, чтобы запустить oink
команда. Например, мои журналы heroku стекаются на локальный сервер Linux rsyslog.
Вместо того, чтобы переключать регистратор на Hodel3000Compliant, вы также можете слегка изменить свои журналы heroku с помощью vim, например, с помощью следующих команд:
:%s/2013-01-25T/Jan 25 /
:%s/+00:00//
:%s/app\[web.1\]/rails\[1\]/
:%s/app\[web.2\]/rails\[2\]/
твои оригинальные герои логи вот такие:
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", чтобы удалить их.
Получил работу с ответом hiattp, но нужно было добавить --text к grep
,
cat log/production.log | cut -c 46- | grep 'rails\[' > log/production-oink.log