Prometheus〜大規模なシステムを監視可能なOSS〜
Prometheusとは、LinuxやWindowsで利用できるオープンソースの監視システムです。オープンソースの監視システムには、ログ監視ができる「Zabbix」やネットワーク監視や監視したデータをグラフ化することができる「Cacti」、コマンドラインからでも監視が実行できる「Icinga2」など様々な監視システムがあり、それぞれに特徴がありますが、Prometheusもその1つです。ここでは、監視システムのPrometheusについて紹介します。
Prometheusとは
Prometheus(プロメテウス)とは、オープンソースソフトウェアの監視システムです。Prometheusの言語は、Googleで開発されたGO言語で書かれています。Apache License 2.0のもとで、オープンソースソフトウェアとして公開されています。最初は音楽配信サイトのSoundCloudにより開発・構築されたシステムであり、2012年に開始されてから多くの会社や組織にPrometheusが採用されてきました。現在は、単独のオープンソースプロジェクトとして、どの企業からも独立してコミュニティが維持されています。Prometheusは、2016年にKubernetesに続く2番目のホストプロジェクトとしてCloud Native Computing Foundationに参加しています。Prometheusは、監視対象の数が多いシステムや動的に監視対象が変化するシステムに対応できる監視ソフトウェアとして注目されています。
Prometheusの特徴
Prometheusは以下の特徴があります。
取得したデータを時系列データとして扱う
Prometheusは、取得したすべてのデータを時系列データとして保存します。時系列データは、メトリック名とラベルと呼ばれるキー/値ペアにより識別されます。また取得したデータは、PrometheusのウェブUIで参照することができます。
収集したデータはPromQLで表示できる
PromQL(Prometheus Query Language)とは、時系列データを取得・集約するクエリ言語です。Prometheus は、このクエリ言語を利用してデータベースからデータの表示を行います。クエリの結果はウェブUIで集計表やグラフ形式で表示することが可能です。
監視対象を動的に検出できる
監視対象は、Prometheusの設定ファイルで指定します。Prometheusには、サービス検知機能という機能があります。この機能は、一定のルールに従ってサービスを自動的に検知し、監視対象として自動で追加・削除することができます。そのため、サーバの増減があるようなシステムでも、動的に対象サーバを検知し、監視を行うことが可能です。システム管理者は、いちいち監視対象を変更する必要がなくなり、管理が楽になります。
グラフ化やダッシュボードをサポート
Prometheusは、データの可視化を行うことができます。最新のデータをグラフ表示することで、監視対象の状況をすぐに確認できるようになります。Prometheusを利用することで、システムの異常や、長期的な負荷の増減を簡単に把握できるので、安心してシステムを運用できるようになります。
Prometheusのコンポーネント
Prometheusは、機能ごとに別々のコンポーネントで構成されています。すべての各コンポーネントでファイルを簡単にインストールするだけで起動でき、ソフトウェアのパッケージをダウンロードして起動するだけで監視を開始することができます。また、Dockerなどのコンテナやクラスタで起動することも可能です。Prometheusのシステム構成例は以下の図で表しています。
まず、メインコンポーネントであるPrometheusサーバがあります。Prometheusサーバは、Prometheusから監視対象に向けてHTTPリクエストを送信するHTTPプルにより、監視対象から時系列データを取得します。
次に、Pushgatewayという監視対象からのHTTPプッシュをPrometheusサーバに中継するための中間ゲートウェイがあります。HTTPプッシュとは、監視対象からPushgatewayに向けてHTTPリクエストを送信(push)することをいいます。
またExporterという監視対象サーバの情報を取得する用のコンポーネントがあります。Exporterは、node_exporter(ハードウェアやOSのメトリック情報やリソースを取得)やmysqld_exporter(MySQLサーバのメトリック情報を取得)等を使用することができます。より詳しい内容は、Prometheus調査報告書の中でも解説しています。
その他に、Prometheusは、アラートを集約するOSSのAlertmanagerや、時系列データを可視化するOSSのGrafanaとも連携することが可能です。システム管理者は、AlertmanagerにアクセスしてWebUIからアラートを確認したり、直接Grafanaに接続してダッシュボードを確認したりすることができます。
他のシステムとの連携
以下では、Prometheusと連携可能なAlertmanagerとGrafanaについて詳しく解説します。
Alertmanagerとの連携
Alertmanagerとは、アラートを管理するオープンソースソフトウェアです。アラートの通知だけでなく、指定した複数のアラートを同一のグループとして認識させ、アラートの集約を行うことが可能です。
Prometheusは、取得したデータの閾値監視等によりアラートを発行することができます。Prometheusが発行したアラートのリクエストは、Alertmanagerを通して通知が行われます。そして集約されたアラートは、様々な方法で通知・処理することができます。Eメールに送信することはもちろん、例えばwebhookやPagerDuty、Pushover、チャットシステムのSlackやWeChatなど、ユーザーが利用しているアプリにも通知することが可能です。PrometheusのウェブUIでは、登録したアラートルールやアラートの状態を確認することもできます。
Grafanaとの連携
Grafanaとは、OSSのダッシュボードツールです。ダッシュボードはBIツールの機能の1つで、蓄積したデータを加工し分かりやすく表示することができます。様々な情報の分析を効率化し、ビジネスにおける最適な判断を助けてくれるツールです。GrafanaのダッシュボードはWebインタフェースから利用できます。また、Grafanaでは表やグラフの作成・配置、操作を簡単に行うことができ、時系列データの解析を行う時に特に強みを発揮します。
Prometheusでは、保存した時系列データをGrafanaを使用してグラフ表示や分析を行うことができます。Prometheus自体にもデフォルトのWebUIはありますが、非常にシンプルなものであるため、Grafanaのようなダッシュボードツールを使うことでよりモニタリングしやすくなります。さらに、GrafanaにはPrometheus専用のテンプレートが提供されています。そのため、Grafanaからログインして簡単にPrometheusのダッシュボードを作成することができます。
なお、Prometheusの他、ZabbixやCactiなどの監視サーバ・監視ツール比較ページについては「OSSのおすすめ監視サーバ・監視ツール比較」で比較しています。
監視対象の設定方法
Prometheusは監視対象のシステムやアプリケーションのサーバの追加方法として、クライアント自身が追加する方法と、サービス検知機能を利用して自動的に監視対象を追加する方法があります。ここではその設定方法について説明します。
クライアントが監視対象を追加する場合
設定ファイルから監視を行う対象のサーバのIPアドレスを指定すると、監視対象を追加することができます。追加した監視対象のサーバはPrometheusのWebUIから確認することができます。
自動で監視対象を追加する場合
Prometheusには、サービス検知機能と呼ばれる、自動で監視対象を検知・追加する機能が存在します。自動で監視対象を追加する手段として、例えば以下のような方法があります。
AWSのEC2インスタンスから追加
AWSのEC2を利用している場合、Prometheusは、EC2インスタンスを利用して監視対象を自動で追加することができます。そのため、EC2インスタンスの増加・減少に併せて、自動的にPrometheusの監視対象が変更されるようになります。
DNSクエリから追加
Prometheusは、DNSのクエリを行った際に記録されるSRVレコードを参照し、SRVレコードに登録されているサーバを自動的に監視対象として追加することができます。そのため、監視対象ではないサーバからPrometheusを利用しているシステムにDNSのクエリが送信された際に、PrometheusはSRVレコードから自動的に送信したサーバを監視対象に追加することができます。
Consulと連携する
Consulとはサービスディスカバリ(どんなサービスがどのように稼働しているかの情報を取得すること)を行うオープンソースのツールです。ConsulとPrometheusを連携させることで、Consulのサービスディスカバリによって得たサーバ情報からPrometheusが自動で監視対象を検知し、監視対象を追加することができます。
その他にも、KubernetesのREST APIを利用して監視対象を検知する方法や、AzureのVM(仮想サーバ)上でPrometheusを構築することで、自動で監視対象を検知する方法などもあります。
取得データの参照方法
Prometheusで取得したデータは、WebUIから参照することができます。取得した時系列データは、メトリック名とラベルと呼ばれるキー/値ペアにより識別されており、これらを設定することでデータの参照や絞り込みを行うことができます。
また、計算式や関数を入力することで、取得したデータの平均値や最大値も参照することができます。ただし、計算式や関数を頻繁に利用する場合、毎回の入力作業に時間がかかってしまうため、その対処法としてレコーディングルールという機能が存在します。
レコーディングルールとは
レコーディングルールとは、あらかじめ計算式や関数を設定しておくことで、取得データを自動で計算する機能のことです。レコーディングルールに設定した計算の結果は、新しい時系列データとして保存されます。頻繁に使用する計算式をあらかじめレコーディングルールに設定しておくことで、毎回計算式を入力する必要がなくなります。レコーディングルールで作成されたデータは、他で取得した時系列データと同様にWebUIから参照することができます。
デージーネットの取り組み
Prometheusには、設定を行うためのウェブUIは存在しないため、頻繁に監視の操作を行うようなシステムには適しません。しかしクラウド環境やコンテナ環境などで大量のホストが存在するシステムや、同様に動的にサーバが増減するようなシステムには有効で便利に利用できます。デージーネットでは、Prometheusの他にもZabbixやCactiなど様々な監視システムの構築サービスを行っています。これらの監視ソフトウェアを含むITソリューションを利用してお客様のご要望や問題にあわせた監視システムを提案し、構築するなど柔軟に対応することが可能です。デージーネットで構築したシステムは、Open Smart Assistanceという導入後の保守サポートも行っています。
インストール方法やセットアップ、各種設定方法・基本の手順・ガイドなど詳細記事は、Prometheus調査報告書で説明しています。調査報告書は無料資料ダウンロードからダウンロードができます。
「情報の一覧」
Prometheus調査報告書
Prometheusは、監視対象の数が多いシステムや動的に監視対象が変化するシステムに対応できる監視ソフトウェアとして、2012 年に利用開始から広く知られています。本書は、Prometheusについて調査した内容をまとめて解説したものです。
Zabbix〜ログ監視も可能なOSSの監視ツール〜
Zabbixとは、サーバー、ネットワーク、アプリケーションを集中監視するための統合監視ソフトウェアです。Zabbixは、統合監視に必要な監視、障害検知、通知機能を備え、多数のプラットフォームに対応しています。そのため、Zabbixを導入することでシステム全体を監視することが可能です。
Cacti〜監視とグラフ生成のOSS〜
Cactiとは、ネットワーク監視、グラフ生成のソフトウェアです。Cactiをインストールし導入することで、サーバやネットワーク機器のネットワークトラフィック、CPU使用率、空きメモリ量、ディスク使用率などを監視し、グラフ化することができます。
Icinga2〜コマンドでも使える監視OSS〜
Icinga2は、システム監視のためのオープンソースソフトウェアです。Icinga2では、WEBインタフェースだけでなくコマンドラインでも監視の設定を行うことができ、大量の監視も行うことができます。Icinga2のWEBインタフェースはデージーネットで日本語対応を行っています。
OSSのアラート管理〜Alertmanager〜
アラート機能は重要な役割を担っており、システム管理者に無駄なく、効率よく障害対応できるためのアラート管理の仕組みが必要になります。ここでは、オープンソースソフトウェアのアラート管理システムAlertmanagerを紹介します。
OSSのおすすめ監視サーバ・監視ツール比較21選
サーバを効率的に管理するのに欠かせない監視サーバですが、様々なソフトウェアがリリースされています。監視サーバは、以前は製品を利用することが多い分野でした。しかし、最近ではオープンソースのソフトウェアの機能が向上し、オープンソースソフトウェアを使う場合も多くなりました。ここでは、OSSの監視サーバの選定ポイントを紹介し、いくつかの監視サーバソフトウェアの比較をしてみます。