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
具体的な役割としては:
- LNDのgRPC APIに接続
- 情報を取得
- 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の設定方法も記事にしようと思います。






