Prometheusはコンテナやクラウドなどの大量コンポーネントを監視する事に特化したソフトウェアです。監視機能の観点で評価すれば、ZabbixやJP1ファミリーなどのソフトウェアの方が実装できる機能数は多いですが、これらソフトウェアは設定に手間がかかる事が難点です。Prometheusは人手では管理しきれないほどの大量コンポーネントを監視する事に優れたツールです。このページではPrometheusの公式準拠のインストール手順を紹介します。
前提
参照資料
動作確認済環境
- Rocky Linux 8.6
- Prometheus 2.35.0
Prometheus
インストール
便宜のため、作業用のディレクトリを作成します。
cd ~/ mkdir work cd work/
Prometheusをダウンロードします。以下コマンドは執筆時点のURLですので、必要に応じて「Prometheus DOWNLOAD」を調査し、最新版URLに差し替えてください。
wget https://github.com/prometheus/prometheus/releases/download/v2.35.0/prometheus-2.35.0.linux-amd64.tar.gz tar xvzf prometheus-*.tar.gz
起動
Prometheusの起動は非常に簡単です。prometheusというファイルを実行するだけです。
cd prometheus-2.35.0.linux-amd64 ./prometheus
操作ログは以下の通りです。Prometheusを停止したい場合はCtrl+Cなどで適宜の停止をします。
[root@linux010 prometheus-2.35.0.linux-amd64]# ./prometheus ts=2022-05-13T02:43:41.091Z caller=main.go:488 level=info msg="No time or size retention was set so using the default time retention" duration=15d ts=2022-05-13T02:43:41.091Z caller=main.go:525 level=info msg="Starting Prometheus" version="(version=2.35.0, branch=HEAD, revision=6656cd29fe6ac92bab91ecec0fe162ef0f187654)" ts=2022-05-13T02:43:41.091Z caller=main.go:530 level=info build_context="(go=go1.18.1, user=root@cf6852b14d68, date=20220421-09:53:42)" ts=2022-05-13T02:43:41.091Z caller=main.go:531 level=info host_details="(Linux 4.18.0-348.12.2.el8_5.x86_64 #1 SMP Wed Jan 19 14:35:04 EST 2022 x86_64 linux010 (none))" <omitted>
もしターミナルを複数起動するのが手間ならば、適宜、バックグラウンドで実行しましょう。操作例は以下の通りです。
nohup ./prometheus > /dev/null 2>&1 &
動作確認
以下URLをブラウザで開きます。「/」へのアクセスを試みると、「/graph」へリダイレクトされグラフ描画ページへ遷移します。
http://<IPアドレス>:9090/
以下URLをブラウザで開きます。すると、監視項目の一覧が表示されます。この画面で表示される監視項目のうち1つをメモに控えましょう。
http://<IPアドレス>:9090/metric
再びグラフ描画ページ(http://<ip_addr>:9090/graph)に戻ります。検索窓に監視項目(例:prometheus_http_requests_total)を入力し、「Graph」を押下します。すると、監視結果がグラフ化される事が分かります。
Node exporter
インストール
前述の操作で監視されているのはPrometheusそのものです。PrometheusはGo言語で作成されたHTTPサーバで、そのHTTPサーバのメモリ使用量や200応答の回数などがメトリックとして蓄積されていきます。
それではPrometheusではなく仮想マシンそのものを監視してみましょう。PrometheusはHTTPで公開されたメトリック情報をスクレイピングして情報を蓄積します。ですので、HTTPで公開できる情報ならば「何でも」監視する事ができます。それではOSの情報をHTTPとして公開するNode exporterをインストールしてみましょう。
便宜のため、作業用のディレクトリへ移動します。
cd ~/ cd work/
Node Exporterをダウンロードします。以下コマンドは執筆時点のURLですので、必要に応じて「Prometheus DOWNLOAD」を調査し、最新版URLに差し替えてください。
wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz tar xvzf node_exporter-*.tar.gz
起動
Node Exporterの起動は非常に簡単です。node_exporterというファイルを実行するだけです。
cd node_exporter-1.3.1.linux-amd64 ./node_exporter
操作ログは以下の通りです。Prometheusを停止したい場合はCtrl+Cなどで適宜の停止をします。
[root@linux010 node_exporter-1.3.1.linux-amd64]# ./node_exporter ts=2022-05-13T03:18:42.397Z caller=node_exporter.go:182 level=info msg="Starting node_exporter" version="(version=1.3.1, branch=HEAD, revision=a2321e7b940ddcff26873612bccdf7cd4c42b6b6)" ts=2022-05-13T03:18:42.397Z caller=node_exporter.go:183 level=info msg="Build context" build_context="(go=go1.17.3, user=root@243aafa5525c, date=20211205-11:09:49)" ts=2022-05-13T03:18:42.397Z caller=node_exporter.go:185 level=warn msg="Node Exporter is running as root user. This exporter is designed to run as unpriviledged user, root is not required." <omitted>
もしターミナルを複数起動するのが手間ならば、適宜、バックグラウンドで実行しましょう。操作例は以下の通りです。
nohup ./node_exporter > /dev/null 2>&1 &
動作確認
Node exporterによってメトリックがHTTPによって公開されているかどうかを確認します。以下のようなcurlコマンドを実行しメトリックを取得できるかどうかを確認します。
curl http://localhost:9100/metrics
curlコマンドの実行結果をよく観察すると、diskやcpuなどOSに関する情報を取得できている事が分かるかと思います。以下に出力の一部を載せます。
[root@linux010 ~]# curl http://localhost:9100/metrics <omitted> # HELP node_cpu_seconds_total Seconds the CPUs spent in each mode. # TYPE node_cpu_seconds_total counter node_cpu_seconds_total{cpu="0",mode="idle"} 2950.73 node_cpu_seconds_total{cpu="0",mode="iowait"} 84.4 node_cpu_seconds_total{cpu="0",mode="irq"} 4.58 node_cpu_seconds_total{cpu="0",mode="nice"} 1.1 node_cpu_seconds_total{cpu="0",mode="softirq"} 1.82 node_cpu_seconds_total{cpu="0",mode="steal"} 0 node_cpu_seconds_total{cpu="0",mode="system"} 15.89 node_cpu_seconds_total{cpu="0",mode="user"} 23.23 <omitted>
Prometheusとの連携
Promethesで監視する対象はprometheus.ymlに記述します。以下のようにtcp9090(prometheus)とtcp9100(node_exporter)を監視するような定義を作成します。
cd ~/work/prometheus-2.35.0.linux-amd64 cat << EOF > prometheus.yml scrape_configs: - job_name: prometheus static_configs: - targets: - localhost:9090 - job_name: node static_configs: - targets: - localhost:9100 EOF
Prometheusを起動します。
./prometheus
監視対象ページ(http://<ip_addr>:9090/targets)を表示すると、prometheusとnodeの2つを監視している事が分かります。
グラフ描画ページ(http://<ip_addr>:9090/graph)を表示します。検索窓に監視項目(例:node_cpu_seconds_total)を入力し、「Graph」を押下します。すると、監視結果がグラフ化される事が分かります。