GigaViewerにおけるMackerel APM導入の裏側
by
koudenpa
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
GigaViewerにおける Mackerel APM導入の裏側 id:koudenpa 2025-05-28 Mackerel APM リリースパーティ 1
Slide 2
Slide 2 text
概要 ● GigaViewerにおけるMackerel APM導入の裏 側 - 自社ソリューションとOpenTelemetry活 用で実現した分散トレースの今とこれから ○ Geminiに「アウトラインからタイトルを考案して」 と頼んだらタイトルスライドに収まらなかったもの ● 概ねこの通りの内容 2
Slide 3
Slide 3 text
自己紹介 ● id:koudenpa ○ コウデン ● はてなでの役割 ○ マンガメディア開発チーム ○ テックリード ■ エンジニアリングを広く見る 3
Slide 4
Slide 4 text
Mackerelとの付き合い ● 中途での入社前から使っていた ● 入社後も公私で普通に使っていた ● 結果、アンバサダーになり損ねた 4
Slide 5
Slide 5 text
Mackerel アンバサダープログラム ● https://mackerel.io/ja/blog/entry/amba ssador/about ● これ(2019年1月) ● 入社(2018年11月) 5
Slide 6
Slide 6 text
Mackerel以外のAPM ● 私用ではApplication Insights ○ Microsoftの技術スタック ○ https://koudenpa.hatenablog.com/search?q=Ap plication+Insights ● 他は後述のX-Ray程度 6
Slide 7
Slide 7 text
発信傾向 ● どうやら自分の発表は ● 「あたりまえのことしてます」 ● になりがち ○ 今回も多分そう ○ つまりOpenTelemetryでのトレース1事例 7
Slide 8
Slide 8 text
目次 ● 導入前の状態・状況 ● 導入感 ● 導入直後感 ● エピソード ● これから 8
Slide 9
Slide 9 text
9 導入前の状態・状況
Slide 10
Slide 10 text
GigaViewer ● そこそこ歴史のあるWebマンガビューワ ● 最古のPR(プレスリリースの方) ○ 2017-01-18 ○ https://hatena.co.jp/solutions/gigaviewer 10
Slide 11
Slide 11 text
GigaViewerのホスティング ● AWSのマネージドサービス ○ CloudFront/ALB/RDS Aurora/etc ● コンピューティングは主にECS Fargate ○ 過去には主にEC2 11
Slide 12
Slide 12 text
Mackerelの利用状況 ● メトリクス収集 ○ mackerel-agent/container-agent ○ AWSインテグレーション ● 可視化、監視 ● 身近、日常 12
Slide 13
Slide 13 text
APMの状況 ● AWS X-Ray ○ パフォーマンス上のボトルネック特定 ○ 負荷試験時のパフォーマンス確認 ● 非日常 13
Slide 14
Slide 14 text
14 導入感
Slide 15
Slide 15 text
Why Mackerel ● 率直には自社ソリューションなので 15
Slide 16
Slide 16 text
Why OpenTelemetry ● 分散トレース ○ 今後システムを分散化していく予定がある ● 今後の業界標準の仕組み ○ 検討中のミドルウェアもOpenTelemetry対応 ● ちょうど自社で賄えるように ○ なのでどうせならMackerelで 16
Slide 17
Slide 17 text
17 導入直後感
Slide 18
Slide 18 text
APMの現在地 ● 一番素朴な分散トレース ○ フロントエンドと主バックエンドのトレース ○ Next.js SSR -> GraphQL API ● 今後追加するロールのトレースレディ ○ GraphQL FederationのRouter ■ GraphQL APIの段階的マイグレーション検討中 18
Slide 19
Slide 19 text
一番素朴な分散トレース 19 Next.js SSR GraphQL API
Slide 20
Slide 20 text
今後追加するロールのトレースレディ 20 Next.js SSR GraphQL Router GraphQL API この辺に移行後 GraphQL APIが増 える見込み
Slide 21
Slide 21 text
導入直後感 ● APMが身近になった ○ 元々身近だったところの隣に生えた ○ 概観からトレースへの移動をしやすい ● それ以上は……「これから」 21
Slide 22
Slide 22 text
22 エピソード
Slide 23
Slide 23 text
エピソードいくつか ● OpenTelemetry、簡単ではない ● クライアントからみたDBクエリの統計 ● APMが身近になった(エピソード) 23
Slide 24
Slide 24 text
OpenTelemetry、簡単ではない ● Mackerel好きな理由 ○ mackerel-agentの導入簡単 ○ メトリック管理簡単 ● OpenTelemetry計装、otel-collector導入 ○ 簡単ではない…… 24
Slide 25
Slide 25 text
簡単ではない ● OpenTelemetry自体 ○ 仕様が(まだ)安定していない ○ 実装が仕様通りとは限らない ● otel-collector ○ 要否やどこでどう動かすのかまで ○ 選択肢が多すぎる 25
Slide 26
Slide 26 text
サンプリングレート ● 全量だと相当量->間引きたい ● トレース予算に合わせた量にサンプリング ○ X-Rayでのトレースがベース ○ 悲観的な割合で開始 26
Slide 27
Slide 27 text
今のところ ● otel-collector ○ ECSのサイドカーに配置 ■ X-Ray daemon/mackerel-container-agentなどでの慣れ ○ 最低限の設定 ● 経路 ○ バックエンドPerl ■ 元々あったX-Ray向けの実装 -> AWS X-Ray Receiver ○ 他 ■ 自動計装やミドルウェアの計装 -> otlp 27
Slide 28
Slide 28 text
MackerelとOpenTelemetry ● Mackerelでいい感じにOpenTelemetry ○ 主に例示がされているが? ● まだこなれていない感 ● こなれていくことを期待 ○ そのための社内FBは適宜やっていく 28
Slide 29
Slide 29 text
クライアントからみたDBクエリの統計 ● AuroraのPerformance Insights ○ DBサーバ上の所要時間統計 ○ これまで主に見ていたもの ● APMのデータベースタブ ○ クライアントアプリケーション上の所要時間統計 ○ 今回改めて目にするようになったもの 29
Slide 30
Slide 30 text
DBセッションの設定クエリが見えた 30 あるデータベースクエリ
Slide 31
Slide 31 text
たかが1ミリ秒、されど1ミリ秒 ● `SET`3回を1回のクエリに ● 結果、全リクエストが1ミリ秒程度高速化 ○ チームメンバーからの反応 ○ 「まぁ、遅くなるよりはいいですよね」 31
Slide 32
Slide 32 text
APMが身近になった ● 元々身近だったところの隣に生えた ○ Mackerelは元々見ていた ○ パフォーマンスなどを気にしてメトリックを見にき て、隣にAPMがある 32
Slide 33
Slide 33 text
APMが身近になった ● 概観からトレースへの移動をしやすい ○ 「HTTPサーバー」「トレース」タブ ○ 実際見たい「遅いエンドポイント」「遅いクエリ」 ○ 現状ちょうどよい 33 素朴に便利
Slide 34
Slide 34 text
APMが身近になった ● 実際見たい「遅いエンドポイント」「遅いク エリ」 ○ それぞれログの集計やDBの統計で見てはいた ○ APM機能で分かりやすく詳細(トレース)と繋がった ■ 遅いエンドポイントの中身 ■ 遅いクエリがどこから、どんな他のクエリと一緒に 34
Slide 35
Slide 35 text
35 これから
Slide 36
Slide 36 text
これから ● APMを活用する切っ掛けにはなった ● 身近になったAPMを日常に ○ 定期的にメトリクスを見ている場でAPMも見る ■ パフォーマンス改善ポイントのピックアップ、改善の追跡に 繋げる ● 新規要素追加時のパフォーマンス評価に活用 ○ GraphQL Federation導入に当たっての目途は立った 36
Slide 37
Slide 37 text
GigaViewerもよろしく 37 37