MackerelはOpenTelemetry対応のための開発を進めています - Mackerel Meetup復活記念連載 #1

こんにちは。Mackerel開発チームエンジニアのid:arthur-1です。Mackerel Meetup #14 Tokyoの案内はご覧いただけましたでしょうか。

mackerel.io

4年ぶりとなる開催に向けて、本ブログでは「Mackerel Meetup復活記念連載」と題し、当日のMeetupをさらにお楽しみいただけるようなトピックをみなさまに共有いたします。

これまでもCREより定期的にMackerelの新機能などをご紹介しておりますが、本連載ではMackerelに携わる様々な職種のメンバーから、Mackerelの実践的活用方法、技術インサイド情報、そしてMackerelへの熱い思いをお届けします。


今回のMeetupでは、Mackerelチーフエンジニアのid:onkより「次世代Mackerelのアーキテクチャ」と題した発表を行います。すでに多くの方に興味を持っていただけているようで幸いです。

「Mackerel Meetup復活記念連載」の第1回として、今回は次世代Mackerelの中身を少しだけご紹介します。

OpenTelemetry対応のための開発を進めています

現在Mackerel開発チームでは、MackerelをOpenTelemetryに対応させるための開発を進めています。

OpenTelemetryとは、メトリック・ログ・トレースなどのテレメトリデータを収集し、任意のバックエンドへエクスポートすることを目指して標準規格を定めたオープンソースのプロジェクトです。詳しくはOpenTelemetryのドキュメントをご覧ください。

opentelemetry.io

様々な言語のアプリケーションやミドルウェアをOpenTelemetryで計装するためのライブラリやツールが、オープンソースコミュニティで盛んに開発・公開されています。これらを用いて取得したメトリックをMackerel上で閲覧・監視できるようになります。

その結果、ユーザーがメトリックを収集しMackerelに送信する仕組みをより簡単に用意できるようになります。Mackerelが公式にプラグインを提供していないミドルウェアの監視がしたいときも、OpenTelemetryコミュニティが開発していれば導入して設定するだけでメトリックをMackerel上で監視できるようになるでしょう。

メトリックをOTLPでMackerelに送信する

現在のMackerelによる監視においては、ホストにmackerel-agentをインストールすることで、Mackerelのサーバの様子を取得して継続的にメトリックを送信しています。

Mackerelエージェントがメトリックを収集し、Mackerelに送信する構成図
MackerelエージェントとMackerelのプラグインを組み合わせてメトリックを取得し、エージェントがMackerelに送信する

次世代のMackerelでは、さらにOpenTelemetry Protocol(OTLP)を用いてMackerelにメトリックを送信し、保存できるようになります。

一般的にはOpenTelemetry Collectorを配置する構成になるでしょう。アプリケーションのプロセスからOpenTelemetry Collectorにテレメトリデータを送信し、収集したものをMackerelに送信するというフローになります。

OTel Collectorでメトリックを収集し、Mackerelに送信する構成図
アプリケーションやインフラからOTel Collectorにテレメトリを収集し、Mackerelに送信する

属性つきメトリックを自在に取得・視覚化する

これまでのMackerelでは、サービス・ロール・ホストに紐づくメトリックを、メトリック名を指定することによって取得していました。一方、OpenTelemetryにおけるメトリックにはメタデータとして属性が付与されています。属性は(属性名、属性値)の組から成るラベルのようなものです。

属性を用いると、1次元の文字列では表現が難しかったメトリックの識別子を、多次元構造のデータとして表現できるようになります。メトリック表現の比較例を以下に示します。

従来のメトリック表現
(メトリック名のみ)
属性つきメトリックの表現
(メトリック名+属性の集合)
hostA.cpu.user cpu{hostID="hostA",state="user"}
hostA.cpu.idle cpu{hostID="hostA",state="idle"}
hostB.cpu.user cpu{hostID="hostB",state="user"}

メトリック名だけではなく属性を指定して自在にメトリックを指定して取得し、グラフとして視覚化できるような仕組みを開発中です。例えば上記の例であれば、hostIDだけを指定したり、stateだけを指定したりしてメトリックを検索し、グラフを描画することが可能になります。

Mackerel上に保存した属性つきメトリックの取得にはPromQLという言語のクエリを用います。PromQLは、オープンソースの監視ツールであるPrometheusにて使われている、時系列データの検索・計算を行うクエリ言語です。

PromQLクエリでメトリック名と属性を指定してグラフを描画し、属性値を凡例に用いる様子をご覧ください。

PromQLを用いて属性つきメトリックグラフを描画するイメージ
※開発中の画面につき、実際の仕様は変更される場合があります

次世代アーキテクチャの詳細はMeetupにて!

いかがでしたでしょうか。OpenTelemetry対応した次世代Mackerelについては、Mackerel Meetupの講演にてより詳しくお話しいたします。以下のconnpassページから参加の申し込みができますので、ぜひお越しください!

みなさまとMackerelの未来について語り合えることを楽しみにしています。

[PR] Mackerel Meetup #14 Tokyo を開催します

Mackerel Meetup #14 Tokyoを2023年7月11日(火)に開催します。Mackerelの開発状況の共有や情報交換を行うオフラインイベントが4年ぶりに帰ってきました! Mackerelユーザーによるご講演もあります。ぜひご参加ください。

mackerelio.connpass.com