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はリソース監視ツールの一種。下記のようなことができるみたい。
- 監視対象のサーバーから情報を取得 & 保管
- 保管済みデータに対して集計クエリを発行できる
- しきい値を超えた場合のアラート (メール、Slack、がんばればTwilioで電話)
- 柔軟なアラート設定 (同じエラーはまとめて通知とかの設定ができる)
登場人物には主に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にたくさんの設定がのっているのだけど、こんなものもある。