Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 6 Next »

NOTE: This page is Work In Progress. Custom Metrics functionality is not enabled in SPM yet.

Pushing Metrics

Request format

Custom metrics can be sent to receiver via HTTP as POST request.

Request parameters:

NameDescription
host

host name

tokenapplication token

Request body format:

[timestamp]\tcustom\t[metric_name]\t[filter1_value]\t[filter2_value]\t[metric_value]\t[aggregation_type]
....
PlaceholderDescriptionLimitations
timestampNumber of milliseconds passed since Epoch (1 Jan 1970) 
metric_nameName of metricLength > 0 and <= 255
filter1_valueValue of first filterLength > 0 and <= 255
filter2_valueValue of second filterLength > 0 and <= 255
metric_valueValue of metric (Double) 
aggregation_typeType of aggregationavg,min,max,sum

Curl example

TIMESTAMP=$(($(date +%s)*1000))
METRIC=`echo -n "$TIMESTAMP\tcustom\tconsumed_coffee\toffice-1\tkitchen-2\t100.0\tsum"`
TOKEN=xxxxxxxx-759b-46bf-a9d3-xxxxxxxxxxxx
curl -H "Content-Type: text/plain" -X POST -d "$METRIC" "http://apps.sematext.com/spm-receiver/receive?host=`hostname`&token=$TOKEN"

Ruby example

Example using gem "httparty"

require 'httparty'

class MetricSerializer
  def serialize(options)
    "#{options[:timestamp]}\tcustom\t#{options[:name]}\t#{options[:filter1]}\t#{options[:filter2]}\t#{options[:value]}\t#{options[:agg]}"
  end
end
class MetricSender
  include HTTParty
  def initialize(options)
    raise "receiver_url is required" unless options[:receiver_url]
    raise "host is required" unless options[:host]
    raise "token is required" unless options[:token]
    self.class.default_options[:base_uri] = options[:receiver_url]
    @serializer = MetricSerializer.new
    @host = options[:host]
    @token = options[:token]
    @version = "1.9.0"
  end
  def send(options)
    current_time = (Time.now.to_f * 1000).to_i
    merged_options = {
      :timestamp => current_time,
      :agg => 'avg'
    }.merge(options)
    s = @serializer.serialize(merged_options)
    puts s
    post_metric(s)
  end
private
  def post_metric(body)
    post_options = {
      :query => {:host => @host, :token => @token, :v => @version},
      :headers => {'Content-Type' => 'text/plain; charset=utf-8'},
      :body => body
    }
    self.class.post('receive', post_options)
  end
end
RECEIVER_OPTIONS = {
  :receiver_url => "http://appssematext.com/spm-receiver/",
  :host => "katrin",
  :token => "xxxxxxxx-759b-46bf-a9d3-xxxxxxxxxxxx"
}
sender = MetricSender.new(RECEIVER_OPTIONS)
sender.send :name => "coffee_consumed", :filter1 => "office-1", :filter2 => "kitchen-2", :value => 100.0, :agg => "sum"

Comments

Any frequency limitations depend on AF implementation.

TODO  (refer to AF frequency limits)

TODO (add Java example)

 

 

  • No labels