Ubuntu Weekly Recipe

第562回 モニタリングツールPrometheusを使う

この記事を読むのに必要な時間:およそ 6 分

今回はモニタリングツールであるPrometheusを紹介します。

Prometheusとは

Prometheusは,もともとSoundCloudに依って開発されたモニタリングツールです。他のモニタリングツールにない特徴として,後述するクライアントであるExporterからメトリック(データ)を自分で取得しにいくpull型の構造を持っています注1)⁠

注1
この点はよく挙げられますが,Prometheus自体はpull型であることは特別に重要な点ではないと述べています。

Prometheus自体は大雑把に以下の3つの部分から構成されています。

  • メトリック取得対象(Exporter)を見つけ,取得する部分
  • 取得したメトリックを蓄える時系列データベース
  • 時系列データベースに蓄えたメトリックを検索するためのエンドポイント(HTTPサーバ)

Prometheus自体はgolangで書かれているため,ただ一つのバイナリを起動するのみで動作します。このためコンテナとの相性がよく,またパッケージの依存関係などを考慮する必要がないため既存の環境で試しに導入するハードルが比較的低いと言えます。

Prometheusのインストール

Ubuntuでは主に以下の方法でPrometheusがインストールできます。

aptレポジトリとsnapパッケージにあるPrometheusはいずれもバージョンが若干古いので,今回は手動で2019年3月時点で最新のver. 2.8.0のインストールを行います。前述のとおりにPrometheusそのものはバイナリ一つ起動すれば良いため,基本的にはバイナリと設定ファイル,daemon化のためのsystemd service unit fileの設置のみで作業が済みます注2)⁠

注2
前提として,時系列情報を扱う必要上,サーバであるPrometheusとクライアントであるExrpoterいずれもすべて時刻が同期している必要性があります。

まず,Prometheusを動作させるユーザとグループを作成します。

$ sudo groupadd prometheus
$ sudo useradd -d /var/lib/prometheus -g prometheus -s /bin/false -m prometheus

upstreamよりバイナリをダウンロードします。実際には以下が含まれます。

  • Promehteus本体のバイナリ
  • 設定ファイルのサンプル(prometheus.yml)
  • ユーティリティであるpromtoolのバイナリ
  • エンドポイントの画面を提供するconsole template(consoles)とそのライブラリ(console_libraries)
$ wget https://github.com/prometheus/prometheus/releases/download/v2.8.0/prometheus-2.8.0.linux-amd64.tar.gz
$ tar xf prometheus-2.8.0.linux-amd64.tar.gz
$ ls -1 prometheus-2.8.0.linux-amd64
console_libraries
consoles
LICENSE
NOTICE
prometheus
prometheus.yml
promtool

Prometheusとpromtoolのバイナリをパスが通った場所へ設置します。

$ sudo cp prometheus promtool /sbin/
$ sudo chown root:root /sbin/prometheus /sbin/promtool

設定ファイルディレクトリと時系列データベースのデータディレクトリを作成します。

$ sudo mkdir /etc/prometheus
$ sudo mkdir /var/lib/prometheus/data
$ sudo chown -R prometheus:prometheus /var/lib/prometheus/data

サンプルの設定ファイルと,console templateを設定ファイルディレクトリへ設置します。

$ sudo cp -r prometheus.yml consoles console_libraries /etc/prometheus/
$ sudo chown -R root:prometheus /etc/prometheus

最後に/etc/systemd/system/prometheus.serviceへsystemdのservice unit fileを設置します。

[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs/introduction/overview/
After=network-online.target

[Service]
User=prometheus
ExecStart=/sbin/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/var/lib/prometheus/data --web.console.templates=/etc/prometheus/consoles  --web.console.libraries=/etc/prometheus/console_libraries
ExecStop=/bin/kill -TERM ${MAINPID}
ExecReload=/bin/kill -HUP ${MAINPID}

[Install]
WantedBy=multi-user.target

更新したunit fileを読み込み,Prometheusの起動とその確認を行います。

$ systemctl daemon-reload
$ systemctl start prometheus.service
$ systemctl status prometheus.service

ブラウザでPrometheusが起動しているホストの9090番ポートへアクセスしてみましょう。

すると図1のようなダッシュボードが表示されるはずです。ダッシュボードからは後述のPromQLをクエリしたり,メトリック取得対象のリストや状態を確認できます。

図1 PrometheusのHTTPエンドポイントのダッシュボード

画像

また,consoles/prometheus.htmlへアクセスすると,先程設置したconsole templateによって生成されたPromehtuesのStatusが確認できます。

図2 Prometheusのconsole template

画像

著者プロフィール

上野竜一(うえのりゅういち)

Ubuntu Japanese Teamが参加するイベントに出入りしている人。パンダが好き。株式会社 創夢所属。

コメント

コメントの記入