コンテンツにスキップ

9.監視ツールセットアップ

プロメテウスはターゲットに指定したメトリックHTTPエンドポイントをスクレイピングし、情報を収集する監視ツールです。オフィシャルドキュメントはこちら グラファナは収集されたデータを視覚的に表示させるダッシュボードツールです。

9-1.インストール

概要

「prometheus」および「prometheus node exporter」をインストールします。 この手順では、リレーノード1でprometheusとGrafana本体を稼働させ、各サーバーの情報を取得する方法です。

構成図

    flowchart TB
        bp[ローカルPC] -- 3000ポート開放 --> a1[Grafana] 
        a2[prometheus] -- リレー1IP指定で<br>9100/12798ポート開放 --> ide2[BP] & ide3[リレー2]
        subgraph ide1[リレー1]
            a1[Grafana] <--> a2[prometheus]
        end
        subgraph ide2[BP]
            a3[node-exporter]
        end
        subgraph ide3[リレー2]
            a4[node-exporter]
        end

prometheusインストール

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

grafanaインストール

sudo apt-get install -y apt-transport-https software-properties-common
sudo wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key
echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" > grafana.list
sudo mv grafana.list /etc/apt/sources.list.d/grafana.list
sudo apt update && sudo apt install -y grafana

サービス有効化とファイアウォールを設定する。

```bash bash title="Ubuntu22.04の場合は1行づつ実行してください" sudo systemctl enable grafana-server.service sudo systemctl enable prometheus.service sudo systemctl enable prometheus-node-exporter.service

FW設定でGrafanaポートを開放する
```bash
sudo ufw allow 3000/tcp
sudo ufw reload

sudo systemctl enable prometheus-node-exporter.service

FW設定でPrometheusメトリクスポートをリレー1のIP限定で開放する

bash bash title="Ubuntu22.04の場合は1行づつ実行してください" sudo ufw allow from <リレーノード1のIP> to any port 12798 sudo ufw allow from <リレーノード1のIP> to any port 9100 sudo ufw reload

prometheus-node-exporterアップデート

prometheus-node-exporterのパスを取得する

cd $HOME/git
nodeexPath=`which prometheus-node-exporter`

1.5.0をダウンロードする

wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz

ダウンロードファイルを解凍する

tar xvf node_exporter-1.5.0.linux-amd64.tar.gz

サービスを停止する

sudo systemctl stop prometheus-node-exporter.service

バイナリファイルをシステムフォルダへコピーする

cd node_exporter-1.5.0.linux-amd64
sudo cp node_exporter $nodeexPath

サービスをスタートする

sudo systemctl start prometheus-node-exporter.service

バージョン確認

prometheus-node-exporter --version

戻り値1行目がnode_exporter, version 1.5.0ならOK

9-2.設定ファイルの作成

リレーノード1にインストールしたPrometheusの設定ファイルを作成します。ここに記載されたサーバーのデータを取得します。

注意

targets:の「xxx.xxx.xxx」は、BPのパブリックIP(静的)アドレスに置き換えて下さい

cat > $HOME/prometheus.yml << EOF
global:
  scrape_interval:     15s # By default, scrape targets every 15 seconds.

  # Attach these labels to any time series or alerts when communicating with
  # external systems (federation, remote storage, Alertmanager).
  external_labels:
    monitor: 'codelab-monitor'

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label job=<job_name> to any timeseries scraped from this config.
  - job_name: 'prometheus'

    static_configs:
      - targets: ['localhost:9100']
        labels:
          alias: 'relaynode1'
          type:  'system'
      - targets: ['xxx.xxx.xxx.xxx:9100']
        labels:
          alias: 'block-producing-node'
          type:  'system'
      - targets: ['xxx.xxx.xxx.xxx:12798']
        labels:
          alias: 'block-producing-node'
          type:  'cardano-node'
      - targets: ['localhost:12798']
        labels:
          alias: 'relaynode1'
          type:  'cardano-node'
EOF

注意

targets:の「xxx.xxx.xxx」は、BPのパブリックIP(静的)アドレスに置き換えて下さい。
targets:の「bb.xxx.xxx」は、リレー2のパブリックIP(静的)アドレスに置き換えて下さい。

