お金をかけずにサーバーの勉強をしよう

Prometheusインストール

2024年5月8日

メニューへ戻る

サーバーメトリクス収集に特化した OSSベースのデータベース Prometheusの環境を作ってみましょう。

サーバー運用をやっていると、サーバーの状態が時間とともにどうなっていたのか知りたくなるものです。

パフォーマンス低下や障害発生時の原因調査・サーバーリプレース時の新規導入ハードウェアのサイジングが良い例でしょう。

この場合サーバーの状態を表す諸々の数値、例えば CPUの使用率などですが、これらを総称してサーバーメトリクスと呼びます。

サーバーエンジニアには、サーバーメトリクスを時系列で記録してグラフ化して見たいという要求がありますね。

Prometheusはそうした要求に応えるべく、サーバーメトリクスを時系列に記録し、参照するのが得意なアーキテクチャを持ったデータベースです。

ここでは、Ubuntu Serverに Prometheusを導入し、Windows Server 2022のサーバーメトリクスを取得してグラフ化する例をやってみます。

Prometheusの本家サイトはこちらです。
Prometheus


1.環境

●Prometheusをインストールする環境
Ubuntu Server 24.04
Prometheus 2.45.3

●監視されるサーバー
Windows Server 2022
Prometheusの Windows Exporter

Ubuntu Serverのインストールは「Ubuntu 24.04 Server インストール」に、 Windows Server 2022のインストールは「Windows Server 2022 インストール」にそれぞれ書いています。


2.Ubuntuでのパッケージ確認

Promethusのサイトからパッケージをダウンロードできるんですが、Ubuntuのパッケージリポジトリにあるならそれを使うに越したことはありません。

いつものように snap・apt両方のパッケージリポジトリにあるか確認してみます。

snapのほう。

