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 に答える