cat > $HOME/prometheus.yml << EOF
global:
  scrape_interval:     15s # By default, scrape targets every 15 seconds.

  # Attach these labels to any time series or alerts when communicating with
  # external systems (federation, remote storage, Alertmanager).
  external_labels:
    monitor: 'codelab-monitor'

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label job=<job_name> to any timeseries scraped from this config.
  - job_name: 'prometheus'

    static_configs:
      - targets: ['localhost:9100']
        labels:
          alias: 'relaynode1'
          type:  'system'
      - targets: ['bb.xxx.xxx.xxx:9100']
        labels:
          alias: 'relaynode2'
          type:  'system'
      - targets: ['xx.xxx.xxx.xxx:9100']
        labels:
          alias: 'block-producing-node'
          type:  'system'
      - targets: ['xxx.xxx.xxx.xxx:12798']
        labels:
          alias: 'block-producing-node'
          type:  'cardano-node'
      - targets: ['localhost:12798']
        labels:
          alias: 'relaynode1'
          type:  'cardano-node'
      - targets: ['bb.xxx.xxx.xxx:12798']
        labels:
          alias: 'relaynode2'
          type:  'cardano-node'
EOF

prometheus.yml構文チェック

sudo promtool check config $HOME/prometheus.yml

戻り値確認

構文エラーなしの場合

Checking /home/user/prometheus.yml
SUCCESS: 0 rule files found

構文エラーの場合(一例)

Checking /home/user/prometheus.yml
FAILED: parsing YAML file /home/user/prometheus.yml: yaml: line XX: did not find expected '-' indicator

※/home/user/prometheus.yml(userは各自で設定したユーザー名)

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

sudo nano $HOME/prometheus.yml

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

prometheus.ymlを移動します

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

Grafanaプラグインをインストールする

sudo grafana-cli plugins install yesoreyeram-infinity-datasource

サービスを起動します。

bash bash title="Ubuntu22.04の場合は1行づつ実行してください" sudo systemctl restart grafana-server.service sudo systemctl restart prometheus.service sudo systemctl restart prometheus-node-exporter.service

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

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

戻り値確認

  • grafana-server.service
  • prometheus.service
  • prometheus-node-exporter.service
    上記3つのプログラムが 緑色 active (running) になっていることを確認する。

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

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: 0 rule files found

構文エラーの場合(一例)

Checking /etc/prometheus/prometheus.yml
FAILED: parsing YAML file /etc/prometheus/prometheus.yml: yaml: line XX: did not find expected '-' indicator
/etc/prometheus/prometheus.ymlを開いて余分なスペースや記号の有無などを確認してください。

サービスを再起動する

sudo systemctl restart prometheus.service

9-3.Grafanaダッシュボードの設定

  1. ローカルPCのブラウザから http://<リレーノード1IPアドレス>:3000 を開きます。
  2. ログイン名・PWは admin / admin
  3. パスワードを変更します。
  4. 左上の三本線メニューを開き「Connections」→「Data sources」をクリックします。
  5. 「Add new data source」をクリックし、「Prometheus」を選択します。
  6. 名前は Prometheusとしてください。
  7. URLhttp://localhost:9090に設定します。
  8. Save & TestをクリックしSuccessfully queried the Prometheus API.と表示されたら再度Data sourcesをクリックします。
  9. 「Add new data source」をクリックし、下部にある「Infinity」をクリックします。
  10. 設定内容を変更することなく、Save & TestをクリックしSettings savedと表示されたらOK。
  11. BPサーバーでパネル用JSONファイルをダウンロードします。

curl -s -o $NODE_HOME/SJG_Grafana_Dashboard.json https://raw.githubusercontent.com/akyo3/Extends-SJG-Knowledge/main/SJG_Grafana_Dashboard.json
一部ファイル内容を書き換える
sed -i $NODE_HOME/SJG_Grafana_Dashboard.json \
    -e "s/bech32_id_of_your_pool/$(cat $NODE_HOME/pool.id-bech32)/g"
12. BPのcnodeフォルダにあるSJG_Grafana_Dashboard.jsonをローカルPCにダウンロードします
13. 左メニューの「Dashboards」→「New」→「+import」をクリックします。
14. 「Upload JSON file」をクリックし、10でダウンロードしたSJG_Grafana_Dashboard.jsonを指定します。
15. 「Prometheus」と「Infinity」のプルダウンを選択しImportボタンをクリックします。

Grafana system health dashboard

🎊おめでとうございます🎊

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

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