lndのモニタリング観点について

とりあえずLNDMONを立てたものの、どうやってモニタリングしていこうか決めていない。
そもそも、lndmonの仕組みから理解していこうと思う。

lndmonは、lndmonというプログラムと、prometheus、grafanaから構成されている。下記の図ではnginxがあるが、GKEに展開する場合はingressを利用する。

lndmon

コードを見ると単純で、lndのクライアントを作って、そのメトリクスをprometheusに投げている。

// Start our Prometheus exporter. This exporter spawns a goroutine
// that pulls metrics from our lnd client on a set interval.
exporter := collectors.NewPrometheusExporter(cfg.Prometheus, lnd)  
if err := exporter.Start(); err != nil {  
    return err
}

ちなみに、このlndのクライアントは、loopのクライアントソースを使っている。なにか使いやすかったりするのだろうか。

prometheus

そもそもprometheusとgrafanaってセットで語られるけれど、あまり深く理解していないというのが正直なところだ。 prometheusはリソース監視ツールの一種。下記のようなことができるみたい。

  1. 監視対象のサーバーから情報を取得 & 保管
  2. 保管済みデータに対して集計クエリを発行できる
  3. しきい値を超えた場合のアラート (メール、Slack、がんばればTwilioで電話)
  4. 柔軟なアラート設定 (同じエラーはまとめて通知とかの設定ができる)

登場人物には主に2つあって、exporterとprometheusだ。

| 名称 | 説明 | |-|-| | exporter | テキスト形式でリソース情報を公開する | | prometheus | 監視サーバーのプログラム |

今回は、exporterがlndmonに当たる、という理解でよさそうだ。 pormetheus単体でもグラフとかデータは見れる。

LNDで紹介されているのはavg(topk(5, lnd_peer_recv_byte))というクエリだ。
これは、「トップ5のpeerから受け取っているbytes数はどれくらいなの?」という質問に答える。

なんか急激に上がっているな。よくわかんないけれど、こうやっていろんなものを観察できる。

grafana

要は、prometheusで取得しているデータを、prometheusと同じクエリ形式で取得して、組み合わせたり、いろんなGUIを柔軟に使ったりしながら表示することができる。

例えば、lndmonの場合は、デフォルトでgrafanaにたくさんの設定がのっているのだけど、こんなものもある。