よくある質問・用語集

  • もっと調べる
  • どうやって使う?

Prometheusとは

Prometheus(プロメテウス)とは、サーバのアクセス状況などシステムの動的な負荷を管理するOSS(オープンソースソフトウェア)のシステムである。Prometheusは、サーバのリソースの使用状況など各種メトリックを収集して、システム全体にかかる負担を監視する。Prometheusは、監視対象の数が多い場合や、動的に監視対象が変化するようなスケーラブルな環境のリソース監視に適した管理システムである。Windows、Linuxをはじめ様々なOSに対応しており、Prometheusを動作させることができる。

Prometheusの歴史

Prometheusは、2012年に音楽配信サイトのSoundCloudにより開発されたシステムである。PrometheusはApache License 2.0のもとで、OSSとして公開されている。2016年にKubernetesに続く2番目のホストプロジェクトとしてCloud NativeComputing Foundationに参加している。

Prometheusの特徴

次にPrometheusの特徴を紹介する。主な特徴は以下の通りである。

監視対象を動的に検出できる

Prometheusは一定のルールに従ってサービスを自動的に検知し、監視対象とするサーバを自動的に追加・削除するサービス検知機能がある。アクセスの集中などサービスの負荷によってサーバの増減が発生するシステムでも、Prometheusが動的に対象サーバを検知し、監視を行うことができる。

データの可視化ができる

Prometheusはデータをグラフ表示することで、監視対象ごとに状況を確認できる。システムの異常や、長期的な負荷の増減を簡単に把握できるので、安心してシステムを運用することができる。

簡単に導入することができる

Prometheusは複数のコンポーネントで構成されているが、すべてのコンポーネントを簡単にインストールして起動することができる。ソフトウェアのパッケージをダウンロードして起動するだけで監視を開始することができるので、別途データベースを用意する必要がない。また、Dockerなどのコンテナ環境で起動することも可能である。自分でソースコードから構築することも可能だが、その場合Go環境の構築が必要であり、その上アップデート時にその都度作業、処理が必要であるため一般的に推奨はされていない。

所得したデータを時系列データとして扱うことができる

Prometheusは取得したすべてのデータを時系列データとして保存する。各時系列データは、メトリック名とラベルと呼ばれるキー/値ペアにより識別される。また取得したデータは、PrometheusのウェブUIで参照することができる。この結果は、Prometheus Expression Browserにグラフまたは表形式のデータとして表示するか、HTTP APIを使用してGrafana等で表示することもできる。

収集したデータをPromQLで表示する

PromQL(Prometheus Query Language)とは、Prometheusの時系列データを取得・集約するクエリ言語である。Prometheusでは、このクエリ言語を利用してデータ表示を行うことができる。例えば取得した時系列データから最小値や最大値、平均値を計算したり、演算したりできる。Prometheusでは、複雑なクエリ言語を含む演算結果をウェブUIで表やグラフ形式で表示することができる。

Prometheusのアーキテクチャ

Prometheusは機能ごとに別々のコンポーネントで構成されている。Prometheusはデフォルトではローカルのストレージを利用してデータの蓄積を行っている。ストレージに関して、Prometheusは複数のマシンを利用したクラスタストレージは提供していない。以下では具体的なコンポーネントを紹介する。

  • Prometheusサーバ

    Prometheusのメインコンポーネントであり、HTTPプルにより監視対象から時系列データを取得する。

  • Pushgateway

    監視対象からHTTPプッシュを使ってPrometheusサーバに取得したデータの中継を実行するための中間ゲートウェイである。

  • Exporter(node_exporter、mysqld_exporter等)

    監視対象サーバで起動してPrometheusサーバから接続することで、監視対象サーバの情報を取得する。node_exporter(ハードウェアやOSのメトリック情報を取得)やmysqld_exporter(MySQLサーバのメトリック情報を取得)等のExporterを使用することができる。

Prometheusの使用方法

ここではPrometheusの使用方法について説明する。

監視対象の設定方法

Prometheusは監視対象のシステム、アプリケーションのサーバの追加方法としてクライアント自身が追加する方法と、サービス検知機能を利用して自動的に監視対象を追加することができる。ここではその設定方法について説明する。

クライアントが監視対象を追加する場合

設定ファイルを開き、そこから監視を行う対象のサーバのIPアドレスを指定すると、監視対象を追加することができる。追加した監視対象のサーバについては、PrometheusのWebUIから確認することができる。

自動で監視対象を追加する場合

Prometheusには、サービス検知機能という自動で監視対象を検知し、監視対象を追加する機能が存在する。ここではPrometheusが自動で監視対象を追加する手段を一部紹介する。

AWSのEC2インスタンスから監視対象を自動で追加する

