|
この記事は、書籍『SRE』の第 10 章「時系列データに基づく効果的なアラーム」の実践的な要約として見ることができます。 Prometheus は、Google の内部監視システムである Borgmon の (非公式の) 実装ともいえるオープンソースのビジネス監視ソフトウェアです。 この記事では、最近 Prometheus を使用して構築した、小規模から中規模 (500 ノード未満) のシステムに使用できる、完全な半自動 (手動操作が最小限) の監視システム ソリューションを紹介します。 アクティブモニタリング監視は運用・保守システムの基盤です。企業や部門の運用・保守レベルを測定するには、監視システムを見るだけで十分です。 監視方法は一般的に次の 3 つの種類に分けられます。
アクティブモニタリングは理想的なソリューションであり、後者2つは主に補助的な用途として使用されます。この記事ではアクティブモニタリングのみに焦点を当てます。 監視は実際にはエンドツーエンドのシステム (インフラストラクチャ、サーバー、ビジネス、ユーザー エクスペリエンス) ですが、この記事ではビジネス レベルでのプロアクティブな監視にのみ焦点を当てています。 プロメテウスなぜ他のTSDB実装(InfluxDBなど)ではなくPrometheusを選ぶべきなのでしょうか?主な理由は、Prometheusの中核機能であるクエリ言語PromQLがSQLよりもプログラム可能な計算機に似ているためです。つまり、PromQLはほぼ無制限の数のクエリ結果を生成できるということです。 例えば、HTTP サービスがあり、監視項目 `http_requests_total` を使用してリクエスト数をカウントするとします。監視データのセットは次のようになります。 http_requests_total {インスタンス= "1.1.1.1:80" 、ジョブ= "cluster1" 、場所= "/a" } 100 ここには3つのタグがあり、それぞれクロール対象のインスタンス、それが属するジョブ(通常はクラスター名を使用します)、そしてアクセスパス(Nginxのロケーションと考えてください)に対応しています。Prometheusの多次元データモデルは、任意の1次元または複数の次元で計算を実行できることを意味します。
PromQL に加えて、豊富なデータ タイプ セットにより、より有意義な監視項目を提供できます。
ほとんどの監視項目はカウンターで実装できますが、一部の項目ではゲージとヒストグラムを使用します。サーバー側でのヒストグラム計算はCPUを大量に消費するため、ヒストグラムデータを大量にエクスポートする必要はありません。 最後に、PrometheusはPULLモデルを用いてリアルタイムの取得、保存、計算を行い、監視インスタンスのデータを能動的に取得します。PUSHモデルと比較して業務への介入が少なく、ログベースのオフライン統計と比較してよりリアルタイム性があります。さらに、監視インスタンスはテキスト形式の/metricsインターフェースを提供するだけで済むため、デバッグが容易になります。 サービスフレームワークの変革私たちのチームは、統一されたサービス フレームワークを使用してプロジェクト開発を標準化し、開発の難易度を効果的に軽減します。 まず最初に、当社のサービス フレームワークをご紹介します。
サービス フレームワークが内部監視項目をエクスポートできるようにするには、いくつかの重要なタスクが必要です。
例えば、あるWebサービスに「echo」と「date」という2つのロケーションインスタンスがあるとします。これらのインスタンスのQPS(1秒あたりのクエリ数)を追跡したい場合、「echo_requests_total」と「date_requests_total」という2つの異なるメトリクスを定義するのではなく、「http_requests_total」というメトリクスを定義し、ロケーションタグ(それぞれ「echo」と「date」)で区別する必要があります。こうすることで、インターフェースの追加や削除を行ってもコードを変更する必要がなくなります。
データのキャプチャと表示エクスポート機能が有効になると、Prometheus を使用してデータを取得できますが、まだいくつかの小さな問題が残っています。 ユーザー定義のメトリック名はPrometheusの仕様に準拠していない可能性があります。無効なデータ入力が検出された場合、Prometheusはクロールを停止します。そのため、エクスポートする前にデータをフィルタリングして書き換える必要があります。 エクスポートされるデータのサイズを制御するために、単一マシンの監視にのみ意味のある一部のデータはエクスポートから省略できます (フレームワークには単一マシンの監視ページがあります)。 Prometheus を使用する際に注意すべき点がいくつかあります。 PrometheusはCPU負荷(クエリ)とI/O負荷(データ永続化)の両方が高いため、CPUは多ければ多いほど良いとされています。また、メモリも多ければ多いほど良いとされています(クロールしたデータをキャッシュするため、不要なビジネスデータのエクスポートを最小限に抑える必要があります)。SSDの使用は不可欠です!Prometheusがメモリ使用量のしきい値に達すると、データのクロールを停止します。この停止は少なくとも数分間続き、場合によっては回復不能になることもあります。そのため、可能な限りSSDを使用してください。 Prometheusはリロードをサポートしていると主張していますが、実際にはあまりうまく機能していないようです。例えば、アラートルールファイルを変更してリロードすると、古いアラートルールと新しいアラートルールが同時に計算・実行されるようです… Prometheus もグラフィカル インターフェースを提供しますが、非常に基本的なものです。 Grafana は通常、監視データを表示するために使用されます。 統一されたビジネス フレームワークと統一された監視メトリックにより、Grafana のダッシュボードは均一に構成することが容易です。
Prometheusの真価を発揮するのは、各チャートですべてのデータセンターの監視メトリクスを同時に表示でき、各メトリクスを単一のクエリで計算できる点です。例えば、1行目の5列目には、各データセンターの各下流システムの故障率が、単一のクエリでソートされて表示されています。 topk(5, 100 *sum(rate(downstream_responses{error_code! = "0" }[5m])) by (ジョブ、サーバー)/sum(rate(downstream_responses[5m])) by (ジョブ、サーバー)) ここで、範囲ベクトルセレクターの[5m]に注意してください。これは、過去5分間のデータに基づいてレートを計算していることを意味します。この値が小さいほど、監視結果の変動が大きくなり、大きいほど、結果が滑らかになります。選択する値は、求める結果によって異なります。チャートには5m、アラームルールの計算には1mを使用することをお勧めします。業務がそれほど重要でない場合は、この値を適宜増やしてください。 この監視テンプレートは基本的に、可用性監視に対するビジネスのニーズをカバーしますが、ビジネスが独自の監視メトリックを定義して監視を実行することもできます。 アラートマネージャーPrometheusは定期的にデータをクロールします。クロール後、アラートルールをチェックし、計算を行います。ルールが満たされると、アラートがトリガーされ、AlertManagerに送信されます。このプロセスに基づいて、監視チャートに異常が見られる場合、アラートはすでにトリガーされています。 デフォルトでは、アラームルールは10件未満に設定されています。期間の選択には注意が必要です。期間が長すぎると大きな遅延が発生し、短すぎるとわずかなトラフィックの変動でも多数のアラームが発生します。 Prometheus はアラートを生成するように設計されていますが、アラートの集約、配布、マスキングは AlertManager サービスによって処理されます。 AlertManager は現時点では非常にシンプルですが、アラートを他の受信者に配信し続けることができます。
より複雑なアラーム階層管理については、AlertManager はまだ長い道のりを歩む必要があり、このトピックについては将来別途議論する価値があります。 プロメテウス + グラファナ + メソスPrometheus + Grafanaソリューションは、統合サービスフレームワークと組み合わせることで、ほとんどの中小規模チームの監視ニーズに対応できます。これらのコンポーネントをまとめてパッケージ化し、Mesosにデプロイします。統合インストールパッケージにより、監視システムのデプロイの難易度がさらに軽減されます。ユーザーはいくつかの簡単なパラメータを設定するだけで済みます。ただし、いくつか注意すべき点があります。
結論はPrometheusは、強力で急速に成長している監視システム実装です。安定性、パフォーマンス、ドキュメントの面ではまだ改善の余地が残っていますが、中小規模のチームにとって最適な選択肢です。サービスフレームワークをカスタマイズし、包括的なイベントトラッキングを設計し、Prometheus/Grafanaの統合設定テンプレートを使用し、Mesosプラットフォームと組み合わせることで、リアルタイムのビジネス監視システムを半自動的に導入できます。 |