2012年にSoundCloudが開発を始めたPrometheusは、世界的によく知られる無料のメトリクスモニタリングと集計ツールです。
メトリクスを時系列データに変換しながら、さまざまな処理を行います。Kubernetesでの使用が主ですが、他のさまざまなクラウドネイティブソフトウェア/ツールにも対応しています。
各時系列データにはタイムスタンプが付与されます。ラベルはオプションであり、メトリクスのキーと値を用いて構成されます。ラベルは簡単に収集・記録でき、今後の活用に役立ちます。特有の機能を備えているため、広く普及し、現在はCNCFの一部となっています。
Go言語で開発されており、Apache 2 Licenseの方針に従ってライセンスされています。オープンソースツールのため、ソースコードはGitHubで参照できます。これはクロスプラットフォーム対応のツールです。
2012年に生まれてから長い道のりを経て、Prometheusは非常に人気を博しています。ここでその歴史を簡単に見てみましょう。2012年にSoundCloudで開発され、2013年には主要なプロダクションモニタリングリソースとして正式にリリースされました。
さらに成長を続け、2016年にはCNCFに採択され、正式なインキュベーションプロジェクトとなりました。Prometheus以前にはKubernetesが同様の地位を確立しています。2016年7月に最初のアップデートであるPrometheus 1.0がリリースされ、2017年11月には2番目のアップデートも登場しました。
先述のとおり、Prometheusは主にメトリクスを扱います。必要なメトリクスにアクセスするため、公開されたHTTPエンドポイントが必要です。一般的には数値データのスクレイピングから始まり、スクレイピングが完了するとデータは時系列データとして取得され、ローカルデータベースに保存されます。データ量が多い場合は、リモートストレージを利用することもしばしばあります。
このツールにより、管理者や開発者はデータベース、ツール、アプリ、ネットワークなど、有名なウェブサイトのワークフロー維持に必要な本番環境のコンピュータリソースを管理できます。
ソースクエリを活用すると、メトリクスのラベルや名前でさらに定義される短命の時系列データを簡単に作成できます。クエリの生成にはPromQLが使用されます。PromQLは時系列に対応した言語のため、ソフトウェアは即時の時系列データを収集・集約できます。
また、PromQLはアラート条件の作成にも大いに役立ち、Slackやメールなど多彩なシステムへのメッセージ送信に利用できます。
処理・分析された時系列データは、後からウェブベースのインターフェイスで表示されます。データの可視化を重視しており、グラフ形式や表形式で表示されることが多いです。
主要な仮想化ツールと連携するために、APIが利用されることもよくあります。これにより、データ表示がよりインタラクティブになります。
無料のオープンソースツール GoTestWAF でWAFをテスト
Prometheusは複数のツールやコンポーネントを組み合わせたもので、それぞれが異なる役割を担っています。このツールを最大限活用するには、そのアーキテクチャや主要要素を理解しておくことが有益です。どの要素がどの作業を担当するのかを把握できるからです。
ここからは、Prometheusにおいて注目すべき要素を詳しく見ていきます。
主要なコンポーネントのひとつであるPrometheusサーバーは、メトリクスのスクレイピングと保存に使用されます。また、データソースのクエリに必要なモニタリングジョブのスケジューリングも担当します。このサーバーは1つ以上のScrape Configディレクティブを用いて、モニタリングジョブを設定します。
Scrape ConfigはYAMLのコンフィグファイルで処理されます。サーバーはSD(サービスディスカバリ)を使ってスクレイプ対象を検出します。要件に応じて、汎用的なAPIやファイルベースのSDなどと連携することが多いです。
サーバーはHTTPエンドポイントを扱うクライブラリを収集し、それらは後から複数のインストルメントされたアプリで利用されます。
この要素はサーバーにデータを提供します。基本的に、Prometheus Exporterはデータを収集するための埋め込み式インスツルメンテーションに依存しない重要な監視システムです。
Exporterは、複数のサードパーティシステムから対象メトリクスをエクスポートするために作られたサーバーとライブラリで構成されます。Prometheusアーキテクチャにおいて、実装が困難なインスツルメンテーションシステムを代替する理想的な手段です。
簡単に言うと、Exporterは同じ目的を共有する監視エージェントと定義されることが多いです。これらのエージェントはサードパーティシステムのメトリクスを収集し、サーバーを通じてアクセス可能にすることを目的としています。
これは、複数のシステムからプッシュが必要なメトリクスにアクセスするために使用されます。プル型インフラに対応していないメトリクスをPushgatewayが取得する場合が多いです。
Pushgatewayの代表的な使い方として、一時的に稼働するバッチタスクが挙げられます。これは、Prometheusがメトリクスをスクレイプする前に開始し、終了してしまうためです。Pushgatewayを使えば、こうしたメトリクスをプッシュして大事なデータを取りこぼさないようにできます。
SDによって、Exportersがどこで稼働しているかを特定できます。これにより、どのメトリクスを監視すべきかや反応しないメトリクスなど、大切な情報を把握できます。動的な環境において非常に重要です。
Client Libraryは、アプリのコードをインストルメントした後に生成されるメトリクスを収集するために使われます。Ruby、Go、Python、Javaに対応したクライブラリが公式にサポートされていますが、Dart、.Net、Haskell、C#、Rust、Lispなど、ほかの言語向けのクライブラリも存在します。
Prometheusソフトウェアを導入する際は、使用するクライブラリとアプリの言語が合っていることが重要です。これらが一致しないと、内部メトリクスの定義やエクスポートが難しくなります。
ScrapingはPrometheusの基本機能で、SDやリラベリングの後に実行されます。サービスの検出とスクレイプが完了すると、監視対象のリストが得られます。次にツールが行うのは、HTTPリクエストを送信してメトリクスを取得することです。リクエストがスクレイプされ、そのレスポンスが解析されたうえでストレージに保存されます。
スクレイピングは常に実行されており、10〜60秒の間隔で行われることが多いです。
Prometheus Kubernetesでは、収集したすべての時系列データを保存するストレージシステムが必要です。
主にローカルにデプロイされたカスタムデータベースを使用しており、Prometheus Dockerのような分散システムでも信頼性を保てます。
Prometheusのストレージはリリース以来、数多くの変更を経て、現在では1秒間に100万を超えるメトリクスやサンプルを処理できるようになっています。この高い処理能力のおかげで、サーバーは同時に何千ものマシンを監視できます。ストレージにはSSDが必要な場合もありますが、必須ではありません。
このツールでは、Grafanaを使ってインタラクティブなダッシュボードを作成できます。Grafanaには豊富な機能が備わっており、ダッシュボードを自由にカスタマイズできます。複数のサーバーを1つのダッシュボードに統合することも可能です。
HTTP APIが多用される中、アラートやAPIの管理を疎かにする余裕はありません。Prometheusには、Alertmanagerというシームレスなアラート管理ツールがあり、サーバーから自動的に送られるアラートを受け取って、即時の通知に変換します。これらの通知は主にチャットやメールの形で送られます。
人的な対応を制御し、不要な介入を防ぐ点で、APIセキュリティ上も非常に重要です。
Prometheusはクラウドネイティブなツールで、上手に使えば幅広いメトリクスや機能を監視・制御するのに役立ちます。ここでは主な例を紹介します。
Prometheusソフトウェアの典型的な用途は、継続稼働するサービスのメトリクスを収集することです。サービスのメトリクスを収集するだけでなく、HTTPベースのエンドポイントを介して、クライアントライブラリや手動設定を経由してアクセス可能にします。
このツールがサービスメトリクスの収集に好まれる理由は、データをシンプルに表示してくれるからです。各サービスメトリクスは1行単位で表示され、改行文字によってほかのメトリクスと区別されます。
サービスメトリクスはHTTPサーバー上にホスティング/公開されるため、Prometheusソフトウェアは保存されたメトリクスをスクレイプしたりクエリしたりできます。企業はよく、異なるホスト上でホスティングされているさまざまなサービスメトリクスをこのツールで管理します。
PrometheusのOSは、ホストに関するメトリクス情報を提供できます。たとえばハードディスクがいっぱいかどうかを把握できます。ホストメトリクスをより詳しく確認するには、OS情報を収集してHTTPアドレスに公開するExporterを利用するとよいでしょう。
Prometheusはウェブサイト全体のモニタリングを完全には担えませんが、アップタイムやサイトの稼働状況といったメトリクスの追跡には使えます。BlackBox Exporterと組み合わせれば、対象URLを指定するだけでアップタイムを監視できます。
最後に、Prometheusはcronジョブの追跡にも使えます。これにはPush Gatewayを利用し、cronジョブが正常に動作しているかどうかを確認できます。HTTPエンドポイントがこのメトリクスの監視に必要です。
cronジョブにはタイムスタンプが付与されるため、現在と直近の成功時刻を比較して、稼働状況を簡単に把握できます。
ここまで述べたように、Prometheusは多くのことができますが、いくつか不得意な面もあります。たとえば、次のような点です:
本質的に、Prometheusは適切なタイムスタンプ付きの時系列データを効率よく保存したい場合に有用なテクノロジーです。アプリの重要なメトリクスをモニタリングし、最小限の手間でメトリクスのクエリを整理するのに活用してみるとよいでしょう。インタラクティブなUIのおかげで初心者にも扱いやすいソフトウェアです。
ただし、常に万能というわけではありません。時系列データの完全な正確性は期待できず、単独のツールとして使うのはあまり得策ではありません。必要とする要件とPrometheusの機能を照らし合わせ、バランスを取ることが大切です。適切に運用すれば、Prometheusは高いパフォーマンスを発揮するでしょう。
最新情報を購読