OpenTelemetryとPrometheusの比較:見えないものは修正できない

コーディングとプログラミングをする女性フリーランス開発者がコード言語とアプリケーションで2画面を使ってコーディングしている画像。

アプリケーションのパフォーマンスの監視と最適化は、ソフトウェア開発者や企業全体にとって重要です。企業が展開するアプリケーションが増えるほど、収集・分析するために存在するデータも増えます。しかし、このデータは、監視・最適化・保管、そして最も重要なことに、データをコンテキストに組み込むための適切なツールがなければ、あまり価値がありません。

組織は、問題が発生する前に特定し、ボトルネックを警告し、ネットワーク・トラフィックを分散するなどしてアプリケーションの健全性を向上させる監視とオブザーバビリティー・ソリューションを導入することで、アプリケーション・データを最大限に活用できるようになります。これらの機能は、アプリケーションのダウンタイムを削減し、より信頼性の高いアプリケーション・パフォーマンスを提供し、ユーザー・エクスペリエンスを向上させるのに役立ちます。

OpenTelemetryとPrometheusはどちらもクラウドネイティブ・コンピューティング財団(CNCF)のオープンソース・プロジェクトであり、アプリケーション監視用のオブザーバビリティー・ツールを提供しています。データや業務の種類が異なれば、組織の目標やアプリケーションの仕様に応じた個別のソリューションが必要になります。実装するプラットフォームを選択する前に、OpenTelemetryやPrometheusなどのプラットフォームの主な違いと、それぞれのソリューションが提供するものを理解することが重要です。

また、OpenTelemetryとPrometheusは統合されており、監視アプリケーションの強力なデュオとして連携できることも注目に値します。OpenTelemetryとPrometheusはメトリクスの収集と変換を可能にします。これにより、DevOpsチームとITチームはパフォーマンスに関する洞察を生み出し、それに基づいて行動できるようになります。

OpenTelemetryの概要

OpenTelemetryまたはOTelは、ログやメトリクス、トレースなどのテレメトリー・データを生成・収集・エクスポート・管理するために一元的な場所を作成するように設計されたプラットフォームです。OTelは、異種データの収集を標準化するAPIやSDK、ライブラリー、統合を提供することを目的としてOpenCensusとOpenTracingが合併して誕生しました。OTelを使用すると、必要なモニタリング・アウトプットをコードに組み込んでデータ処理を簡素化し、データが適切なバックエンドに確実にエクスポートされるようになります。

テレメトリー・データの分析は、システムのパフォーマンスと状態を理解する上で鍵となります。このタイプの最適化されたオブザーバビリティーにより、組織はトラブルシューティングを迅速化し、システムの信頼性を高め、レイテンシー問題に対処し、アプリケーションのダウンタイムを削減できます。

OpenTelemetryエコシステムの主要な側面を簡単に説明します。

API:OpenTelemetry API(アプリケーション・プログラミング・インターフェース)は、プログラミング言語を普遍的に翻訳します。この機能により、APIでテレメトリー・データを収集できるようになります。これらのAPIは、OpenTelemetryメトリクスの収集を標準化する上で重要な役割を果たします。

SDK:ソフトウェア開発キットは、ソフトウェアを構築するためのツールです。これらには、ソフトウェア開発の構成要素であるフレームワーク、コード・ライブラリー、デバッガーが含まれます。OTel SDKはOpenTelemetry APIを実装し、テレメトリー・データの生成と収集に必要なツールを提供します。

OpenTelemetryコレクター: OTelコレクターは、テレメトリー・データを受信し、処理し、エクスポートします。OTelコレクターは、特定のデータ・タイプを指定されたバックエンドにフィルタリングするように構成できます。

計装ライブラリ: OTelは、すべてのプラットフォームで動作するインスツルメンテーション・モデルを提供します。インストルメンテーション・ライブラリーにより、OTelはあらゆるプログラミング言語と統合できます。

OpenTelemetryのメリット

OpenTelemetryプロトコル(OTLP)は、コードやメタデータを変更せずにメトリクス、ログ、トレースなどのテレメトリー・データを収集することでオブザーバビリティーを簡素化します。

メトリクス: メトリクスは、システムのパフォーマンスと健全性のハイレベルな概要を定義します。開発者やITおよびビジネス管理チームは、ビジネス目標を達成するアプリケーション・パフォーマンスのレベルを維持するために追跡するのに最も役立つメトリクスを決定します。メトリクスはチームが重要と考えるデータによって異なり、ネットワーク・トラフィックやレイテンシー、CPUストレージなどが含まれる場合があります。メトリクスを使用して、アプリケーションのパフォーマンスのパターンと傾向を追跡することもできます。

ログ:ログは、ソフトウェアまたはアプリケーション・コンポーネント内で発生するイベントの記録です。DevOpsチームが監視したいコンポーネントの特定の側面を中心にログを作成できます。これらは、一般的なパフォーマンス情報を提示したり、設定されたしきい値を超えたときを示したり、エラーを表示したりできる履歴データとして機能します。ログにより、アプリケーション・エコシステムの全体的な健全性を監視できるようになります。

