Mackerel で OpenTelemetry をはじめてみよう! ─ システムメトリックの置き換えからアプリケーションへの組み込み、コンテナ環境への対応まで

こんにちは!Mackerel CRE の id:KGA です。

Mackerel の OpenTelemetry 対応であるラベル付きメトリックはお使いいただけているでしょうか?ラベル付きメトリックは今年 3 月にパブリックベータとなり、その後 2024 年 11 月 1 日に正式リリースすることを発表しました。

本記事では、まだお試しいただけていなかったり、これから始めてみようという方のために、過去に発信した記事を交えながら Mackerel を使った OpenTelemetry の始め方をご紹介します。

Mackerl が OpenTelemetry をサポートするモチベーションはこちらのエントリをご覧ください。

目次

OpenTelemetry を構成する要素を学ぶ

OpenTelemetry を使って実際にメトリックを投稿する前に、OpenTelemetry を構成する要素を学んでみましょう。mackerel-agent をインストールするだけでメトリックの投稿ができていた時と比べると登場人物が多いですが、使いこなすとメトリックなどのテレメトリデータの計装や変換、送信が柔軟にできるようになります。

OpenTelemetryでメトリックを計装するときによく出現するReaderやAggregationなど色々な用語をまとめて紹介します - Mackerel ブログ #mackerelio

OpenTelemetry を用いてシステムメトリック再現してみよう

Mackerel の魅力の一つとして、mackerel-agent をインストールするだけでロードアベレージや CPU, メモリの使用率など代表的なメトリックであるシステムメトリックが自動的に投稿されるというものがあります。ラベル付きメトリックの世界でも同様にシステムメトリック相当のものを取得するにはどのようにしたらいいのでしょうか。OpenTelemetry を理解する第一歩として OpenTelemetry を用いてシステムメトリックを再現してみましょう。

Host Metrics Receiver を用いるとコレクターをインストールしたホストのメトリックを収集できます。これを使うとシステムメトリックの投稿を再現できます。

OpenTelemetry コレクターでホストメトリックを Mackerel に送信する - Mackerel ブログ #mackerelio

Mackerel 開発チームエンジニア id:arthur-1 の記事では、Host Metrics Receiver を用いて、 mackerel-agent が投稿するシステムメトリックにより近づける方法を紹介しています。こちらの記事ではメトリックの投稿だけでなく、カスタムダッシュボードのクエリグラフによって、メトリックの描画もシステムメトリックに近づける PromQL の例も掲載しています。

mackerel-agentが作るシステムメトリックグラフをOpenTelemetryで可能な限り再現する - Diary of a Perpetual Student

次の一歩

コンテナ環境(ECS)で動作している nginx のメトリックを投稿する

Nginx Receiver を用い、ECS 上で動作している nginx の統計情報を収集しメトリックとして投稿するチュートリアルです。コレクターの設定方法、コレクターを含んだコンテナイメージの作成方法、カスタムダッシュボードでクエリグラフを作成する方法などが含まれています。

Mackerel で OpenTelemetry のラベル付きメトリックを使ってみよう - Mackerel ブログ #mackerelio

アプリケーションから直接メトリックを投稿する

Node.js のアプリケーションを例に、コレクターを立てずにアプリケーションから直接 OpenTelemetry のメトリックを投稿する例です。メトリックを投稿するための Metrics API が MeterProvider, Meter, Instrument という 3 つのコンポーネントから構成されるという仕様は言語によらないため、他の言語での実装にも参考になりそうです。

Node.js のアプリケーションのメトリックを mackerel-exporter を使って Mackerel に送信する - Mackerel ブログ #mackerelio

アプリケーションの例外をメトリックに変換し投稿する

コネクターでトレースデータをメトリックに変換する例です。コネクターはトレースやメトリックなど異なるパイプラインを接続する役割を担います。この例では Exceptions Connector を用いて、アプリケーションの例外が紐づいたトレースのパイプラインとメトリックのパプラインを接続し例外情報をメトリックに変換して投稿します。

トレースデータをメトリックとして Mackerel に送信する - Mackerel ブログ #mackerelio

投稿したメトリックを Mackerel で探索する

実装前の機能になりますが、Mackerel ではラベル付きメトリックをドリルダウンや絞り込みなどを駆使してかんたんに調査や分析することのできる機能を開発しています。開発状況などの続報は本ブログにてお知らせしていきますのでご期待ください。

オブザーバビリティにチームで取り組むための入口 ─ Mackerelが進める探索プロジェクトとは何か? - Mackerel ブログ #mackerelio

Mackerel で OpenTelemetry のメトリックを扱うときに困ったら

Mackerel でサポートされている OpenTelemetry のメトリックの種類や投稿したメトリックをクエリグラフとしてカスタムダッシュボードへ表示する方法、サポートしている PromQL の機能をヘルプにて公開しています。

また、式による監視と同様に PromQL を用いたクエリによる監視もできるようになっています。

世の中の実践例やさらに進んだ使い方を知る

2024年3月に Mackerel が開催した OpenTelemetry Casual Talk では OpenTelemetry のコンセプトや概念のおさらい、はじめ方、登壇者のみなさんの実践例、Mackerel 以外のオブザーバビリティバックエンドでの入門例など幅広いトークがありました。動画配信のアーカイブや発表資料がありますのでぜひご覧ください。

OpenTelemetry Casual Talk - コンセプトのおさらいと実践入門!を開催しました! - Mackerel ブログ #mackerelio

また、有志によって開催されている OpenTelemetry Meetup に参加したり過去の発表資料などもより進んだ実践へ進むための手助けとなるでしょう。過去に Mackerel 開発チームのメンバーも登壇しています。

OpenTelemetry - connpass