使用oink gem和heroku

我已经安装了oink gem来监控rails应用程序的内存使用情况。 为了查看oink报告,我需要在终端中运行此命令:

oink --threshold=75 /log/* 

当我在我的机器上运行它时,它会显示开发环境的报告。 问题是我更感兴趣的是看到我的生产环境的报告。 我的应用程序托管在heroku上,有没有办法为heroku的生产环境运行oink的终端命令?

谢谢

我在heroku上工作了oink:

您必须将log_level更改为要显示的oink日志的信息:

 heroku config:add LOG_LEVEL=info 

使用自定义stdout记录器将oink中间件添加到production.rb

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

如果要解析日志,请将它们拖到本地文件中,然后删除heroku的前缀并仅过滤到oink行。

 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下载日志

不幸的是我还不能发表评论但是如果其他人有这个问题,那么自从Gabe Coyne(超级有用的)回答以来,似乎已经发生了一些变化。 我不需要更改我的heroku log_level,因此要开始生成日志,您可以使用初始化程序config/initializers/oink.rb如下所示:

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

或者,如果您只想在生产中使用oink日志,请将该行放在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 

拆下前部。 希望这可以帮助!

如果您使用从Papertrail下载的日志存档,则可以使用此单行格式化输出格式:

 cat log/production.log | cut -f 10- | grep 'rails\[' > log/production-oink.log 

您需要为heroku日志设置一个排水管才能运行oink命令。 例如,我将我的heroku日志排入本地linux rsyslog服务器。

您可以使用vim稍微修改您的heroku日志,而不是将记录器切换到Hodel3000Compliant,例如,使用以下命令:

 :%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缩小日志中可能出现问题的时间。

更新:

另一组用于修复opert的Papertrail日志的vim命令:

 :%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 

使用New Relic – 在您的其他问题中回答。