4

我们在生产环境中使用 newrelic_rpm。

我将日志级别更改为调试。每当代理向服务器发送数据时,它都会显示:

[11/08/11 13:58:09 +0530 mubarocks.local (788)] DEBUG : Sending data to New Relic Service
[11/08/11 13:58:09 +0530 mubarocks.local (788)] DEBUG : Spool file empty.
[11/08/11 13:58:09 +0530 mubarocks.local (788)] DEBUG : Connect to newrelic.com:80/agent_listener/8/.../metric_data?run_id=327878253
[11/08/11 13:58:09 +0530 mubarocks.local (788)] DEBUG : Http Connection opened to 204.93.223.142:80
[11/08/11 13:58:10 +0530 mubarocks.local (788)] DEBUG : Uncompressed content returned
[11/08/11 13:58:10 +0530 mubarocks.local (788)] DEBUG : 2011-11-08 13:58:09 +0530: sent 8 timeslices (327878253) in 0.660168 seconds

它不显示正在发送的实际数据。

如何记录发送到服务器的实际数据?

如何调试数据格式?

4

2 回答 2

4

跟踪调用堆栈,需要查看gem的来源。

 lib/new_relic/agent/agent.rb

数据实际上是由一个Net::HTTP::Post

 def send_request(opts)
   request = Net::HTTP::Post.new(opts[:uri],
     'CONTENT-ENCODING' => opts[:encoding],
     'HOST' => opts[:collector].name)
   request.content_type = "application/octet-stream"
   request.body = opts[:data]

   log.debug "Connect to #{opts[:collector]}#{opts[:uri]}"

   ...

但是,当数据到达这里时,它已经被压缩了。

def invoke_remote(method, *args)
  #determines whether to zip the data or send plain
  post_data, encoding = compress_data(args)

  response = send_request({
    :uri => remote_method_uri(method),
    :encoding => encoding,
    :collector => collector,
    :data => post_data})

  ...

所以compress_data是个看的好地方。

因此,让我们添加一个初始化程序,该初始化程序在发送数据时添加日志语句。

module NewRelic
  module Agent
    class Agent
      def compress_data_with_debug(object)
        Rails.logger.debug("Newrelic Data: #{object.inspect}")

        compress_data_without_debug(object)
      end

      alias_method_chain :compress_data, :debug
    end
  end
end

这应该让你从一个体面的地方开始。

于 2012-01-09T00:24:45.843 回答
0

New Relic 现在支持审计日志,使应用程序传输的所有数据都能以人类可读的格式记录。

于 2017-07-28T22:10:15.283 回答