Grafana+Prometheus+Node Exporter収集&モニタリングシステム構築手順
本サイトの手順で、複数台のサーバーのリソース監視を1つの監視用サーバーで行うことができます。
環境
CentOS7.9もしくはAlmalinux8.6
1. Node Exporter導入 (監視対象サーバー側)
監視データを集約しているサーバーに自分のリソース監視データを送信するためのアプリケーション
参考にしたサイト: https://zenn.dev/uchidaryo/articles/setup-node-exporter
1.1 パッケージを最新にする
#sudo yum update
1.2 githubから最新版をダウンロード
ファイル名末尾が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から最新版をダウンロード
ファイル名末尾が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インストール
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 ダッシュボードの追加
「Data Source」はPrometheus、「Collector Types」はNode exporterで絞り込む
② 任意のダッシュボードをクリックすると以下のようなページになるので、
赤枠の「Copy ID to clipboard」をクリックしてダッシュボードのIDをコピーする
現在テストで運用しているダッシュボードは以下のもの
④ 赤枠の中の「Import」をクリック
⑤赤枠に先程コピーしたIDをペーストして「Load」をクリック
⑥ 赤枠のようにPrometheusに作成したData Sourceを選択して「Import」をクリック
⑦ ダッシュボードの画面が表示されたら構築完了
次にダッシュボードを開く場合も構築直後のURLからアクセスできる
Discussion