📌

Grafana+Prometheus+Node Exporter収集&モニタリングシステム構築手順

2023/12/28に公開

本サイトの手順で、複数台のサーバーのリソース監視を1つの監視用サーバーで行うことができます。

環境

CentOS7.9もしくはAlmalinux8.6

1. Node Exporter導入 (監視対象サーバー側)

監視データを集約しているサーバーに自分のリソース監視データを送信するためのアプリケーション
参考にしたサイト: https://zenn.dev/uchidaryo/articles/setup-node-exporter

1.1 パッケージを最新にする

#sudo yum update

1.2 githubから最新版をダウンロード

https://github.com/prometheus/node_exporter/releases/
上のgithubページから最新版のnode exporterのダウンロードリンクを用いて、
ファイル名末尾がlinux-amd64.tar.gzのものをwgetコマンドでダウンロード

以下ダウンロードの例

# wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz

1.3 ファイルの展開と配置

ダウンロードしたファイルを展開して、/usr/local/bin/の配下に置く

# tar xzvf node_exporter-1.7.0.linux-amd64.tar.gz
# cd node_exporter-1.7.0.linux-amd64
# sudo mv node_exporter /usr/local/bin/

1.4 サービスの登録と実行

Linuxサーバの起動にあわせて自動で起動するためにLinuxサービスとして登録する

① node_exporter を実行するユーザを作成し、実行ファイルの所有権を変更

# sudo useradd -s /sbin/nologin node_exporter
# sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter

② 起動スクリプト作成

# sudo vi /etc/systemd/system/node_exporter.service

以下の内容を記載して保存

[Unit]
Description=Node Exporter


[Service]
User=node_exporter
ExecStart=/usr/local/bin/node_exporter


[Install]
WantedBy=multi-user.target

③ サービスを有効化して実行を開始

# sudo systemctl daemon-reload
# sudo systemctl enable node_exporter
# sudo systemctl start node_exporter

1.5 ポート開放と動作確認

TCP/9100番ポートを開放して、http://{IPアドレス}:9100/metrics にアクセスして送信するテキストデータを閲覧できるか確認する

2. Prometheus導入(データ集約側)

監視データを集約するためのアプリケーション
参考にしたサイト: https://qiita.com/kyo662211/items/90eefc247d44cb9f20bb

2.1 パッケージを最新にする

#sudo yum update

2.2 Prometheus Serverのインストール

① インストール先のディレクトリ作成してここに移動

# mkdir /usr/local/src/prometheus
# cd /usr/local/src/prometheus

② gitnubから最新版をダウンロード
https://github.com/prometheus/prometheus/releases/
上のgithubページから最新版のPrometheusのダウンロードリンクを用いて、
ファイル名末尾がlinux-amd64.tar.gzのものを以下のようにwgetコマンドでダウンロード

# wget https://github.com/prometheus/prometheus/releases/download/v2.48.1/prometheus-2.48.1.linux-amd64.tar.gz

③ ダウンロードしたファイルを展開して、/usr/local/src/の配下に置く

tar xvfz prometheus-2.48.1.linux-amd64.tar.gz
mv prometheus-2.48.1.linux-amd64 prometheus-server
mkdir /usr/local/src/prometheus
mv prometheus-server /usr/local/src/prometheus

⑤ 起動スクリプト作成

vi /etc/systemd/system/prometheus.service

以下内容をprometheus.serviceに記載する

[Unit]
Description=Prometheus - Monitoring system and time series database
Documentation=https://prometheus.io/docs/introduction/overview/
After=network-online.target
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/local/src/prometheus/prometheus-server/prometheus \
  --config.file=/usr/local/src/prometheus/prometheus-server/prometheus.yml \

[Install]
WantedBy=multi-user.target

⑥ Prometheus起動

# systemctl daemon-reload
# systemctl enable prometheus.service
# systemctl start prometheus.service

2.3 ポート開放と動作確認

TCP/9090番ポートを開放する
http://{PrometheusサーバーのIPアドレス}:9090/graph にアクセスしてPrometheusのページが表示されることを確認する

2.4 Prometheusの設定

① 設定ファイルのバックアップ

# cp -i /usr/local/src/prometheus/promethus-server/prometheus.yml /usr/local/src/prometheus/promethus-server/prometheus.yml.org

② prometheus.yml 設定変更

# vi /usr/local/src/prometheus/prometheus-server/prometheus.yml

targetsに以下のように監視対象のサーバーを追記する

# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# 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"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    static_configs:
      - targets: ['192.168.0.10:9100:client1', '192.168.0.11:9100:client2', '192.168.0.12:9100:client3']

    relabel_configs:
      - source_labels: [__address__]  # targetsエントリを分解してinstanceラベルの値を生成する
        regex: '([^:]+):(\d+):(.*)'
        target_label: instance
        replacement: '${3}:${2}'      # instance=<HOSTNAME>:<PORT>
      - source_labels: [__address__]  # targetsエントリを分解して、実際のアクセス先を生成する
        regex: '([^:]+):(\d+):(.*)'
        target_label: __address__
        replacement: '${1}:${2}'      # __address__=<IP>:<PORT>

③ Prometheus再起動

# systemctl restart prometheus.service

3. Grafana導入(データ集約側)

Prometheusで集約したデータをグラフに表示するためのアプリケーション
参考にしたサイト: https://www.conversion.co.jp/tecblog/20201110/

3.1 Grafanaインストールと起動

① Grafanaインストール
https://grafana.com/grafana/download?edition=oss
上のサイトで最新のGrafanaのバージョンを確認して、
Red Hat, CentOS, RHEL, and Fedora(64 Bit)の記載の通りにインストール

# sudo yum install -y https://dl.grafana.com/oss/release/grafana-10.2.3-1.x86_64.rpm

② Grafanaを起動

# systemctl start grafana-server 
# systemctl enable grafana-server

3.2 ポート開放と動作確認

GrafanaのウェブUIに必要なTCP/3000番ポートを開放する

http://{GrafanaサーバーのIP}:3000/ にアクセスして、
初期ユーザー名:admin
初期パスワード:admin でログインして正常にページが開けるか確認する

4. Grafana設定

ログインできたら、リソースグラフ表示のための初期設定を行う

4.1 データソース追加

① 黄色の枠線の”DATA SOURCES”をクリック

② Prometheusをクリック

③「HTTP」の欄の「URL」に「http://localhost:9090」と入力して、ページ最下部の「Save&test」をクリック
「Data source is working」と表示されればデータソース追加完了

4.2 ダッシュボードの追加

https://grafana.com/grafana/dashboards/
① 上のリンクから任意のダッシュボードをダウンロードしてGrafanaに適応できる
「Data Source」はPrometheus、「Collector Types」はNode exporterで絞り込む

② 任意のダッシュボードをクリックすると以下のようなページになるので、
赤枠の「Copy ID to clipboard」をクリックしてダッシュボードのIDをコピーする

現在テストで運用しているダッシュボードは以下のもの
https://grafana.com/grafana/dashboards/11074-node-exporter-for-prometheus-dashboard-en-v20201010/
③ Grafanaの左側のメニューの「Dashboards」をクリック

④ 赤枠の中の「Import」をクリック

⑤赤枠に先程コピーしたIDをペーストして「Load」をクリック

⑥ 赤枠のようにPrometheusに作成したData Sourceを選択して「Import」をクリック

⑦ ダッシュボードの画面が表示されたら構築完了
次にダッシュボードを開く場合も構築直後のURLからアクセスできる

Discussion