Giter VIP home page Giter VIP logo

statix's Introduction

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,
  telegraf: true

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
  • telegraf: false (Use Telegraf's StatsD line protocol, which is slightly different than the rest)

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.

statix's People

Contributors

lexmag avatar whatyouhide avatar fertel avatar vladislao avatar cjpoll avatar edgurgel avatar forest avatar lowks avatar scohen avatar rodrigues avatar visciang avatar

Watchers

James Cloos avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.