Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
モノレポ開発のエラー、誰が見る?Datadog で実現する適切なトリアージとエスカレーション
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Shota Iwami
February 11, 2025
Technology
1.8k
7
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
モノレポ開発のエラー、誰が見る?Datadog で実現する適切なトリアージとエスカレーション
システムの可視化と最適化をDatadogと学ぶ
登壇資料
https://rosca.connpass.com/event/344126/
Shota Iwami
February 11, 2025
More Decks by Shota Iwami
See All by Shota Iwami
モノレポにおけるエラー管理 ~Runbook自動生成とチームメンションの最適化
biwashi
2
1.1k
OpenTelemetry の Log を使いこなそう
biwashi
7
2.2k
Monorepo Error Management: Automated Runbooks and Team-Targeted Alert Distribution
biwashi
2
1.2k
スタートアップ創業期を支えるオブザーバビリティ基盤のこれまでとこれから
biwashi
10
1.7k
k6を活用した再現性・拡張性の高い負荷試験基盤の構築
biwashi
13
4.4k
Datadogマニアック機能活用術
biwashi
7
4.7k
feature flag と OpenTelemetry
biwashi
7
2.5k
OpenFeatureと自動生成を活用したフィーチャーフラグの宣言的集約管理
biwashi
20
7.6k
Unified Diff 形式の差分から Go AST を構築して feature flag を自動計装する
biwashi
11
1.6k
Other Decks in Technology
See All in Technology
SREへの勘違いに気づいた後の話
tomodakengo
0
120
What the customer really needed
kawaguti
PRO
3
220
The Knowledge Spine: A Machine-Executable Ontology for Governed Marketing Activation
vananth22
0
120
あけおめLINE 傾向とその対策
nasa9084
0
190
サーバーレスをどこまで使う? WebRTC対戦ゲームで選んだVPSとの共存設計
kaidouji85
0
270
絵ではじめるKubernetesセキュリティ
aoi1
4
690
アプリログインとWeb認証基盤をつなぐ ASWebAuthenticationSession 作法
shimastripe
1
360
Genieを崇めよ
kameitomohiro
0
170
AIに任せた品質は、誰が見立てるのか - AI時代のテストマネジメント
nakanao
3
2.7k
おい、エージェントを使って終わらせろ
nwiizo
2
830
ユーザー価値を届け続けるためにウォンテッドリーが大切にしている文化
kotaminato
0
190
AIで社員の自主発信に広報目線を組み込む
_mossann_t
0
140
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Heart Work Chapter 1 - Part 1
lfama
PRO
10
36k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.8k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
240
Technical Leadership for Architectural Decision Making
baasie
3
570
Typedesign – Prime Four
hannesfritz
42
3.2k
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
440
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
680
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
Deep Space Network (abreviated)
tonyrice
0
310
Transcript
モノレポ開発のエラー、誰が見る? Datadog で実現する適切な トリアージとエスカレーション newmo株式会社 岩見彰太 github: @BIwashi x: @B_Sardine
© 2025 newmo | #roscafe
自己紹介 岩見彰太 Software Engineer @newmo株式会社 Platform Team CyberAgent → newmo
好きな Datadog の機能:Error Tracking GitHub: BIwashi X: @B_Sardine © 2025 newmo | #roscafe 2
本日のテーマ モノレポ開発における エラー管理とトリアージの最適化 © 2025 newmo | #roscafe 3
Monorepo Development newmo ではモノレポで開発を行っている 全てのアプリケーションやマイクロサービスのコードを単一のリポジトリで管理 マイクロサービスとしての独立性を維持 開発効率と保守性の両立 背景 © 2025
newmo | #roscafe 4
Error Monitor の現状 Log Monitor アプリケーションログに対して、クエリした結果を通知 ログレベルをエラーにすべきではないところが残存 Monitor のクエリで -
を使用して随時に除外 クエリにログファセットが多く使用 使用自体は問題ないが、予約済み属性(e.g. service / env / version )を使用するところも facet になっ ており保守が大変 @gcp.project_id:hoge-dev
[email protected]
:"hoge が発生しました" -@code:foo ・・・ 背景 © 2025 newmo | #roscafe 5
Log Monitor と運用の課題 重要度の判定と除外 開発中はログが発生しても即座に修正まで行えないこともあった 重要なエラーも軽微なエラーも同一に通知されチャンネルの流量が増大 除外するためのクエリ修正が増加 オーナーシップの明確化 エラーがどのマイクロサービス起因なのかが分かりにくい マイクロサービスのオーナーが確認するまでは放置されがちに…
背景 © 2025 newmo | #roscafe 6
Log Monitor と運用の課題 重要度の判定と除外 開発中はログが発生しても即座に修正まで行えないこともあった 重要なエラーも軽微なエラーも同一に通知されチャンネルの流量が増大 除外するためのクエリ修正が増加 適切にトリアージができていない オーナーシップの明確化 エラーがどのマイクロサービス起因なのかが分かりにくい
マイクロサービスのオーナーが確認するまでは放置されがちに… 適切にエスカレーションができていない 背景 © 2025 newmo | #roscafe 7
課題 エラーの適切なトリアージ エラーのオーナーを明確化 © 2025 newmo | #roscafe 8
エラーの適切なトリアージ エラーを適切に選別する エラーを種類ごとに分類 重要度やステータスを個別管理 通知対象から適切に除外 エラー単位で除外 エラーのオーナーを明確化 適切にマイクロサービスを特定 attribute を適切に指定
オーナーに適切に通知 Error Message やグループメンションを活用 課題 © 2025 newmo | #roscafe 9
エラーの適切なトリアージ Error Tracking Case Management エラーを適切に選別する エラーを種類ごとに分類 重要度やステータスを個別管理 通知対象から適切に除外 エラー単位で除外
エラーのオーナーを明確化 Reference Tables Log Pipeline 適切にマイクロサービスを特定 attribute を適切に指定 オーナーに適切に通知 Error Message やグループメンションを活用 課題 © 2025 newmo | #roscafe 10
エラーの適切なトリアージ Error Tracking Case Management © 2025 newmo | #roscafe
11
Error Tracking エラーログに含まれている 特定の attibutes を元に Datadog がエラーを選別 error.message error.stack
error.kind Error Tracking 引用: Datadog Error Tracking Backend © 2025 newmo | #roscafe 12
Issue エラーは Issue という単位で選別される Status という属性を持っている Error Tracking © 2025
newmo | #roscafe 13
Issue Status 4種類のステータスを持っている Error Tracking © 2025 newmo | #roscafe
14
For Review 問題が新規発生 or リグレッションして確認が必要な状態 Reviewed トリアージ済、現在修正中の状態 Ignored 何かアクションする必要がない状態 基本的に
Error で表示すべきではないもの Resolved エラーを修正した状態 Error Tracking © 2025 newmo | #roscafe 15
Monitor の設定 Logs ではなく Error Tracking Error Tracking © 2025
newmo | #roscafe 16
New Issue を選択 新規の Issue が 作成 or リグレッションされた 時に通知
Error Tracking © 2025 newmo | #roscafe 17
New Issue の対象 New Issue の対象は新規発生した or リグレッションした Issue のみ
リグレッション:一度 Resolved になった Issue が再発した時 Automatic resolution Datadog は以下の条件で自動的に Issue の Status を For Review -> Resolved に変更する 最後に issue の error が発生したのが14日以上前のバージョンで新しいバージョンで同様のエラー が初めて発生 もし version tag が存在してないなかった場合、14日以内にその issue にエラーが発生していな い場合 Error Tracking © 2025 newmo | #roscafe 18
Regression Detection 一度 Resolved になった Issue が再発した時に自動で For Review に変更
Regression というタグがつけられる Error Tracking 引用: Error Tracking | Datadog © 2025 newmo | #roscafe 19
Error Tracking 引用: Issue States in Error Tracking © 2025
newmo | #roscafe 20
Case Management チケットを作成して、Issue を管理 Error Tracking と連携して、Error Issue に紐づいた Case
を作成可能 エラー発生理由や紐づくチケットなど を記載可能 Case Management © 2025 newmo | #roscafe 21
余談:Workflow Automation で Linear と Casa Management 連携(構想) Casa Management
ではデフォルトで Jira, ServiceNow と連携が可能 Linear を使用しているが、Datadog では公式で対応していない しかし Workflow Automation には Case Management のトリガーが存在 Linear 連携を自作可能(なはず) Case Management © 2025 newmo | #roscafe 22
Case Management © 2025 newmo | #roscafe 23
トリアージの流れ © 2025 newmo | #roscafe 24
1. Slack の通知を確認 Slack の通知を確認 Error 内容の概要を確認して、Issue ペ ージに飛ぶ トリアージ
© 2025 newmo | #roscafe 25
2. Issue を確認 message や stack trace な どから原因を特定 状況によって
Status を 変更 トリアージ © 2025 newmo | #roscafe 26
原因が特定でき、修正が必要そうな場合 REVIEWED に変更(14日間は通知が来ません) Actions → Create a case で case
を作成して、修正用の Liner のチケットを張るなどして紐づけておく 原因が特定できず、かつ発生頻度が非常に少ない場合 RESOLVED に変更(再度発生したら即座に regression として通知される) Actions → Create a case で case を作成して、発生条件やなぜ一旦放置としたかなどの理由をメモとして 記載しておく 原因も特定できているが、基本的に直す予定がない場合 IGNORED に変更(今後 error tracking 関係の Monitor の対象外になる) Actions → Create a case で case を作成して、放置理由を記載する トリアージ © 2025 newmo | #roscafe 27
3. Case を作成 エラーの原因や修正方法な どを記載 チケットを作成して、修正 用のチケットを張るなどし て紐づけておく トリアージ ©
2025 newmo | #roscafe 28
トリアージ © 2025 newmo | #roscafe 29
エラーのオーナーを明確化 Reference Tables Log Pipeline © 2025 newmo | #roscafe
30
マイクロサービス開発メンバーの Slack ユーザーグループにメンションをしたい アラートチャンネルには、全てのマイクロサービスのエラーが通知される マイクロサービスごとにチャンネルを分けることもできるが、まだそれをやるまでの規模ではない せっかく Monorepo なので、チャンネルもできるだけ分割しないで進めたい 開発メンバーも流動的に移動している オーナーメンバーがトリアージできていなかった場合はエスカレーションしたい
マイクロサービス開発メンバーの Slack ユーザーグループにメンションをしたい Error Tracking の Issue の service(マイクロサービス単位)ごと オーナーを明確化 © 2025 newmo | #roscafe 31
問題 Datadog の Monitor での Slack ユーザーグループへの通知はグループ ID を指定する必要がある <!subteam^GROUP_ID>
という形式で指定する必要がある log.attributes.service でマイクロサービス名が特定できているが、そこに紐づくグループ ID がないの で、メンションできない オーナーを明確化 © 2025 newmo | #roscafe 32
Reference Tables Datdog にすでにある情報に メタデータを追加することができる csv 形式で指定 データソースは直接 Upload 以外に
も、S3 / GCS / Azure Storage を指定 可能 Reference Tables © 2025 newmo | #roscafe 33
Reference Tables で Slack User Group ID を紐付ける csv に紐付けを記載
csv は github で管理 変更されたら GCS を更新 更新された csv を Datadog が自動反映 service,id,name component.hoge,aaaabbbb1234,alert-server-component-hoge component.fuga,cccdddd4567,alert-server-component-fuga component.piyo,eeefff8901,alert-server-component-piyo . . . Reference Tables © 2025 newmo | #roscafe 34
Lookup Processor で Reference Tables を指定 ログの service.name から Slack
User Group ID を反映 ログに Slack User Group ID が含まれるよう になる Reference Tables © 2025 newmo | #roscafe 35
Monitor の Message で指定 ログの attributes に group id が追加されて
いるのでそれを指定 Reference Tables © 2025 newmo | #roscafe 36
動的にメンションする Slack User Group を変更 マイクロサービス名によってメンショ ン先を変える Reference Tables ©
2025 newmo | #roscafe 37
まとめ © 2025 newmo | #roscafe 38
まとめ エラーの適切なトリアージ Error Tracking を使用して適切にエラーを選別 Status を活用してトリアージ Case Management でエラーの現状とチケットを紐付け
エラーのオーナーを明確化 Reference Tables でマイクロサービス名と Slack User Group ID を紐付け エラーによってメンション先を変えることで、オーナーに適切に通知 Reference Tables © 2025 newmo | #roscafe 39