How to send metrics using Ruby

Installing the Ruby Gem

A Hosted Graphite Ruby Gem is available on github, and can be installed directly by typing:

gem install hosted_graphite

Using the Gem to send via TCP

HostedGraphite.protocol = HostedGraphite::TCP
HostedGraphite.send_metric('foo.rb-tcp', 1.2)

Using the Gem to send via UDP

HostedGraphite.protocol = HostedGraphite::UDP
HostedGraphite.send_metric('foo.rb-udp', 1.2)

Using the Gem to send via HTTP

HostedGraphite.protocol = HostedGraphite::HTTP
HostedGraphite.send_metric('foo.rb-http', 1.2)

Using the Gem to send via StatsD

require 'hosted_graphite'
require 'statsd-ruby'

HostedGraphite.api_key = '<your-api-key>'
HostedGraphite.protocol = :statsd
HostedGraphite.<gauge-count-or-timing>('foo.rb-statsd', 1.2)

Basic Ruby

Here are some ways to send custom metric via TCP, UDP, HTTP, and StatsD directly from your code.

Sending a metric via TCP

require 'socket'

conn = '', 2003
conn.puts " 1.2\n"

Sending a metric via UDP

require 'socket'

sock =
sock.send " 1.2\n", 0, "", 2003

Sending a metric via HTTP POST

require 'net/http'

uri = URI("")
api_key = "YOUR-API-KEY"

req =
req.basic_auth api_key, nil
req.body = "foo 1.2"

res = Net::HTTP.start(, uri.port) do |http|

Sending a metric via StatsD

require 'socket'

statsd_host = ''
statsd_port = 8125
metric_key = ''
metric_value = 1.2

metric_message = "#{metric_key}:#{metric_value}|<c/g/ms>"

sock =
sock.send(metric_message, 0, statsd_host, statsd_port)

NOTE: when sending standard ruby StatsD metrics, be sure to define counters (c), gauges (g), or timers (ms).

Your API key can be found on your account home page.

Last updated