こんにちは! Mackerel チーム、サブディレクターの id:RyuGoo と申します。2024年4月から Mackerel チームの一員に加わり、主にプロダクトマネジメント的な仕組みや考えの導入を進めています。
Mackerel は OpenTelemetry を基盤としたオブザーバビリティの対応強化を進めています。2024年6月に発表した Vaxila の事業譲受より、ユーザーの皆様にオブザーバビリティの主要シグナルである「トレース」をいち早く体験していただけるよう開発を続けておりましたが、本日、このトレースを提供する Vaxila を Mackerel の機能として無料でご利用いただけるようになりました(トレース機能の体験版という位置づけとなります)。
本位置づけの性質上、通常の Mackerel とは品質基準やサポート対応が異なります。以下の点にご注意ください。
- 予告なしの停止メンテナンスを実施することがあります
- お問い合わせへの回答は、一時返答を含めお時間をいただくことがあります
- Vaxila の使い方や設定について、直接のサポートはいたしません
本公開に伴って、Vaxila Labs(https://vaxila-labs.com/) で公開中の Vaxila は今後サービスを終了させていただく予定です。終了時期などについてはご利用中のお客さまに後日ご案内いたします。
本稿では Vaxila とその使い方についてご紹介します。
Vaxila とは
Vaxila は OpenTelemetry に対応した分散トレーシングサービスです。 OpenTelemetry に対応済みのアプリケーションやシステムから Vaxila へ「テレメトリデータ」を送信すると、Vaxila の UI 上でツリーとして可視化することができます。
分散トレーシングとは
分散トレーシングとは、アプリケーションやシステムが行うある 1 つのリクエストが、複数のサービス(例えばウェブサーバーやデータベース、認証サービスといったマイクロサービスなど)をどのように通過するかを追跡・可視化する技術です。
例として、ある 1 つのエンドポイントへの HTTP リクエストがあり、このリクエストでは認証・認可やデータベースからの情報取得、取得した情報の加工などが行われてユーザーにレスポンスを返すものだとします。このとき、次のように分散されたサービスの流れが考えられます。
- ウェブサーバーでリクエストを受け取る
- リクエストしてきたユーザーの認証・認可を行う
- 成功したらデータベースにアクセスし、情報の要求を行う
- データベースから情報を取得できたら、アプリケーションサーバーで加工する
- アプリケーションサーバーからウェブサーバーに情報を返す
- ユーザーにレスポンスを返却する
このような流れがあるとき、ユーザーのリクエストからレスポンスまでの時間が長いという報告を受けたらどのように調査すればよいでしょうか? システムの流れを把握し、1 つ 1 つの可能性をしらみつぶしに調査していくのは骨の折れる作業ですし、より複雑なサービスでは調査自体が困難かもしれません。
この流れを把握できるようにし、調査を手助けする技術が分散トレーシングです。各サービス間でのリクエストの流れを追跡し、どのサービスで遅延が発生しているのか、どのような処理が行われたのかを可視化します。また、可視化によってどこを監視するべきか、どんなメトリックを見ておくべきかの把握にも役立てることが可能です。
Vaxila を使う
Vaxila を使うためには、いくつかのステップが必要です。
1. 利用申請を送る
Vaxila は Mackerel をお使いの方であればどなたでもご利用いただけますが、利用申請が必要です。また、利用申請には受け取り可能なメールアドレスとご利用になりたい Mackerel のオーガニゼーション名が必要です。
利用申請は Mackerel にサインインした後、ご利用になりたいオーガニゼーションのサイドメニューに表示されている「ヴァキシラ」メニューからアクセスできるフォームから送信してください1。利用申請の送信後、Vaxila が利用可能になると、Vaxila へデータを送信するために必要な情報が申請時に記載いただいたメールアドレスに届きます2。
2. Vaxila にアクセスする
データを送信するための情報が記載されたメールを受け取った後、申請いただいたオーガニゼーションの「ヴァキシラ」メニューに再度アクセスすると、 Vaxila にログイン可能です。 Vaxila へのアクセスは現在 Mackerel にサインインしているユーザーとして行われます。Mackerel のオーガニゼーションの権限が 閲覧者(Viewer)の場合、Vaxila へのアクセスはできませんのでご注意ください。
3. Vaxila にデータを送信する
Vaxila にデータを送信するには、お使いのアプリケーションにテレメトリデータを送信するための計装を行う必要があります。Vaxila は OpenTelemetry の仕組みを採用しているので、各種プログラミング言語向けに提供されている SDK を利用するか、OpenTelemetry Collector を使ってテレメトリデータを送信してください。ここでは OpenTelemetry Collector を使って Vaxila にデータを送信する例を紹介します。
OpenTelemetry Collector は YAML ファイルに設定を記述します。デフォルトでは /etc/<otel-directory>/config.yaml
にあり、 <otel-directory>
は otelcol
や otelcol-contrib
などの名前を持っています。
以下に設定例を示します。
receivers: otlp: protocols: grpc: http: processors: memory_limiter: check_interval: 1s limit_mib: 500 spike_limit_mib: 100 batch: # Vaxila では 6MB 以上のリクエストを受け付けません。 # そのため、リクエストあたりの最大スパン数を適当に設定します。 # スパンはトレースにおける作業または操作の単位です。 # データベースへのクエリ実行やアプリケーションの処理の 1 部分などをスパンとして表現できます。 # https://opentelemetry.io/docs/concepts/signals/traces/#spans # Vaxila には Mackerel の 1 オーガニゼーションあたり月間 500 万スパンまで送信できます send_batch_size: 5000 send_batch_max_size: 5000 exporters: otlphttp/vaxila: endpoint: "https://otlp-vaxila.mackerelio.com" headers: Accept: "*/*" "Mackerel-Api-Key": ${env:MACKEREL_APIKEY} extensions: health_check: service: extensions: [health_check] pipelines: traces: receivers: [otlp] processors: [batch] exporters: [otlphttp/vaxila]
Vaxila API トークンは Setting 画面の Token の行にある「Reveal」ボタンをクリックすると表示されます。この値を環境変数 MACKEREL_APIKEY
にセットしてください。また、テレメトリデータの送信先エンドポイントは以下の通りです。
https://otlp-vaxila.mackerelio.com
Vaxila にテレメトリデータが送信されると、そのデータに対応する形で Traces や Issues 上に可視化された情報を確認できるようになります。
今後の展望
これまで Mackerel はメトリックを中心とした世界で構成されていました。メトリックは、数値を時系列に並べて評価することができます。しかし、有効活用するためには見るべきメトリックを事前に定めておく必要があります。これに対し、今回公開した Vaxila でトレーシングを行うと、可視化されたテレメトリデータからボトルネックとなっている箇所を見つけて、見るべきメトリックを得るためのインサイトを得られます。
現時点では Mackerel と Vaxila という 2 つのプロダクトに分離しており、活用には相互の行き来が必要な状態ですが、今後これらの統合を進めていきます。
また、オブザーバビリティ領域を強化していくためには、 Mackerel の中にただ Vaxila が持つ機能を統合するのではなく、ユーザーの皆様が抱える問題を解決できるプロダクトとして磨き込みを進める必要があります。ぜひ Vaxila に触れていただき、皆様が感じた「こうなっていてほしい」「こうだったらもっと自分たちの運用が楽しく、簡単になるのに」といった思いをフィードバックいただけると幸いです。