使用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 – 在您的其他问题中回答。
- 当ID存在时,获取“表的未知主键”
- DB上的错误:迁移“未初始化的常量DeviseCreateUsers”
- Rails / Postgres:“必须出现在GROUP BY子句中或用于聚合函数”
- Rails 5 Heroku部署错误:ExecJS :: ProgramError:SyntaxError:意外的令牌:name(autoRegisterNamespace)
- Heroku在git push上部署“预编译资产失败”
- Heroku上的Rails 4应用程序是500,但日志中没有错误消息
- 在Rails 3中为delayed_job自动扩展工作者
- Rails Gemfile:在开发中使用一行,在生产中使用另一行
- 在Heroku上运行连续运行的工作进程