Skip to content

itskoko/plug_statsd

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

62 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PlugStatsd

Description

A plug for automatically sending timing and count metrics to statsd.

This plug can currently can use any of these statsd backends:

If you have additional statsd clients you'd like added, please open an issue and let me know.

Usage

Add the plug and your chosen statsd backend as a dependencies for your application.

defp deps do [ {:plug_statsd, "~> 0.3"}, {:ex_statsd, "~> 0.5"}, ] end

You should also update your applications list to include the statsd plug and the backend:

def application do [applications: [:plug_statsd, :ex_statsd]] end

Add the plug to your endpoints, here's an example from a Phoenix chat application (lib/chat/endpoint.ex)

defmodule Chat.Endpoint do ... plug Plug.Logger #send connection request timing and counts to statsd plug Plug.Statsd ... end

Configure your statsd backend (ex_statsd or statderl) using Mix.Config as usual (probably in your config/):

use Mix.Config config :ex_statsd, host: "your.statsd.host.com", # This is optional and will default to 127.0.0.1 port: 1234, # This is optional and will default to 8125 namespace: "your-app" # This is optional and will default to nil config :plug_statsd, metrics: [ # custom_text.4xx.more_custom_text {:timer, ["custom_text", :generalized_http_status, "more_custom_text"]}, # request.GET.api-v1-users-jeff=weiss {:counter, ["request", &Plug.Statsd.http_method/2, :uri], sample_rate: 0.1}, # or this is equivalent as request.GET.api-v1-users-jeff=weiss {:counter, ["request", {Plug.Statsd, :http_method}, :uri], sample_rate: 0.1}, ], slash_replacement: "-", # defaults to "." dot_replacement: "=" # defaults to "_"

You can also add custom dynamic segments to your metric name by creating a 2-arity function that takes a Plug.Conn and a Keyword list.

Seeing it in action

If you don't immediately have a statsd server available, you can run socat in a terminal.

$ socat UDP-RECV:8125 STDOUT

Depending on your sample rates, you should see a series of output that looks something like

custom_text.2xx.more_custom_text:27|ms request.GET.[root]:1|c custom_text.2xx.more_custom_text:18|ms request.GET.[root]:1|c custom_text.2xx.more_custom_text:32|ms request.GET.[root]:1|c custom_text.4xx.more_custom_text:1|ms request.GET.api-v1-users-jeff=weiss:1|c custom_text.4xx.more_custom_text:0|ms request.GET.api-v1-users-jeff=weiss:1|c 

About

Send connection response time and count to statsd

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Elixir 100.0%