Packages

Modules for help with monitoring Elixir and Phoenix apps.

Current section

Files

Jump to
metairie lib metairie.ex
Raw

lib/metairie.ex

defmodule Metairie do
@moduledoc """
Modules for monitoring Elixir/Phoenix Apps.
Adds monitoring for Phoenix, Ecto, and the Erlang VM
## Configuration
### Phoenix Instrumentation
In your configuration for your endpoint, add `instrumenters: [Metairie.Phoenix.Instrumenter]`:
```elixir
config :my_app, MyAppWeb.Endpoint,
# other configuration
instrumenters: [Metairie.Phoenix.Instrumenter]
```
### Erlang VM Stats
Metaire uses `vmstats` to track Erlang VM stats. Add the following to your configuration
```elixir
config(
:vmstats,
sink: Metairie.VMStats.Sink,
base_key: "my_app.erlang",
key_separator: ".",
interval: 1_000
)
```
### Statix (sending stats to StatsD/DataDog)
```elixir
config :my_app, :statix,
prefix: "my_app",
host: "localhost",
port: 8125
```
### Start
Initializes the gathering of metrics in your application by calling `Metairie.init(:my_app)`
```elixir
defmodule MyApp.Application do
use Application
def start(_type, _args) do
import Supervisor.Spec
Metairie.init(:my_app)
...
end
```
"""
@doc """
Initializes the gathering of metrics in your application
## Examples
In application
```elixir
defmodule MyApp.Application do
use Application
def start(_type, _args) do
import Supervisor.Spec
Metairie.init(:my_app)
...
end
```
"""
def init(otp_app) do
Application.put_env(:metairie, Metairie.StatsCollector, otp_app: otp_app)
statix_config = Application.get_env(otp_app, :statix)
Application.put_env(:statix, Metairie.StatsCollector, statix_config)
:ok = Metairie.StatsCollector.connect()
:telemetry.attach(
"record_ecto_metric",
[otp_app, :repo, :query],
&Metairie.Ecto.Telemetry.record_ecto_metric/4,
nil
)
end
end