OpenTelemetryを使用したアプリケーションの監視 (2025/02/08)
OpenTelemetryを使用したアプリケーションの監視 (2025/02/08)
https://blogs.oracle.com/observability/post/application-monitoring-with-opentelemetry
投稿者: Zyaad Khader | Principal Member of Technical Staff
Anand Prabhu | Senior Member of Technical Staff
多くの場合、スタック・コンポーネントで変化するアプリケーションの監視は困難です。これらのコンポーネントを監視するための統合的なアプローチにより、発生する可能性のある問題をエンドツーエンドで可視化し、インサイトを得ることができます。OpenTelemetryは、ほとんどのプログラミング言語のトレース、メトリックおよびログ・データを収集するための業界標準です。OCI Application Performance MonitoringやOCI Logging AnalyticsなどのOCI Observability and Managementサービスと組み合わせることで、強力なインサイトを提供できます。この記事では、OpenTelemetryを使用してアプリケーションを監視する方法について説明します。
アプリケーション・データを収集するためのOpenTelemetry標準
OpenTelemetryは、トレース、メトリックおよびログをモニタリング・ツールに送信するためのオープンソース・フレームワークです。プログラミング言語ごとに様々な実装があり、常に更新/開発されています。このフレームワークを使用する目的は、監視データを収集および送信するための統一された標準化された方法を持つことです。このブログでは、OpenTelemetryを使用してアプリケーションをインストゥルメントし、収集されたデータをApplication Performance MonitoringやLogging AnalyticsなどのOCIサービスにエクスポートする方法について説明します。
図1: OpenTelemetryデータ・フロー図
一貫したサービス・レベルを診断および提供するためのOCI Application Performance Monitoring
Application Performance Monitoring (APM)は、アプリケーションのパフォーマンスを詳細に可視化し、問題を迅速に診断して一貫性のあるレベルのサービスを提供する機能を提供します。これには、クライアント、サードパーティ・サービスおよびバックエンド・コンピューティング層(オンプレミスまたはクラウド)に分散した複数のコンポーネントおよびアプリケーション・ロジックの監視が含まれます。
図2: Application Performance Monitoringのデータ・フロー図
ログ・データに関する重要なインサイトを得るためのOCI Logging Analytics
Logging Analyticsは、Oracle Cloud Infrastructureのクラウド・ソリューションで、アプリケーションおよびシステム・インフラストラクチャからのすべてのログ・データのインデックス作成、エンリッチ、集計、探索、検索、分析、相関、可視化、および監視を行うことができます。Logging Analytics内に構築された厳選されたAI/MLモデルを使用して、ログ・データから強力なインサイトを得ることができます。
図3: Logging Analytics機能の図
GitHubの例
MERN/MEAN/MEVNアプリケーションの監視を実装する場合は、次のGitHubリポジトリを使用します。
このリポジトリには次のものが含まれます。
- アプリケーションのフロントエンドおよびバックエンドをインストゥルメントするファイル
- APMにカスタム・メトリックを送信するファイル
- Logging Analyticsにログ・メッセージを送信するファイル
- OpenTelemetry実装を試すサンプル・アプリケーション
サンプル・ユース・ケース
GitHubの例のトレース・スクリプト、メトリック・スクリプトおよびロギング・スクリプトを使用して、ユーザー管理Webアプリケーション(MERNスタック上に構築)を監視しました。目標は、トレース・データとビジネス、ユーザー・エクスペリエンス、カスタム・ホスト・メトリックで構成されるダッシュボードを作成することでした。
図3: OCIのMERNアプリケーション・ダッシュボード
Getting started
OpenTelemetry実装は、様々なプログラミング言語のメトリック、トレースおよびログに対して安定した、実験的な、またはまだ開発されていない可能性があることを認識することが重要です。下にスタックの互換性を表示:
APMドメインの作成
OCIドキュメントを確認してAPMドメインを作成します
- 「APM管理」ページに移動します(メインの「OCI」メニュー→監視および管理→アプリケーション・パフォーマンス管理→管理)
- 「APMドメインの作成」をクリックし、ドメイン名を指定します。
- 次の点に注意してください(APMドメイン・ページで確認)。
- データ・アップロード・エンドポイント(APMにデータを送信するためのURL)
- 公開データ・キー(APMブラウザ・エージェントで使用)
- プライベート・データ・キー(OpenTelemetryなどのデータ・コレクタに接続する場合)
API署名キーの作成
- OCIコンソールにログイン → ユーザー → ユーザー設定
- 「リソース」でAPIキーを選択します
- 「APIキーの追加」→「APIキー・ペアの生成」→「秘密キーのダウンロード」→「追加」をクリックします。
- 構成ファイルのプレビューおよびクローズからコンテンツをコピーします
構成ファイルの作成
ディレクトリ(.oci)と、構成ファイルのプレビューおよび秘密キー・ファイルへのパスからのコンテンツを含む構成ファイルを作成します。次に、構成ファイルの内容の例を示します。
[DEFAULT]
user= [User OCID]
fingerprint= [API Key Fingerprint]
tenancy= [Tenancy OCID]
region= [Region]
key_file= [Path to Private Key File]
ログ・パーサーの作成
- 監視と管理 → ログ分析 → 管理
- 「パーサー」→「パーサーの作成」→「JSONタイプの選択」をクリックします。
- フィールドを解析および抽出し、必要に応じて特定のフィールド名にマップするJSONログ・コンテンツの例を入力し、「変更の保存」をクリックします。
図4: ログ・レコードの例
ログ・ソースの作成
- 「Logging Analytics」→「管理」→「ソース」→「ソースの作成」に移動
- ソース・タイプ → ファイル
- エンティティ・タイプ → ホスト(Linux)
- 「特定のパーサー」を選択し、作成したパーサーを選択します。
- 「ソースの作成」をクリックします。
図5: ログ・ソースの作成
ログ・グループの作成
- 「Logging Analytics」 → 「管理」 → 「ログ・グループ」 → 「ログ・グループの作成」
- ログ・グループ名と説明を指定 → 「作成」をクリックします。
- 後で使用されるログ・グループのOCIDをノートにとります。
ネームスペースの詳細の取得
- 「アイデンティティ」 → 「コンパートメント」 → ログ・ソースが作成されたコンパートメントをクリック → コンパートメントのOCIDのコピー
- 次に、クラウド・シェルを起動し、次のコマンドを実行して、次に示すコマンドを実行したネームスペースを取得します。
oci os ns get -c compartmentID
実装
アプリケーションのインストゥルメント
アプリケーションのフロントエンドを監視するには、APMブラウザ・エージェントをインストゥルメントします。ステップはこちらから:
サーバーのインストゥルメンテーション:
- エンドツーエンドのトレースを取得するには、ブラウザ/クライアントのフロントエンド・トレースからサーバーへのコンテキストの伝播が必要です。その際の注意点の1つは、コンテキストを提供するHTTPヘッダーがあることを確認することです。デフォルトでは、OpenTelemetryはW3C (トレース)を使用してコンテキストを自動的に伝播します。他のヘッダー・タイプも使用できますが、アプリケーション・コードを考慮する必要があります。
- ブラウザ/クライアント・インストゥルメンテーションを実行するJavaScriptのスニペットを使用して、次のコードを必ず追加してください。
- window.apmrum.traceSupportingEndpoints = [ {ヘッダー: [ 'W3C']、 hostPattern: '.*' } ];
- プログラミング言語のステップに従って、バックエンド(使用可能なものに応じて自動インストゥルメンテーションまたは手動)をインストゥルメントします。
- GitHubの例:
図6: トレース・コンテキストの伝播図
アプリケーション・ログの送信中
アプリケーションは、OpenTelemetry APIを使用してトレースおよびメトリックを収集し、それをOCI Application Performance Monitoring (APM)に送信するためにインストゥルメントされます。次に、トレース、メトリックおよびログを関連付けてアプリケーションを完全に可視化できるOCI Logging Analyticsにアプリケーション・ログを送信する方法を学習します。標準のロギング・ライブラリを使用してロギングを有効にでき、次に示すように、OCI提供のSDKまたはRESTエンドポイントを使用してログを送信するようにカスタム・ログ・アペンダを構築する必要があります
図7: ログ・データ・フロー図
ログ・アペンダの作成
カスタム・ログ・アペンダは、Java、Python、.Net、TypeScript/JavaScript、Go、Rubyなどの様々なプログラミング言語用に提供されているOCI Logging Analytics SDKを使用して構築することも、OCI Restエンドポイントを使用することもできます。
SDK
https://docs.oracle.com/en-us/iaas/Content/API/Concepts/sdks.htm
エンドポイント
https://docs.oracle.com/en-us/iaas/api/#/en/logan-api-spec/20200601/Upload/UploadLogFile
前述のステップから、ログを初期化してOCIログ・アナリティクスに送信するために必要なパラメータを収集します。
- [PATH]/config - 設定ファイルへのパス
- [PROFILE] - OCI認証に使用される構成ファイル内のプロファイル
- [名前空間] - ネームスペース
- [UPLOADNAME] - アップロードのユーザー定義名
- [LOGSOURCENAME] - OCIロギング分析で作成されたログ・ソース名
- [LOGFILENAME] - ログ・メッセージが特定のログ・ファイルに関連していることを示すログ・ファイル名
- [LOGGROUPID] - ログ・メッセージをグループ化するためにロギング分析で作成されたログ・グループID
GitHubの例: ログ・アペンダ – JavaScript (MERNスタック)
ログ・アペンダにより、ログ・レコードが様々なログ・レベル(デバッグ、情報、警告およびエラー)に対して作成されると、OCI Logging Analyticsに送信され、次に示すようにログ・エクスプローラでログ・レコードを表示できます。
図8: ログ・エクスプローラ・ビュー
トレースとログの関連付け
OpenTelemetryでは、ログ・レコードにTraceIdおよびSpanIdが含まれ、これにより、同じ実行コンテキストに対応するログおよびトレースを直接関連付けることができます。アプリケーション・トレースおよびスパンがOCI Application Performance Monitoringに流れ、OCI Logging Analyticsサービスにログインします。OCI APMでは、ドリルダウン構成を使用して、トレースやスパンからログイン分析にワンクリックで簡単に移動できます。
ドリルダウンは、スパンからの属性(例: loganalytics/explorer?search=<OciInstanceId> OciInstanceIdはスパン属性)を含むカスタマイズ可能なURLを使用する、OCIまたはその他のカスタム・サービス内の他のサービスへのリンクです。
トレースおよびログをリンクするドリルダウンを作成するステップ:
図9: トレースおよびログのカスタム相関の作成
カスタム・ダッシュボードの作成
データとメトリックをOCIでトレースしたら、そのデータを使用して、任意の方法で視覚的に表現します。カスタム・ダッシュボードの作成は簡単です。必要なウィジェットをドラッグ・アンド・ドロップし、ソース・データ(メトリック、トレースまたはログ・データ)を変更します。ダッシュボードを開始するためのいくつかのリンクを次に示します:
- カスタムAPMダッシュボードの作成
- カスタム・ログ・アナリティクス・ダッシュボードの作成
- カスタム・トレース・データ・ウィジェットの実装に関するこのブログ記事に従って、APMのトレース・エクスプローラ問合せからカスタム・ウィジェットを作成
リソース
コメント
コメントを投稿