Использование драгоценного камня с героем - программирование
Подтвердить что ты не робот

Использование драгоценного камня с героем

Я установил драгоценный камень для мониторинга использования памяти моего приложения rails. Чтобы увидеть отчет oink, мне нужно запустить эту команду в терминале:

oink --threshold=75 /log/*

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

Спасибо

4b9b3361

Ответ 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

Использовать новую реликвию - как было сказано в вашем другом вопросе.