Использование драгоценного камня с героем
Я установил драгоценный камень для мониторинга использования памяти моего приложения rails.
Чтобы увидеть отчет oink, мне нужно запустить эту команду в терминале:
oink --threshold=75 /log/*
Когда я запускаю его на своей машине, он показывает отчет для среды разработки.
Дело в том, что меня больше интересует просмотр отчета для моей производственной среды.
Мое приложение размещено на heroku, есть ли способ, которым я мог бы запускать команды терминала oink для рабочей среды heroku?
Спасибо
Ответы
Ответ 1
Я получил oink, работающий над heroku:
Вам нужно изменить свой лог-уровень на информацию для журналов 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
Ответ 2
К сожалению, я не могу комментировать, но если у кого-то еще есть эта проблема, некоторые вещи, похоже, изменились после того, как Gabe Coyne (супер полезно) ответит выше. Мне не нужно было менять свой log_level героя, поэтому, чтобы начать генерировать журналы, вы можете просто использовать инициализатор config/initializers/oink.rb
следующим образом:
YourApp::Application.middleware.use( Oink::Middleware, :logger => Hodel3000CompliantLogger.new(STDOUT))
Или поместите эту строку в production.rb
, если вы хотите, чтобы журналы oink производились. Затем вам нужно получить журналы в файл локального журнала, также упомянутый в предыдущем ответе:
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
С удаленной передней частью. Надеюсь, это поможет!
Ответ 3
Если вы используете архив журнала, загруженный с Papertrail, вы можете использовать этот однострочный шрифт для форматирования вывода:
cat log/production.log | cut -f 10- | grep 'rails\[' > log/production-oink.log
Ответ 4
Чтобы запустить команду oink
, вам нужно настроить утечку для журналов heroku. Например, у меня есть журналы моего героя, стекающие на локальный сервер rsyslog linux.
Ответ 5
Вместо переключения регистратора на 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.
UPDATE:
Другой набор команд vim для исправления журналов Papertrail для oink:
:%s/\v^\d+\t//
:%s/2013-01-27T/Jan 27 /
И перейдите в первую строку, используйте CTRL-V, чтобы отметить несколько оставшихся столбцов, а затем введите G, чтобы выбрать эти столбцы в конце файла. Внесите коррективы в свой выбор с помощью стрелок "слева" / "справа", а затем нажмите "c", чтобы удалить их.
Ответ 6
Получил работу с hiattp-ответом, но нужно было добавить -text в grep
.
cat log/production.log | cut -c 46- | grep 'rails\[' > log/production-oink.log
Ответ 7
Использовать новую реликвию - как было сказано в вашем другом вопросе.