トレース: トレースは、ログよりもアプリケーション・パフォーマンスを拡大表示し、最適化に役立ちます。また、ログよりも焦点が絞られており、アプリケーション・スタック内を移動する単一リクエストのエンドツーエンドのプロセスを追跡します。トレースを使用すると、開発者はエラーやボトルネックが発生した正確な瞬間とそれらがどれくらい継続するか、ユーザー・ジャーニーにどのような影響を与えるかを知ることができます。この情報により、マイクロサービスを管理し、アプリケーション全体のパフォーマンス向上を実現できるようになります。

OTelは、これら3つの異なるタイプのテレメトリー・データを取得し、Prometheusを含むさまざまなバックエンドにエクスポートできます。この機能により、ベンダーやバックエンドのロックインが防止され、開発者は好みの分析ツールを選択できるようになります。OpenTelemetryは、Prometheusを含む他のプラットフォームとのさまざまな統合をサポートしており、オブザーバビリティーを高める機会を提供します。OTelは JavaやPython、JavaScript、Goをサポートしており、ますます柔軟なソリューションになっています。また、開発者やITチームは、あらゆるWebブラウザーや場所からパフォーマンスを監視できます。

OpenTelemetryの最大の強みは、多くのアプリケーションにわたってデータを一貫して収集およびエクスポートできる機能と、収集プロセスの標準化にあります。OTel は、分散システムおよびマイクロサービスのオブザーバビリティーを実現する強力なツールです。

Prometheusとは

Prometheusは、アプリケーション・メトリクスの収集と整理のために作成された、モニタリングとアラートのためのツールキットです。Prometheusサーバーはもともと、オープンソース・ツールになる前にSoundCloudで開発されたものです。

Prometheusは、時系列データをエンドツーエンドで監視するための時系列データベースです。時系列メトリクスは、毎月の売上データや毎日のアプリケーション・トラフィックなど、一定の間隔で取得されるデータの集合です。このタイプのデータを明確に可視化することで、ビジネス計画のパターンや傾向、予測に対する洞察が得られます。Prometheusは、ホストと統合されると、DevOpsチームが監視したい専用機能に関連するアプリケーション・メトリックを収集します。

Prometheusメトリクスは、PromQLと呼ばれるクエリー言語を使用して、メトリクス名やラベル、タイムスタンプおよび値で構成されるデータ・ポイントを提供します。PromQLを使用すると、開発者とIT部門はデータ・メトリクスを集約し、ヒストグラム(グラフやダッシュボード)に変換して視覚化できます。Prometheusは、エンタープライズ・データベースまたはエクスポーターからのデータにアクセスできます。エクスポーターは、さまざまなアプリやエンドポイントからメトリクスを取得するために機能するアプリケーションに関連するソフトウェアです。

Prometheusは次の4種類のメトリクスを収集します。

カウンター: カウンターは、増加する一方の累積数値を測定します。カウンターは、完了したタスクや定義された期間中に発生したエラーの数、または実行中のプロセスまたはマイクロサービスの数を測定するために使用されます。

ゲージ:ゲージは、外的要因によって上下する数値を監視します。CPUとメモリーの使用状況、温度、キューのサイズを監視できます。

ヒストグラム: ヒストグラムは、リクエストの継続時間やレスポンス・サイズなど、特定のイベントの継続時間を測定します。次に、これらの測定値の範囲をバケットと呼ばれる間隔に分割し、これらの測定値がそれぞれのバケットにいくつ入るかを決定します。

サマリー: ヒストグラムのように、サマリーもリクエスト時間と応答サイズを測定しますが、すべての観測の合計数とすべての観測値の合計も提供します。

Prometheusのもう一つの価値ある側面は、収集したデータに基づいてアクセス可能なダッシュボードやグラフを作成できることです。

Prometheusのメリット

Prometheusを使用すると、正確な洞察が得られ、迅速なトラブルシューティングが容易になるリアルタイムのアプリケーション監視が可能になります。また、特定の機能に関連するしきい値も作成できます。これらのしきい値を満たしたり超えたりすると、アラートがトリガーされ、問題の解決にかかる時間を短縮できます。Prometheusは大量のメトリクス・データを処理して保管し、必要に応じて分析チームがデータを利用できるようにします。長期保管を目的としたものではなく、即時分析に必要なデータを保管するためのツールです。Prometheusでのデータ・ストレージの標準期間は2時間から15日間です。

Prometheusは、コンテナ化されたアプリケーションの展開・管理、スケーリングをスケジュールおよび自動化するためのオープンソースのコンテナ・オーケストレーション・プラットフォームであるKubernetesとシームレスに統合されます。Kubernetesを使用すると、企業はさまざまなサービスやマイクロサービスを展開する複雑なハイブリッドおよびマルチクラウド環境を構築できます。PrometheusとKubernetes を統合すると、これらの複雑なシステムにフルスタックのオブザーバビリティーと監視機能がもたらされます。

