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