Home

Awesome

Metrics API for erldns

This app provides an HTTP API for gathering and querying metrics from an erldns server and presenting those metrics as JSON.

[!NOTE] erldns_metrics is architected to run in the same Erlang VM as erldns, as it reads metrics from the runtime. This is why erldns is a dependency of this library, and gets started in erldns_metrics.app.src: it's useful for local development, so that starting erldns_metrics also starts erldns. In general, you might want to run erldns_metrics and erldns both as dependencies of an application that you control and deploy.

Here's an example script that shows how to get the output with curl and pass it through Python to format it in a pretty fashion. It assumes you have this API running on port 8082.

curl -s http://localhost:8082/ -H "Accept: application/json" | python -mjson.tool

[!IMPORTANT] Timing stats are given in microseconds.

Configuration

To run this application and configure erldns, add something like the following to your Erlang configuration section:

[
  {erldns, [
      {metrics, [
        {port, 8082}
      ]},
    ]}
].

Building

To build:

make

To start fresh:

make fresh

Running

You'll need erldns running. erldns_metrics starts it on startup, so you just need to run this in the erldns_metrics repository:

rebar3 shell

If you need to configure erldns (such as to use a different port), you can store configuration such as the one below in a file such as erldns_metrics.config:

[
    {erldns, [
        {servers, [
            [
                {name, inet_localhost_1},
                {address, "127.0.0.1"},
                {port, 8053},
                {family, inet},
                {processes, 2}
            ],
            [{name, inet6_localhost_1}, {address, "::1"}, {port, 8053}, {family, inet6}]
        ]}
    ]}
].

Then, you can run erldns_metrics as:

rebar3 shell --config erldns_metrics.config

Testing

make test

Formatting

If your editor doesn't automatically format Erlang code using erlfmt, run:

make format