AWSのEC2を利用している場合、PrometheusがEC2インスタンスを利用して、監視対象を自動で追加することができる。EC2インスタンスに監視用のexporterをインストールし、インスタンスのタグにprodとstgを設定することで、PrometheusがEC2インスタンスを監視対象として検知する。そのため、EC2インスタンスの増加、減少に併せて、自動的にPrometheusの監視対象が変更される。

DNSのクエリから監視対象を追加する

DNSのクエリを行った際に記録されるSRVレコードを参照し、PrometheusがSRVレコードに登録されているサーバを、自動的に監視対象として追加することができる。そのため、監視対象ではないサーバからPrometheusを利用しているシステムにDNSのクエリが送信された際に、PrometheusがSRVレコードから自動的に送信したサーバを監視対象に追加する。

Consulと連携する

Consulとはサービスディスカバリ(どんなサービスがどのように稼働しているかの情報を取得すること)を行うオープンソースのツールである。ConsulとPrometheusを連携させることで、Consulのサービスディスカバリによって得たサーバ情報からPrometheusが自動で監視対象を検知し、監視対象を追加することができる。

これらの方法の他にもKubernetesのREST APIを利用して監視対象を検知する方法や、AzureのVM(仮想サーバ)上でPrometheusを構築することで、自動で監視対象を検知することもできる。

取得データの参照方法

取得したデータの参照はPrometheusのWebUIから行うことができる。前提としてPrometheusが取得した時系列データは、メトリック名とラベルと呼ばれるキー/値ペアにより識別されている。Prometheusのサーバに接続しExpressionという欄にメトリック名を入力することで、指定したメトリック名のデータを参照することができる。例えばメトリック名node_load1を入力することで、所得した過去1分間のロードアベレージの値を表示することができる。またメトリック名だけでなく、ラベルも指定することで参照するデータの絞り込みを行うことも可能である。

その他にもExpressionの欄に計算式や関数を入力することで、取得したデータの平均値や最大値を参照することができる。しかし計算式や関数を頻繁に利用する際、毎回入力していると時間がかかってしまう。その対処法としてPrometheusにはレコーディングルールという機能が存在する。

レコーディングルールとは

レコーディングルールとは、あらかじめ計算式や関数を設定することで取得したデータを自動で計算する機能である。レコーディングルールに設定した計算の結果は、新しい時系列データとして保存される。頻繁に使用する計算式をあらかじめレコーディングルールに設定することで、毎回計算式を入力する必要がなくなる。レコーディングルールで作成されたデータは、他の所得した時系列データと同様にWebUIから参照することができる。

Alertmanagerとの連携

Prometheusは、監視しているシステムから取得した数値に異常がある場合に管理者に対してアラートを発行することができる。Prometheusがアラートのリクエストを行い、Alertmanagerを通してシステム管理者に向けてアラートの通知が送信される。送信方法はEメールをはじめ、webhookやPagerDuty、Pushover、チャットシステムのSlackやWeChatなどで通知を送信することが可能である。Alertmanagerは、アラートの通知だけでなく、指定した複数のアラート集約を行うことができる。例えばシステム障害が発生した場合、重複した内容のアラートを集約してシステム管理者に通知することでシステム管理者の負担を軽減する。また、PrometheusのウェブUIで指定したアラートルールやアラートの状態を確認することもできる。

Grafanaとの連携

Prometheusが保存した時系列データは、Grafanaという可視化ツールを使用してグラフ表示を行うことができる。Prometheusには、デフォルトのWebUIがあるが非常にシンプルなものである。GrafanaにはPrometheus専用のテンプレートが提供されているので、テンプレートを選択することで容易にPrometheusのダッシュボードを作成しモニタリングすることができる。

デージーネットの取り組み

PrometheusはZabbixやCactiのような設定を行うためのWebUIが無いので、オペレータが頻繁に監視の操作を行うようなシステムには適していない。デージーネットでは、PrometheusだけでなくZabbixやCactiなど様々な監視システムの構築サービスを行っており、お客様のご要望や用途にあわせて最適な監視システムを提案し、構築している。また、デージーネットで構築したシステムは、Open Smart Assistanceという導入後の保守サポートも行っている。Prometheusのインストール方法や各種設定方法について「Prometheus調査報告書」にまとめ、掲載している。

【カテゴリ】:オープンソースソフトウェア  システム監視  

  • もっと調べる
  • どうやって使う?

【共催セミナー】研修管理・運用の負担を軽減 学習管理システム(LMS)紹介セミナー

日程: 5月23日(木)Webセミナー「BigBlueButton」を使用します。
内容: 社内研修の課題を解決できる学習管理システム(LMS)について紹介します。
ご興味のあるかたはぜひご参加ください。

セミナー申込

関連用語

Prometheusに関連するページ(事例など)

Prometheusとは先頭へ