Как newrelic_rpm отправляет данные на сервер New Relic? - PullRequest
3 голосов
/ 08 ноября 2011

Мы используем 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

Фактические данные не отображаются.

Как я могу записать фактические данные, которые отправляются на сервер?

Как мне отладить формат данных?

Ответы [ 2 ]

4 голосов
/ 09 января 2012

Трассируя стек вызовов, вам нужно посмотреть на источник драгоценного камня.

 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

И это поможет вам начать с чего-то приличного.

0 голосов
/ 29 июля 2017

New Relic теперь поддерживает журнал аудита , что позволяет регистрировать все данные, передаваемые приложением, в удобочитаемом формате.

...