subro@UbuntuServer2404-2:~$ snap info prometheus
name:      prometheus
summary:   The Prometheus monitoring system and time series database
publisher: Canonical✓
store-url: https://snapcraft.io/prometheus
contact:   https://launchpad.net/prometheus-snap
license:   Apache-2.0
description: |
  Prometheus, a Cloud Native Computing Foundation project, is a systems and service monitoring
  system. It collects metrics from configured targets at given intervals, evaluates rule
  expressions,
  displays the results, and can trigger alerts when specified conditions are observed.

  This is an unofficial snap which builds and re-packs the source provided by the Prometheus team
  (https://github.com/prometheus/prometheus).
snap-id: We2QH1ClwGL6V88RJRWuZPWaBBPuzWPL
channels:
  2/stable:         2.37.0 2022-08-23  (86) 74MB -
  2/candidate:      2.47.1 2023-10-10 (110) 86MB -
  2/beta:           ↑
  2/edge:           2.51.2 2024-04-11 (115) 91MB -
  latest/stable:    1.8.2  2018-01-10  (18) 14MB -
  latest/candidate: 2.39.1 2022-10-13 (100) 77MB -
  latest/beta:      1.8.2  2017-12-06  (18) 14MB -
  latest/edge:      1.8.2  2017-12-06  (18) 14MB -
  rock/stable:      –
  rock/candidate:   –
  rock/beta:        –
  rock/edge:        2.33.5 2022-03-17  (81) 67MB -
  20.04/stable:     2.20.1 2021-06-09  (37) 51MB -
  20.04/candidate:  ↑
  20.04/beta:       ↑
  20.04/edge:       2.32.1 2022-01-20  (73) 66MB -

2.37.0 です。

aptのほう。

subro@UbuntuServer2404-2:~$ apt search prometheus
〜〜〜 省略 〜〜〜

prometheus/noble 2.45.3+ds-2build1 amd64
  monitoring system and time series database

〜〜〜 省略 〜〜〜

こちらは 2.45.3 です。

Prometheusのダウンロードページで最新バージョンを調べます。
DOWNLOAD

2024年5月8日時点で 2.51.2でした。

メジャーバージョンが変わってるくらいだと最新にしたいところですが、ちょっと古いだけなので aptのリポジトリから取るようにします。


3.インストール

それでは Ubuntuの aptリポジトリからインストールします。

subro@UbuntuServer2404-2:~$ sudo apt install -y prometheus
〜〜〜 特殊性がないので省略 〜〜〜

結構多くのライブラリと一緒にインストールできました。


4.WEBブラウザでアクセス

Prometheusの公式ドキュメントにインストール方法と一緒に書かれています。
Getting started

このドキュメントの以下の部分に「自サーバー(Ubuntu Server)の監視をしても余り意味はないが良い例になるから」と言っており、設定ファイル [prometheus.yml] はそのままで自サーバーを監視するようになってるようです。
Configuring Prometheus to monitor itself

手順では [http://localhost:9090/metrics] でメトリクスを取れてるか確認できると書いてありますが、実際は [0.0.0.0:9090] にバインドされていましたので、他のノードからもアクセスできます。

試しにクライアントである Lubuntuの Firefoxでアクセスしてみました。
私の環境では [http://UbuntuServer2404-2:9090/metrics] です。
Prometheus 自サーバーのメトリクス取得
何か取れていますね。

なお URLの [metrics] を [graph] に変えるとダッシュボードが出ます。 私の環境だと [http://UbuntuServer2404-2:9090/graph] です。

こんな風。
Prometheus ダッシュボード

インストールはこれで OKです。
パッケージからのインストールでしたから簡単でした。


5.Prometheusがデータを収集する構成

ここで Prometheusがデータを集める時の構成について触れておきます。

Prometheusは大まかに以下 2つのプログラムから構成されています。

  1. データベース(かつデータを取りに行く機能)のプログラム
  2. 「エクスポーター」と呼ばれるメトリクス収集するプログラム

データベース側が主に見えますが、TCPのクライアント/サーバーという観念から言うと Bがサーバープログラムで Aがクライアントプログラムになります。

図にするとこういう順序で動いています。
Prometheus構成
①メトリクス取得を依頼
②メトリクス取得
③メトリクスを返す
④メトリクスを送る

こういうやり方を「プル型」と言います。
これに対して③④しかないようなやり方を「プッシュ型」と言います。

Prometheusは OSやデータベース製品毎に様々なエクスポーターを出しています。
必要に応じてそれらのエクスポーターを入手して監視される側にインストールするなどの環境構築が必要になります。

エクスポーターは Exporters and integrations にリストがあってかなりの数になりますが、Prometheusのオフィシャルなものは少なく第三者が作成したものが多いです。

Prometheusのプロトコルがシンプルでエクスポーターを作り易いからだと思いますが、監視される側にインストールするタイプのものについては出所が怪しければ、ファイアウォールなどでのセキュリティ対策をしっかりやる必要があるでしょう。


6.Windows Exporterインストール

Windows Server 2022のメトリクスを取得するためエクスポーターを導入します。

Windows用のエクスポーターとして「Windows Exporter」があります。

見てみるとOSだけではなく SQL Serverなど結構な種類の値を拾える事が分かります。
ここら辺りから、Windowsのパフォーマンスカウンタの機能を介して値を取得してるんだろうと思いました。

こんな感じでしょうか。
Prometheus Windows Expoterの構成

以下のページで MSI形式のインストールファイルがありますので 64bit用のものをダウンロードします。
2024年5月8日現在では、0.25.1が最新でした。
ometheus-community/windows_exporter

[windows_exporter-0.25.1-amd64.msiファイルをダウンロードし、Windows Server 2022に持っていきます。

インストール方法が「Installation」の段落にあります。

MSIファイルをダブルクリックするだけでもインストールできますが、デフォルト設定だと取得できるメトリクスが少ないので、コマンドラインからのインストールをして対象のメトリクスを増やします(cpu,memory,mssql,net)。

C:\Users\Administrator>msiexec /i C:\Users\Administrator\Desktop\windows_exporter-0.25.1-amd64.msi ENABLED_COLLECTORS=os,service,cpu,memory,mssql,net

何も表示されないままインストールが完了してしまいました。
確認してみたところ、以下2つのセッティングまで済んでいました。

  1. Windowsサービスとして [windows_exporter] サービスを登録
  2. セキュリティが強化されたWindows Defender ファイアウォールの [受信の規則] に「windows_exporter (HTTP 9182)」を登録

2についてデフォルト設定では [0.0.0.0:9182 (TCP)] での待受けをしています。

セキュリティを鑑みるとアクセス元IPの限定(Prometheusサーバーだけ)するのと、許可がエクスポーターのプログラムに対して行われている(プログラムが使用するポートに追従する)のを [9182/tcp] だけに固定するようにした方が良さそうですね。

WEBブラウザでエクスポーターにアクセスするとこんな感じのものが取れています。
私の環境では [http://Win2022-1:9182/metrics] です。
Windows Expoterのメトリクス

これで監視される側の Windows Server 2022の設定は OKです。


6.Prometheusの監視対象追加

Prometheusのサーバー (Ubuntu Server)の作業です。

再び Prometheusインストール手順の「Configure Prometheus to monitor the sample targets」の段落に戻ります。

Prometheusの設定ファイル [/etc/prometheus/prometheus.yml] を編集し、メトリクス取得対象に Windows Server 2022のマシン名か IPアドレスを追加してやります。


  # The job name is added as a label `job=` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # Override the global default and scrape targets from this job every 5 seconds.
    scrape_interval: 5s
    scrape_timeout: 5s

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ['localhost:9090']

  - job_name: node
    # If prometheus-node-exporter is installed, grab stats about the local
    # machine by default.
    static_configs:
      - targets: ['localhost:9100']

     >↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

scrape_configs:
  # The job name is added as a label `job=` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # Override the global default and scrape targets from this job every 5 seconds.
    scrape_interval: 5s
    scrape_timeout: 5s

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ['localhost:9090',>'Win2022-1:9182']

  - job_name: node
    # If prometheus-node-exporter is installed, grab stats about the local
    # machine by default.
    static_configs:
      - targets: ['localhost:9100']

Prometheusを起動します。

promet@UbuntuServer2404-2:~$ >sudo systemctl restart prometheus

何も出ませんが、再起動しています。

これで Windows Server 2022のメトリクスも Prometheusのデータベースに次々と取り込まれているはずです。

WEBブラウザで CPUの負荷情報をグラフにしてみましょう。
私の環境では [http://UbuntuServer2404-2:9090/graph] です。
これです。
Prometheus ダッシュボード

エクスポーターでどういう値を取っているか、それを Prometheusのデータベースから検索する時の名前は何か、ということは各々のエクスポーターの説明にあります。
「Windows Exporter」の CPU負荷の説明にあった検索文字列をちょっと変えて、Prometheusに溜め込んだメトリクスを取得してグラフにします。

上の絵の [Expression] に入れる検索文字列を以下にして、Executeを押します。
sum by (mode) (irate(windows_cpu_time_total[5m]))

下に取得したメトリクスの値が出ました。
コンソールタブでメトリクスの値がでる図

そしたら [Graph] タブを選んでください。

このようなグラフができました。
Prometheus Windows Expoterのグラフ
CPU使用率だから、積み上げ型の折れ線グラフの方が良いですねぇ…。


==========
Prometheusを初めて触ったのは出たばかりの頃でまだまだ荒削りだったし、エクスポーターも少なかった覚えがあります。

今では随分と洗練され、エクスポーターの多さが特徴になる程で、海外では結構流行ってるんだと思わせられます。

そして何よりもアーキテクチャがシンプルで導入が簡単なのが良いと思います。

Prometheusのコンセプトは「Prometheusはメトリクスを集めることに集中するので、それをどう活用するかは別のソフトで勝手にやってくれ。」なので、ここまでシンプルになっているんだと思います。

なお「どうやって活用するか」については、Grafanaというダッシュボードツールが必ず出てきますので、今度はそれを使ってもっとカッコイイグラフを作ってみようと思います。


両方ともちょっと古くなっちゃったかな〜。


こちらはサーバー監視全般のコンセプトの良書です。