lexmag/statix


Fast and reliable Elixir client for StatsD-compatible servers

https://hexdocs.pm/statix

License: ISC

Language: Elixir

Keywords: elixir, instrumentation, metrics, statsd


Statix

Build Status Hex Version

Statix is an Elixir client for StatsD-compatible servers. It is focused on speed without sacrificing simplicity, completeness, or correctness.

What makes Statix the fastest library around:

  • direct sending to the socket [1]
  • caching of the UDP packets header
  • usage of IO lists

[1] In contrast with process-based clients, Statix has lower memory consumption and higher throughput – Statix v1.0.0 does about 876640 counter increments per flush:

Statix

It is possible to measure it yourself.
for _ <- 1..10_000 do
  Task.start(fn ->
    for _ <- 1..10_000 do
      StatixSample.increment("sample", 1)
    end
  end)
end

Make sure you have StatsD server running to get more realistic results.

Installation

Add Statix as a dependency to your mix.exs file:

def application() do
  [applications: [:statix]]
end

defp deps() do
  [{:statix, ">= 0.0.0"}]
end

Then run mix deps.get in your shell to fetch the dependencies.

Usage

A module that uses Statix becomes a socket connection:

defmodule MyApp.Statix do
  use Statix
end

Before using connection the connect/0 function needs to be invoked. In general, this function is called when your application starts (for example, in its start/2 callback):

def start(_type, _args) do
  :ok = MyApp.Statix.connect()
  # ...
end

Once the Statix connection is open, its increment/1,2, decrement/1,2, gauge/2, set/2, timing/2, and measure/2 functions can be used to push metrics to the StatsD-compatible server.

Sampling

Sampling is supported via the :sample_rate option:

MyApp.Statix.increment("page_view", 1, sample_rate: 0.5)

The UDP packet will only be sent to the server about half of the time, but the resulting value will be adjusted on the server according to the given sample rate.

Tags

Tags are a way of adding dimensions to metrics:

MyApp.Statix.gauge("memory", 1, tags: ["region:east"])

Configuration

Statix can be configured globally with:

config :statix,
  prefix: "sample",
  host: "stats.tld",
  port: 8181

and on a per connection basis as well:

config :statix, MyApp.Statix,
  port: 8811

The defaults are:

  • prefix: nil
  • host: "127.0.0.1"
  • port: 8125

Note: by default, configuration is evaluated once, at compile time. If you plan using other configuration at runtime, you must specify the :runtime_config option:

defmodule MyApp.Statix do
  use Statix, runtime_config: true
end

License

This software is licensed under the ISC license.

Project Statistics

Sourcerank 9
Repository Size 55.7 KB
Stars 204
Forks 50
Watchers 8
Open issues 15
Dependencies 3
Contributors 13
Tags 14
Created
Last updated
Last pushed

Top Contributors See all

Aleksei Magusev Andrea Leopardi Jason Fertel Forest Victor Rodrigues Steve Cohen Oskar Niburski Cody Michael Oliver visciang Matt Low Kian Seong Eduardo Gurgel

Packages Referencing this Repo

statix
Fast and reliable Elixir client for StatsD-compatible servers.
Latest release 1.3.0 - Updated - 204 stars

Recent Tags See all

v1.2.1 July 10, 2019
v1.2.0 July 02, 2019
v1.1.0 October 17, 2017
v1.1.0 October 17, 2017
v1.0.1 October 03, 2017
v1.0.0 November 15, 2016
v0.8.0 September 11, 2016
v0.7.0 January 16, 2016
v0.6.0 December 23, 2015
v0.5.1 November 17, 2015
v0.5.0 November 15, 2015
v0.0.3 May 21, 2015
v0.0.2 May 17, 2015
v0.0.1 May 14, 2015

Interesting Forks See all

discordapp/statix
Fast and reliable Elixir client for StatsD-compatible servers
Elixir - Last pushed - 3 stars

Something wrong with this page? Make a suggestion

Last synced: 2018-01-16 15:01:04 UTC

Login to resync this repository