README.md

# TelemetryMetricsZabbix

Provides a Zabbix format reporter and server for Telemetry.Metrics definitions.

## Installation

The package can be installed by adding `telemetry_metrics_zabbix` to your list of dependencies in `mix.exs`:

```elixir
def deps do
  [
    {:telemetry_metrics_zabbix, "~> 0.1"}
  ]
end
```

## Configuration

Add approperiate config section to your `config.exs`

```elixir
config :telemetry_metrics_zabbix, :config,
  host: "zabbix.trapper.host",
  port: 10051,
  hostname: "monitored.host",
  batch_window_size: 1000,
  timestamping: true
```

## Usage

Add `TelemetryMetricsZabbix` to your application supervision tree and pass metrics as a param.

### Example

```elixir
metrics = [
  Telemetry.Metrics.sum("http.request.latency", tags: [:host])
]

children = [
  {TelemetryMetricsZabbix, metrics: metrics}
]
opts = [strategy: :one_for_one, name: MyApp]
Supervisor.start_link(children, opts)
```

### Currently supported metrics

- `Telemetry.Metrics.Counter`: counts events
- `Telemetry.Metrics.Sum`: sums events' values
- `Telemetry.Metrics.Summary`: calculates events' values average
- `Telemetry.Metrics.LastValue`: returns all events' values with timestamps

### Measuremet to zabbix value conversion

Measurements are aggregated by event name, measurement and tag values. All those parts are included as Zabbix Sender Protocol key. Tag values are treated as Zabbix key parameters sorted by tag key.

#### Example

with metric

```elixir
Telemetry.Metrics.sum("http.request.latency", tags: [:host, :method])
```

and event

```elixir
:telemetry.execute([:http, :request], %{latency: 200}, %{host: "localhost", method: "GET"})
```

Zabbix key will be `http.request.latency["localhost","GET"]`

## Documentation

Docs can be found at [https://hexdocs.pm/telemetry_metrics_zabbix](https://hexdocs.pm/telemetry_metrics_zabbix).

## License

TelemetryMetricsZabbix source code is released under MIT License.
Check LICENSE file for more information.