Mackerel Meetup #14 Tokyo の発表資料です https://mackerelio.connpass.com/event/286608/ -- 令和最新版の監視サービスの作り方です。今後のMackerelのロードマップについて、実装予定の内容の紹介と、それを実現するアーキテクチャについてお話しします
次世代Mackerelのアーキテクチャid:onk2023-07-11 Mackerel Meetup #14 Tokyo1
View Slide
自己紹介● 大仲 能史 a.k.a. id:onk● 株式会社はてな○ Mackerel開発チーム○ エンジニアリングマネージャー○ 今日は京都から来ました2
3今日の話
4次世代Mackerelのアーキテクチャ
5次世代 #とは
6今のメトリック投稿
メトリック投稿7https://mackerel.io/ja/docs/entry/advanced/custom-metrics
メトリック投稿● GraphiteのCarbon Plaintextに似ている○ \t\t● データをかき集める○ pluginを実装する● 投稿する○ pluginがHTTPでCarbon形式で投げる8
メトリック投稿9● 我々もpluginを作っているし、競合他社もpluginを作っている○ https://github.com/mackerelio/mackerel-agent-plugins● 例えばホストメトリックではそれぞれ/proc/meminfoをパースしている
メトリック投稿● 集めるところは共通化されていない● 投げるところも共通化されていない10
11メトリックのメタデータ
メトリックのメタデータ● ホスト単位のメトリックは扱いづらい○ ホストはデプロイのたびに切り替わるようになった● 理想のダッシュボードには式グラフが必須○ role()はともかく、host()はメンテが非常に難しい12
メトリックのメタデータ● ホスト以外の絞り込みもしたい● 例えばアクセスログ13
メトリックのメタデータ● 特定のステータスコードのリクエスト数○ これは今でも取れている● AZごと&ステータスコードごと○ ホストのメタデータに含まれているのでやればできる● PATHごと&ステータスコードごと○ これは今のMackerelではまず無理な例○ メトリック名に詰め込んで頑張ればできる……?14
15メトリックのメタデータ
メトリックのメタデータ● 投げるときにメタデータ付きで投げておいて16access_num;status=200;path=/api 53 1689025057access_num;status=200;path=/ 70 1689025057access_num;status=503;path=/api 20 1689025057access_num;status=401;path=/api 1 1689025057
メトリックのメタデータ● 引くときに自由に絞り込みたい● Observabilityの文脈○ アプリケーションの状態を、出力から推定したい17seriesByTag('name=access_num', 'status=200')
余談:Observability(可観測性)● システムの現在の状態を出力から推定できる特性○ 初見の状態に対しても調査可能■ 現代の複雑なシステムは、毎回原因が違う不具合が発生する○ デプロイすることなく対応できる18
19OpenTelemetry
OpenTelemetry● ざっくり言うと「テレメトリーの取り方を標準化してみんなで使えるものを作ろうぜ」● CNCF Incubating Project○ コンテナ技術の推進と、その進化を取り巻くテクノロジー業界の足並みを揃えるために2015年に創設された財団である。20https://ja.wikipedia.org/wiki/Cloud_Native_Computing_Foundation
OpenTelemetry● otel-collectorに投げておくと、任意のexporterに出力できる● fluentdのような仕組み(ざっくり)21https://opentelemetry.io/docs/collector/
OpenTelemetry● アプリケーションがログやメトリックを出すならOTelが標準になるだろう○ アプリはどのベンダーの形式で出すか考えなくて良い○ ベンダーはプラグインを作る必要がなくなる● メトリックのメタデータも対応している22
23対応中です
OpenTelemetry対応(writer)● エンドポイントはOTLPで受け付ける● メタデータ付きのメトリックを取る○ 次元数が変わる● 実装○ メタデータも含めてhash化してTSDBのkeyにする24
OpenTelemetry対応(reader)● ラベルで引く○ access_num{status=200}■ access_num;status=200;path=/■ access_num;status=200;path=/api● ラベル→メトリックの転置インデックス25
OpenTelemetry対応(reader)● ラベル付きメトリックを自在に引くためのPromQL Engineを実装した○ 算術演算、集合演算、集計演算、比較演算、関数、...26
OpenTelemetry対応(graph)27● 補完機能付きクエリエディタ● 凡例表示の工夫● 開発中の画面○ https://mackerel.io/ja/blog/entry/meetup14-1
28まとめ
まとめ● 現代ではメトリックのメタデータが必要● OpenTelemetryでプラグイン競争が終わる● メタデータ対応を実装した○ 転置インデックスと新たなEngineが必要になるのが大きな違い29
まとめ● 今後のMackerelはマルチディメンジョン○ 任意の次元で引ける新しいダッシュボードが主役● OpenTelemetry=入力データは競合間で同じ○ いかに見やすく、使いやすくするかの勝負○ チームで取り組むためのベストプラクティスを提供するプロダクトとして、引き続き開発していきます30