Diary of a Perpetual Student

Perpetual Student: A person who remains at university far beyond the normal period

ドリルダウンの最初の一歩を支援するサービスマップを作りたい

arthur-1 Mackerel Advent Calendar 2023ラソン14日目の記事です。

Mackerelにサービスマップ機能が欲しい

私はSRE NEXT 2023で当日スタッフを務めており、その関係でいくつかのセッションを拝聴させていただきました。

そのうち、Sansan株式会社様の「勘に頼らず原因を⾒つけるためのオブザーバビリティ」という発表は、監視サービスの作り手である身として非常に参考になりました。

この発表では、複雑なシステムでデバッグを行う理想的な手段としてドリルダウン探索を挙げています。勘と経験に頼るのではなく、ある情報を見て全体から原因となる場所を絞り込むというのをどんどん続け、最終的に原因に辿り着くという手法です。具体的として、まず最初にメトリクスのアラートで問題を認識してから、サービスマップを見ることで問題の起こったサービスを特定する(その後は特定したサービスでさらにドリルダウンしていく)という方法が述べられていました。

また、Mackerel Drink Up #12ではユーザーの皆さまにLTをしていただき、とても盛況でした。

mackerel.io

その中で特に盛り上がったのが、問題の発生源を特定するために作られた自作ツールのデモでした。その体験に感動したとともに、Mackerelの機能として提供できていないことをとても悔しく思いました。

現在のMackerelにはトレースを溜め込み分析する機能がないのですが、メトリックに関しては頑張れると思っています。一般にLatencyやAvailabilityには依存関係があるはずです。ロールやサービス同士の関係が図として描画され、そこにアラートやメトリックが表示できれば、複雑なシステムでも問題となる箇所を速やかに特定できるのではないかと考えています。

当然自分もプロトタイプを作ってみたくなる(失敗)

こんな機能として作れないかなと思って、Advent Calendarに合わせてプロトタイプを作ってみようとしましたが、残念ながら現在はまだできていません。

実装の方針として以下のようなものを考えていました。

  • サービス・ロール・ホスト間の関係を図式するためにMermaidを用いる
  • Mermaid記法に独自記法を埋め込むことで、図形をサービス・ロール・ホストと紐付けられる
  • MackerelのAPIからメトリックやアラート情報を取得し、Mermaidの図定義を改変して情報を掲載したりスタイルを変えたりする

しかし、現在のmermaid-jsには抽象構文木を操作させるようなAPIが用意されておらず、やむなく断念したという形です。こんな方法ならすぐ作れるんじゃないかというアイデアをお持ちの方はぜひ私に入れ知恵してください。