【问题标题】:Using oink gem with heroku将 oink gem 与 heroku 一起使用
【发布时间】:2012-01-24 11:35:31
【问题描述】:

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

oink --threshold=75 /log/*

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

谢谢

【问题讨论】:

  • 你发现了吗?也卡住了..
  • 还值得注意的是,对于多个测功机,没有保证的日志顺序,这似乎搞砸了 oink 解析器。在 2 个 dyno heroku 应用程序 oink 的约 100 个请求中,仅解析 7 个请求。

标签: ruby-on-rails memory heroku


【解决方案1】:

我在 heroku 上工作:

您必须将 log_level 更改为 info 才能显示 oink 日志:

heroku config:add LOG_LEVEL=info

使用自定义标准输出记录器将 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 或回形针下载日志

【讨论】:

  • 似乎缺少像“Oink\|Instantiation\|Memory”这样的管道字符转义。但是,仍然没有为我处理 oink 内容,不确定是否剪切了正确的内容。
  • 需要:cat filename.log |切-c 46- | grep 'Oink\|内存\|实例化'
【解决方案2】:

不幸的是,我还不能发表评论,但万一其他人有这个问题,自从上面 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

去掉前面的部分。希望这会有所帮助!

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 这是真的,但是即使您导出日志,我也没有找到一种方法让它们采用有效的“hodel 3000 兼容记录器”格式。这是 Oink 工作的要求。有什么想法吗?
      【解决方案5】:

      除了将记录器切换到 Hodel3000Compliant 之外,您还可以使用 vim 稍微修改您的 heroku 日志,例如,使用以下命令:

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

      更新:

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

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

          使用 New Relic - 正如您在其他问题中所回答的那样。

          【讨论】:

          • 这没有回答问题。请考虑使用 cmets 来获得此类答案。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-17
          • 2012-01-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多