SPO JAPAN GUILD
ステークプール構築

監視環境の構築

Prometheusは、監視対象のmetrics endpointからmetricsを取得し、時系列データとして保存する監視システムです。

オフィシャルドキュメントはこちら

Grafanaは、Prometheusなどに保存されたデータをダッシュボードとして可視化するためのツールです。

1. 監視構成

本手順では、Cardano Nodeのmetricsをcardano-tracer経由でPrometheusへ取得し、Grafanaで可視化します。

cardano-nodeから出力されるtrace(ログ)やmetricsは、Forwarderを使用してUnix Socket経由でcardano-tracerへ転送されます。

cardano-tracerは受け取ったデータを処理し、Prometheus形式のmetrics endpointとして公開します。

PrometheusはこのendpointからCardano Nodeのmetricsを取得します。

また、CPU、メモリ、ディスクなどのシステムmetricsはprometheus-node-exporterから取得します。

この手順では、 Grafana稼働サーバー(リレーサーバー1) でprometheusとGrafanaを稼働させ、各Cardano Node稼働サーバーからmetricsを取得します。

構成図

Grafana稼働サーバー Cardano Node稼働サーバー :3000 :9100 :12808 Stdout EKGBackend PrometheusSimple Forwarder / Unix Socketトレース・メトリクス転送 JSONログ hasPrometheus ローカルPC Prometheus Grafana cardano-node node-exporter journalctl メトリクス収集 127.0.0.1:12798 cardano-tracer gLiveView / blocklog JSONログ 0.0.0.0:12808

本構成では、以下のmetrics endpointを使用します。

ポート公開元用途
12798cardano-node / PrometheusSimplegLiveView / blocklogなどのローカルツール
12808cardano-tracer / hasPrometheusCardano Node metrics
9100prometheus-node-exporterCPU、メモリ、ディスクなどのシステムmetrics

Prometheus / Grafanaによる監視では、PrometheusSimpleの12798ポートからCardano Nodeのmetricsを直接取得せず、cardano-tracerが公開する12808ポートを使用します。

2. cardano-tracerの確認

初期構築時に設定したcardano-tracerが、各Cardano Node稼働サーバーで正常に動作していることを確認します。

cardano-tracerのサービス確認

cardano-tracerが正常に起動していることを確認します。

sudo systemctl status cardano-tracer --no-pager

active (running)であることを確認します。

Unix Socketの確認

Tracer用のUnix Socketが作成されていることを確認します。

ls -la ${NODE_HOME}/tracer/

socketが作成されていることを確認します。

Prometheus endpointの確認

TracerがPrometheus用の12808ポートをListenしていることを確認します。

sudo ss -lntp | grep ':12808'

cardano-tracerが0.0.0.0:12808でListenしていることを確認します。

Cardano Nodeとの接続確認

Cardano Nodeがcardano-tracerへ接続していることを確認します。

curl -s http://127.0.0.1:12808/

接続しているNode名が表示されることを確認します。

例えば、Previewのリレー1では以下のように表示されます。

<html><head><title>Prometheus metrics</title></head><body><ul><li><a href="/preview-relay-1">preview-relay-1</a></li></ul></body></html>

3. PrometheusとGrafanaのインストール

Prometheusのインストール

sudo apt update
sudo apt install -y prometheus prometheus-node-exporter
sudo apt update
sudo apt install -y prometheus-node-exporter

Grafanaのインストール

sudo apt install -y apt-transport-https gnupg
sudo mkdir -p /etc/apt/keyrings
wget -4 -O - https://apt.grafana.com/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/grafana.gpg
sudo chmod 644 /etc/apt/keyrings/grafana.gpg
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt update && sudo apt install -y grafana

サービス有効化とファイアウォールの設定

sudo systemctl enable --now grafana-server.service prometheus.service prometheus-node-exporter.service

Grafanaの3000ポートへの接続を許可します。