Prometheusは、データをダッシュボードやチャート、グラフ、アラートに変換する強力な視覚化ツールであるGrafanaとも互換性があります。Prometheusと組み合わせることで、Grafanaはメトリクスを取得して、明確に視覚化します。これら2つのプラットフォーム間の互換性により、複雑なデータにさまざまなチーム間でアクセスし、共有しやすくなります。

OpenTelemetryとPrometheusの主な違い

Prometheusは、メトリクスの監視・保管・視覚化のためのツールを提供していますが、根本原因分析に使用されるログの追跡やトレースはサポートしていません。全体として、PrometheusのユースケースはOpenTelemetryよりも限定的です。

OpenTelemetryは、プログラミング言語に依存しない統合により、Prometheusよりも複雑なメトリクスを処理および追跡できます。OTelは高度にスケーラブルで、自動インストルメンテーション・モデルを提供するため、Prometheusよりも高い拡張性を有しています。Prometheusとは異なり、OpenTelemetryはストレージ・ソリューションを提供しないため、別のバックエンド・システムと組み合わせる必要があります。

要約

  • Prometheus は累積メトリクスを測定して合計を求めることができますが、OpenTelemetry はメトリクスをデルタとして表せます。
  • Prometheusは短期のデータとメトリクスのストレージを提供しますが、OTelはストレージをネイティブにサポートせず、別のストレージ・ソリューションと組み合わせられます。
  • OpenTelemetryは、プッシュまたはプル経由で統合APIを使用してメトリクスやログ、トレースを収集し、それらを共通言語に翻訳しますが、これはPrometheusでは実現できません。Prometheusはホストからデータをプルすることでメトリクスを収集し、主に時系列メトリクスの収集・保管に関係します。
  • OTelは言語に依存せず、メトリクスを変換できるため、開発者はより柔軟に対応できます。PrometheusはPromQLを使用してデータとメトリクスを集約します。
  • Prometheusは、カスタマイズ可能なアラートと組み合わせて、メトリクスを監視するためのWeb視覚化を提供します。OpenTelemetryでは、ビジュアライゼーションのために個別のツールと統合する必要があります。
  • OTelでは、メトリクス値を浮動小数点数ではなく整数として表現できるため、より正確な値表現が提供され、理解しやすくなります。Prometheusはメトリクスを整数として表現できません。

これらのソリューションのどれが適切であるかは、組織のニーズによって決まります。データをより包括的に理解する必要があり、分散システムを使用した複雑な環境で作業しており、さらに柔軟性が必要な場合は、OpenTelemetryがより適切なソリューションとなる可能性があります。これは、ログとトレースを監視する必要がある場合にも当てはまります。

個々のシステムや運用を監視する必要があり、アラートやストレージ、視覚化モデルを探している場合は、Prometheusが適切なオプションかもしれません。

OpenTelemetryとPrometheusの統合

幸いなことに、必ずしもどちらかを選択する必要はありません。 OpenTelemetryとPrometheusは互換性のあるプラットフォームです。OTel SDKはPrometheusデータ・モデルからメトリクスを収集でき、PrometheusはOpenTelemetryのメトリクスをサポートします。これらのプラットフォームを合わせて使用すると、両方の長所と高度な監視オプションが得られます。たとえば、次のようになります。

  • OTelとPrometheus を組み合わせると、アプリケーション環境に対するリアルタイムの洞察を備えた複雑なシステムの監視が可能になります。
  • OTelのトレースおよび監視ツールはPrometheusのアラート機能と組み合わせられます。
  • Prometheusは大量のデータを処理できます。この機能と、メトリクス、トレース、ログを1つのインターフェースに統合するOTelの機能を組み合わせることで、システムとアプリケーションを拡張する際の効率が向上します。
  • PromQLは、OpenTelemetryのデータ取得から収集されたデータを分析し、それを使用して視覚化モデルを作成できます。

さらに、OpenTelemetryとPrometheusはIBM InstanaIBM Turbonomicと統合して、追加の監視ツールを提供します。Instanaの強力な依存関係マップ、アップストリームやダウンストリームのサービス相関関係、およびフルスタックの可視性により、OTelの機能はすべてのサービスが確実に計測されるように最適化されています。Instanaは、他のすべてのデータ・ソースに提供するのと同じ優れたエクスペリエンスをOTelデータで提供し、アプリケーションの問題を迅速に見つけて修正するために必要なコンテキストを提供します。Turbonomicを使用すると、Prometheusのデータ監視ツールを使用して、リアルタイムのデータ収集に基づいてリソースの決定を自動化できます。これらの統合は、アプリケーション・エコシステムの健全性を促進し、全体的なパフォーマンスを向上させる最適化された方法です。

 

著者

Camilo Quiroz-Vázquez

IBM Staff Writer