lndmon / Prometheus / Grafanaを用いたLNDノードの監視環境の構築手順

lndmon / Prometheus / Grafanaを用いたLNDノードの監視環境の構築手順

日本ビットコイン産業株式会社 R&D事業部・ライトニング事業部の押川拓夢です。

本記事ではサーバーの監視ツールとして有名なPrometheus / Grafanaと、LNDのデータをPrometheus 形式に変換する監視用ブリッジであるlndmonを用いて、LNDノードの監視環境の構築方法について解説します。

最終的には↓のようなLNDノードの状態を監視するWebダッシュボード環境を構築できます。

ちゃんとしたドキュメントが無く、意外と面倒だったので記事化しておくことにしました。

普段ビットコイン研究所の方でも記事を書いているので、そちらも読んでもらえると嬉しいです。
https://bitcoin-research.jp/author/wokashi/

1. 構成概要

LND → lndmon → Prometheus → Grafana

役割

  • LND:Lightning ノード本体
  • lndmon:LND の状態を Prometheus 形式に変換
  • Prometheus:メトリクス収集・保存
  • Grafana:可視化ツール

LND・lndmonはBitcoin独自のものですが、Prometheus / Grafanaは一般的なサーバーの監視でも用いられるツールです。

以下にそれぞれのツールの簡単な説明をします。

Prometheusとは?

ープンソースソフトウェアのメトリクス収集・保存・アラートツールセットです。https://prometheus.io/

  • lndmonの /metrics を定期取得
  • 時系列DBに保存
  • クエリ実行
  • Alert判定

Grafanaとは?

時系列データやログをリアルタイムで可視化・監視するオープンソースのダッシュボード。
https://grafana.com/ja/

  • Prometheusからデータを取得
  • ダッシュボード表示
  • Alert通知

lndmonとは?

LNDの内部情報をPrometheus形式に変換するツールです。Lightning-labsが開発しています。
https://github.com/lightninglabs/lndmon

具体的な役割としては:

  1. LNDのgRPC APIに接続
  2. 情報を取得
  3. Prometheus形式(/metrics)で公開

2. 前提条件

  • LND が systemd で稼働している
  • mainnet 同期済み
  • readonly.macaroon が利用可能
  • 同一サーバー(localhost 通信)
    • 本来はLNDと監視サーバーは別のサーバーで運用することが望ましいが、今回は説明を省くため、同一サーバーと仮定する

3. LND Prometheus メトリクス有効化

3.1 lnd.conf 編集

vim ~/.lnd/lnd.conf

以下を追加:

[prometheus]
prometheus.enable=true
prometheus.listen=127.0.0.1:8989
prometheus.perfhistograms=false

3.2 LND 再起動

sudo systemctl restart lnd

3.3 動作確認

curl <http://127.0.0.1:8989/metrics> | head

4. lndmon インストール

cd ~
git clone <https://github.com/lightninglabs/lndmon>
cd lndmon/cmd/lndmon
go build

Dockerでも環境を作ることができます。
https://github.com/lightninglabs/lndmon/blob/master/Docker_Usage.md

5. lndmon 起動

ログディレクトリの作成

mkdir -p /home/user/.lndmon/logs

lndmonの起動

./lndmon \\
  --prometheus.listenaddr=127.0.0.1:9092 \\
  --prometheus.logdir=/home/user/.lndmon/logs \\
  --lnd.host=localhost:10009 \\
  --lnd.network=mainnet \\
  --lnd.macaroondir=/home/user/.lnd/data/chain/bitcoin/mainnet/ \\
  --lnd.macaroonname=readonly.macaroon \\
  --lnd.tlspath=/home/user/.lnd/tls.cert

動作確認:

curl http://localhost:9092/metrics | grep lnd_

6. Prometheus インストール

sudo apt update
sudo apt install -y prometheus

7. Prometheus 設定

global:
  scrape_interval: 20s

scrape_configs:
  - job_name: "lndmon"
    static_configs:
      - targets: ["127.0.0.1:9092"]

  - job_name: "lnd"
    static_configs:
      - targets: ["127.0.0.1:8989"]

8. Prometheus 再起動

sudo systemctl restart prometheus

確認

curl "<http://localhost:9090/api/v1/query?query=lnd_chain_block_height>"

resultにblock heightの数値が含まれていたらOK

9. Grafana インストール

sudo apt install -y grafana

sudo systemctl enable --now grafana-server

10. Grafana 初期設定

ブラウザでアクセス:

http://<サーバーのIP>:3000

初期ログイン:

  • user: admin
  • pass: admin

11. Prometheus データソース追加

Settings → Data Sources → Add → Prometheusに以下を入力

<http://localhost:9090>

Save & Test。

12. lndmon ダッシュボード追加

Grafana → Dashboards → Importを開き、lndmon の JSON を読み込む。
例:

 ~/lndmon/grafana/provisioning/dashboards/

13. 設定完了 & 確認

(ダッシュボードは基本外部公開しない)

http://<サーバーのIP>:3000

Dashboards → Network StatsでLNのネットワーク情報が可視化される。

Dashboards → Node Stateでノード情報を(チャネルを開設してみた)

Dashboards → Peer Stateでピアの情報を確認できる。

おまけ: lndmonを systemd 化

lndmon を systemd 化して常駐・自動起動する方法を書いておく。

systemd unit ファイルの作成

sudo vim /etc/systemd/system/lndmon.service
[Unit]
Description=lndmon Prometheus exporter for LND
After=network-online.target lnd.service
Wants=network-online.target

[Service]
Type=simple
User=user
Group=user

WorkingDirectory=/home/user/lndmon
ExecStart=/home/user/lndmon/cmd/lndmon/lndmon \\
  --prometheus.listenaddr=127.0.0.1:9092 \\
  --prometheus.logdir=/home/user/.lndmon/logs \\
  --lnd.host=localhost:10009 \\
  --lnd.network=mainnet \\
  --lnd.macaroondir=/home/user/.lnd/data/chain/bitcoin/mainnet/ \\
  --lnd.macaroonname=readonly.macaroon \\
  --lnd.tlspath=/home/user/.lnd/tls.cert

Restart=always
RestartSec=5

StandardOutput=journal
StandardError=journal

NoNewPrivileges=true
PrivateTmp=true
ProtectHome=false
ProtectSystem=full

[Install]
WantedBy=multi-user.target

反映して起動

sudo systemctl daemon-reload
sudo systemctl enable --now lndmon

スタータス確認

sudo systemctl status lndmon --no-pager

ログ確認

sudo journalctl -u lndmon -n 200 --no-pager

終わりに

Lightning-LabsがPrometheusのような一般的なツールをベースの監視ツールを提供してくれているのはありがたいですね。

Prometheus用のAlert Managerを使うことで、liquidityの偏りや攻撃の予兆をSlackやメールで通知させることもできます。今後の記事ではAlertの設定方法も記事にしようと思います。

この続き : 0字 / 画像 0枚
100

会員登録 / ログインして続きを読む

関連記事

記事を書いた人

日本ビットコイン産業株式会社 R&D事業部・ライトニング事業部の押川拓夢です。

SNSにシェア

このクリエイターの人気記事

セキュアなノード運用方法: Bitcoin / LNノードハードニング