sudo ufw allow 3000/tcp
sudo ufw reload
sudo systemctl enable --now prometheus-node-exporter.service

Prometheus稼働サーバーから9100と12808ポートへの接続を許可します。

sudo ufw allow from <Grafana稼働サーバーのIP> to any port 9100 proto tcp
sudo ufw allow from <Grafana稼働サーバーのIP> to any port 12808 proto tcp
sudo ufw reload

4. Prometheusの設定

Grafana稼働サーバーにインストールしたPrometheusの設定ファイルを作成します。

各Cardano Node稼働サーバーで以下を実行し、Tracerに接続しているNode名を確認します。

curl -s http://127.0.0.1:12808/
期待される表示例: リレー1の場合
<html><head><title>Prometheus metrics</title></head><body><ul><li><a href="/mainnet-relay-1">mainnet-relay-1</a></li></ul></body></html>

接続しているNode名が表示されれば正常です。

設定前に置き換える値

リレー2のIPアドレスまたはDNSを代入します。

relay2_ipv4_or_dns=

BPのIPアドレスを代入します。

bp_ipv4=

Node名を設定します。

NODE_NAME_RELAY_1=${NODE_CONFIG}-relay-1
NODE_NAME_RELAY_2=${NODE_CONFIG}-relay-2
NODE_NAME_BP=${NODE_CONFIG}-bp

設定するNode名は、各Cardano NodeのTraceOptionNodeNameと一致している必要があります。

Prometheusの設定ファイル作成

cat > $HOME/prometheus.yml << EOF
global:
  scrape_interval: 15s
  external_labels:
    monitor: 'codelab-monitor'

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9100']
        labels:
          alias: 'relaynode1'
          type: 'system'

      - targets: ['${relay2_ipv4_or_dns}:9100']
        labels:
          alias: 'relaynode2'
          type: 'system'

      - targets: ['${bp_ipv4}:9100']
        labels:
          alias: 'block-producing-node'
          type: 'system'

      - targets: ['localhost:12808']
        labels:
          alias: 'relaynode1'
          type: 'cardano-node'
          __metrics_path__: '/${NODE_NAME_RELAY_1}'

      - targets: ['${relay2_ipv4_or_dns}:12808']
        labels:
          alias: 'relaynode2'
          type: 'cardano-node'
          __metrics_path__: '/${NODE_NAME_RELAY_2}'

      - targets: ['${bp_ipv4}:12808']
        labels:
          alias: 'block-producing-node'
          type: 'cardano-node'
          __metrics_path__: '/${NODE_NAME_BP}'
EOF

prometheus.yml構文チェック

sudo promtool check config $HOME/prometheus.yml

構文エラーがない場合は、以下のように表示されます。

正常時の表示例:
Checking /home/$USER/prometheus.yml

SUCCESS: /home/$USER/prometheus.yml is valid prometheus config file syntax

構文エラーがある場合は、以下のように表示されます。

構文エラー時の表示例:
Checking /home/$USER/prometheus.yml

FAILED: parsing YAML file /home/$USER/prometheus.yml: yaml: line **: did not find expected '-' indicator

構文エラーだった場合は、$HOME/prometheus.ymlを開き、余分なスペースや記号の有無を確認して修正してください。

nano $HOME/prometheus.yml

修正したら、Ctrl + Oで保存し、Enter。その後Ctrl + Xで閉じます。

prometheus.ymlファイルのバックアップ

sudo cp /etc/prometheus/prometheus.yml /etc/prometheus/prometheus.yml.bak

prometheus.ymlファイルの移動

sudo mv $HOME/prometheus.yml /etc/prometheus/prometheus.yml

Grafanaプラグインのインストール

sudo grafana cli plugins install yesoreyeram-infinity-datasource

GrafanaダッシュボードでJSONデータを取得するため、Infinity datasourceプラグインをインストールします。

サービス再起動

