Pushing Metrics
Request format
Custom metrics can be sent to receiver via HTTP as POST request.
Request parameters:
Name | Description |
---|---|
host | host name |
token | application token |
Request body format:
[timestamp]\tcustom\t[metric_name]\t[filter1_value]\t[filter2_value]\t[metric_value]\t[aggregation_type] ....
Placeholder | Description | Limitations |
---|---|---|
timestamp | Number of milliseconds passed since Epoch (1 Jan 1970) | |
metric_name | Name of metric | Length > 0 and <= 255 |
filter1_value | Value of first filter | Length > 0 and <= 255 |
filter2_value | Value of second filter | Length > 0 and <= 255 |
metric_value | Value of metric (Double) | |
aggregation_type | Type of aggregation | Allowed values are: avg,min,max,sum |
Curl example
TIMESTAMP=$(($(date +%s)*1000)) METRIC=`echo -n "$TIMESTAMP\tcustom\tconsumed_coffee\toffice-1\tkitchen-2\t100.0\tsum"` TOKEN=488858e2-759b-46bf-a9d3-f6069b579be3 curl -H "Content-Type: text/plain" -X POST -d "$METRIC" "http://apps-local.sematext.com:8082/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://apps-local.sematext.com:8082/spm-receiver/", :host => "katrin", :token => "488858e2-759b-46bf-a9d3-f6069b579be3" } 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 depends on AF implementation.
TODO Former user (Deleted) (reffer to AF frequency limits).