PrometheusでElixir Plugを監視する(Grafara設定付き)
最近、Prometheusを触り始めました。
なので何か監視したいと思い、サンプルとしてElixirのPlugの設定をし、Erlang VMの監視をしたいと思います。
今回使ったライブラリのリポジトリは下記になるので、設定とか参考にしてみてください。
また、監視として見れるものは以下に記載されていますので、確認してみてください。
目次
- 環境情報
- Plugの設定
- Prometheusの設定
- Grafanaで可視化
- 終わりに
1. 環境情報
- Elixir: 1.9.1
- Plug: 2.0
- prometheus_plugs: 1.1.1
- Prometheus: 2.15.1
- Grafana: 6.5.2
2. Plugの設定
まずはPlugの設定をしていきます。 とりあえず、ルーティングの設定をしたものになります。
また、今回はPlugについての説明は省いていくのでご了承くださいな。
defmodule SampleWeb.Router do use Plug.Router plug SampleWeb.MetricsExporter plug :match plug :dispatch get "/" do send_resp(conn, 200, "Welcome") end match _ do send_resp(conn, 404, "Oops!") end end
Plugが起動できて、HTTPリクエストが受けられるか確認するため /
にアクセスが来たら Welcome
を返すだけのものを作成しました。
ここでは plug SampleWeb.MetricsExporter
を追加しました。
これは /metrics
にアクセスが来たらメトリクスを返すような設定になります。
では、 SampleWeb.MetricsExporter
の中を見てみましょう。
defmodule SampleWeb.MetricsExporter do use Prometheus.PlugExporter end
設定としてはこれだけです。 use Prometheus.PlugExporter
を記載するだけという非常にシンプルなものになります。
次に Application
での設定をしていきます。
defmodule SampleWeb.Application do use Application def start(_type, _args) do children = [ {Plug.Cowboy, scheme: :http, plug: SampleWeb.Router, options: [port: 8080]} ] SampleWeb.MetricsExporter.setup() opts = [strategy: :one_for_one, name: SampleWeb.Supervisor] Supervisor.start_link(children, opts) end end
ここでは SampleWeb.MetricsExporter.setup()
を呼び出すだけで完了になります。これでPlugの設定が完了しましたので、次にPrometheusの設定をしていきます。
3. Prometheusの設定
Prometheusでは以下の設定をしていきます。
scrape_configs: - job_name: 'elixir_plug' metrics_path: /metrics static_configs: - targets: ['192.168.33.101:8080']
これでひとまず準備完了。では実際にPrometheusの画面で見てみましょう。
無事にメトリクスが見れるようになりましたね。
4. Grafanaで可視化
Prometheusで集めたメトリクス情報をGrafarで可視化したいと思います。 まずは、Grafaraにログインし、データソースを追加します。
Name
には Elixir Plug
とし、URL
部分に起動中のPrometheusのURLを入れます。
これで設定が完了しました。
では早速、可視化してみましょう。とりあえず、 erlang_vm_allocators
で instance_no=0
のものを見てみたいと思います。
とりあえず、可視化することに成功しました。やったぜ。
次に erlang_vm_memory_bytes_total
で kind="processes"
を見てみたいと思います。これで現在割り当てられているメモリの量が確認することができます。
Erlang VMのいろんなメトリクス情報を可視化することができました。
5. 終わりに
簡単ではありましたが、PrometheusでErlang VM監視用のElixir Plugの設定とGrafanaの可視化までやってみました。 可視化については簡単にどのように使うかまでしか見てませんので、実運用になってきたらメモリ関係はしっかりと監視したいですね。
Prometheusではいろんな言語でClientライブラリがあり、その中でElixirのメトリクス監視をやってみました。Plugの設定箇所は少なかったのですが、ちょっと苦戦してしまいました。 特にElixirですとPhoenixを使いたいところですが、今回の設定をそのままやってみてもうまくいきませんでした。。。
機会があるときにPhoenixでの設定に挑戦してみたいと思います。