sudo systemctl restart grafana-server.service prometheus.service prometheus-node-exporter.service

サービスが正しく実行されていることを確認します。

sudo systemctl --no-pager status grafana-server.service prometheus.service prometheus-node-exporter.service

以下3つのサービスがactive (running)になっていることを確認してください。

  • grafana-server.service
  • prometheus.service
  • prometheus-node-exporter.service

バージョン確認

Grafana、Prometheus、node_exporterのバージョンを確認します。

grafana server -v
prometheus --version
prometheus-node-exporter --version

node_exporterのバージョンを確認します。

prometheus-node-exporter --version

それぞれ以下のような形式で表示されれば正常です。

表示例:
Version 13.2.2
prometheus, version 2.45.3+ds
node_exporter, version 1.7.0

既存の設定ファイルを更新する場合

sudo nano /etc/prometheus/prometheus.yml

修正したら、Ctrl + Oで保存し、Enter。その後Ctrl + Xで閉じます。

prometheus.yml構文チェック

sudo promtool check config /etc/prometheus/prometheus.yml

構文エラーがない場合は、以下のように表示されます。

正常時の表示例:
Checking /etc/prometheus/prometheus.yml

SUCCESS: /etc/prometheus/prometheus.yml is valid prometheus config file syntax

構文エラーがある場合は、以下のように表示されます。

構文エラー時の表示例:
Checking /etc/prometheus/prometheus.yml

FAILED: parsing YAML file /etc/prometheus/prometheus.yml: yaml: line **: did not find expected '-' indicator

/etc/prometheus/prometheus.ymlを開き、余分なスペースや記号の有無を確認してください。

サービスの再起動

sudo systemctl restart prometheus.service

5. Grafanaダッシュボードの設定

  1. ローカルPCのブラウザからhttp://Grafana稼働サーバーIPアドレス:3000を開きます。

  2. ログイン名・パスワードはadmin / adminです。

  3. パスワードを変更します。

  4. 左ペインの「Connections」→「Data sources」を選択します。

  5. 「Add data source」を選択し、「Prometheus」を選択します。

  6. 「Name」は以下を入力します。

Prometheus
  1. 「URL」は以下を入力します。
http://localhost:9090
  1. 最下部に配置されている「Save & Test」を選択し、Successfully queried the Prometheus API.と表示されたら再度左ペインから「Data sources」を選択します。

  2. 「Add new data source」を選択し、検索欄から「Infinity」を検索し、選択します。

  3. 設定内容を変更することなく、「Save & Test」を選択し、Health check successfulと表示されたら問題ありません。

  4. BPサーバーでパネル用JSONファイルをダウンロードします。

curl -o $NODE_HOME/spo-japan-guild-cardano-node-dashboard.json https://docs.spojapanguild.net/grafana/cardano-node/spo-japan-guild-cardano-node-dashboard.json
sed -i \
  -e "s/bech32_id_of_your_pool/$(cat $NODE_HOME/pool.id-bech32)/g" \
  $NODE_HOME/spo-japan-guild-cardano-node-dashboard.json
  1. BPのcnodeフォルダにあるspo-japan-guild-cardano-node-dashboard.jsonをローカルPCにダウンロードします。

  2. 左ペインの「Dashboards」→「New」→「Import」を選択します。

  3. 「Upload dashboard JSON file」を選択し、ダウンロードしたspo-japan-guild-cardano-node-dashboard.jsonを指定します。

  4. 「DS_PROMETHEUS」→「Prometheus」を選択し、「DS_YESOREYERAM-INFINITY-DATASOURCE」→「yesoreyeram-infinity-datasource」を選択し、Importボタンを選択します。

これで基本的な監視設定は完了です。

以下の追加設定も実施してください。


Last updated on

Cookieの使用について

当サイトでは、ドキュメントの効果測定と利用状況の把握のため、Google Analytics を使用しています。

同意すると、分析用 Cookie が有効になります。