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
ETLサービスの活用を支えるインシデント対応の工夫
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Momoka Komatsu
June 07, 2023
Programming
1.6k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ETLサービスの活用を支えるインシデント対応の工夫
primeNumberさんとGMOペパボのデータエンジニアリング勉強会のLT資料です
Momoka Komatsu
June 07, 2023
More Decks by Momoka Komatsu
See All by Momoka Komatsu
一歩踏み出す / step-out-of-fear
usamomokawa
1
920
ペパボ新卒エンジニア研修2020 成果発表会 / pepabo newcomer training 2020
usamomokawa
0
1.5k
Other Decks in Programming
See All in Programming
SONY CISC-NEWS NWS-1750 + NWB-225 フレームバッファの NetBSD/news68k ドライバ実装 / OSC2026Hiroshima
tsutsui
0
120
XHTMLが残したもの
yosuke_furukawa
PRO
2
810
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
3
350
更なる可用性を求めて、5年間運用したKotlinのアプリケーションをGoでリプレイスする話
ken_tunc
0
280
数年滞っていたダークモード対応をおよそ2週間で完了させる
chigichan24
0
720
wkhtmltopdfの次どうするか問題2026
willnet
2
1.3k
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
130
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
280
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
4.7k
From 6 People Classroom Meetup to 100 People Regional Conference / FOSS4G Hiroshima 2026
furukawayasuto
0
210
【高い買い物LT会】初任給で話題の国産フィジカルAIを買った話
akagami
PRO
0
160
テストを司るデーモンに会いに行く 〜隔離した仮想マシンでテストを通すまで〜
h1d3mun3
1
440
Featured
See All Featured
Optimizing for Happiness
mojombo
378
71k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
400
Scaling GitHub
holman
464
140k
Optimising Largest Contentful Paint
csswizardry
37
4k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
430
Game over? The fight for quality and originality in the time of robots
wayneb77
1
280
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
430
Testing 201, or: Great Expectations
jmmastey
46
8.3k
The browser strikes back
jonoalderson
0
1.7k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
580
Paper Plane (Part 1)
katiecoart
PRO
2
11k
Transcript
1 ETLサービスの活用を支える インシデント対応の工夫 小松 ももか / GMO PEPABO inc. 2023.06.05 データエンジニアリング合同勉強会
GMOペパボ株式会社 技術部データ基盤チーム エンジニア 2020年 新卒入社 2 自己紹介 小松 ももか Momoka
Komatsu • データエンジニア • Twitter : @UsaMomokawa • 「ザ・スーパーマリオブラザーズ・ムービー」 よかったです
3 • Cloud Composer は、Airflow をベースとした フルマネージドワークフローオーケストレーションサービス ◦ Apache Airflow
は Python でワークフローを構築するオープンソースプロジェクト • Bigfoot 内外のデータ操作をコントロールする役目を負っている 今日は Cloud Composer の話をします
• ペパボの全社データ基盤 • ペパボにおけるデータの収集、分析、活用を支えている 4 4 Bigfoot 【Bigfootくん】 データ基盤「Bigfoot」のマスコットキャラクター
• インターネットサービスを多数運営している ◦ ホスティング / EC支援 / ハンドメイド 5 5
GMOペパボ
• ペパボの全社データ基盤 • ペパボにおけるデータの収集、分析、活用を支えている • BigQuery を中心に構築されている 6 6 Bigfoot
【Bigfootくん】 データ基盤「Bigfoot」のマスコットキャラクター
7 Bigfoot 概略図 logs metrics GitHub issues databases tbls BigQuery
bigfoot/platform Cloud Storage Looker Studio bigfoot/cloud-composer Cloud Composer dags/ tbls-build base tbls.yml files patch files ( *.yml, *.json ) patched tbls.yml files tbls-meta tbls data catalog bigfoot/data-catalog Send analysis results Verne Vertex AI Pub/Sub Dataflow
8 Bigfoot 概略図 logs metrics GitHub issues databases tbls BigQuery
bigfoot/platform Cloud Storage Looker Studio bigfoot/cloud-composer Cloud Composer dags/ tbls-build base tbls.yml files patch files ( *.yml, *.json ) patched tbls.yml files tbls-meta tbls data catalog bigfoot/data-catalog Send analysis results Verne Vertex AI Pub/Sub Dataflow Cloud Composer
ある日突然、 Cloud Composer 本番環境 が壊れた💥💣 ...どうなる?
Cloud Composer 10 Cloud Composer の本番環境が壊れたら? データ抽出処理 データ集計処理 データ取込処理 データ集計処理
データ集計処理 データソース BigQuery
Cloud Composer 11 Cloud Composer の本番環境が壊れたら? データ抽出処理 データ集計処理 データ取込処理 データ集計処理
データ集計処理 データソース BigQuery
Cloud Composer 12 Cloud Composer の本番環境が壊れたら? データ抽出処理 データ集計処理 データ取込処理 データ集計処理
データ集計処理 データソース BigQuery
Cloud Composer 13 Cloud Composer の本番環境が壊れたら? データ抽出処理 データ集計処理 データ取込処理 データ集計処理
データ集計処理 データソース BigQuery
14 データ同期処理、集計処理が 全部止まってしまう😥 データの利用者が、正しいデータを参照できなくなる可能性がある (データの利用者 = サービスのユーザー、社内のパートナーなど)
過去のインシデント対応の記録 * ここでは、Cloud Composer の本番環境が停止していた間に生じたデータ欠損について、可能な限り復旧した状態を指す 15 1年前に Cloud Composer の本番環境が壊れた😖
過去のインシデント対応の記録をふりかえる - 影響範囲の調査開始から共有まで 約3時間かかることもあった - データ欠損の完全復旧*まで 2日かかったこともあった 1年前
- 影響範囲の調査開始から共有まで 約3時間かかることもあった - データ欠損の完全復旧*まで 2日かかったこともあった 過去のインシデント対応の記録 * ここでは、Cloud Composer
の本番環境が停止していた間に生じたデータ欠損について、可能な限り復旧した状態を指す 16 過去のインシデント対応の記録をふりかえる 1年前に Cloud Composer の本番環境が壊れた😖 1年前 - 影響範囲の調査開始から共有まで 30分〜1時間でできるようになった - データ欠損の完全復旧まで 半日で完了できるようになった 最近
- 影響範囲の調査開始から共有まで 約3時間かかることもあった - データ欠損の完全復旧*まで 2日かかったこともあった 過去のインシデント対応の記録 * ここでは、Cloud Composer
の本番環境が停止していた間に生じたデータ欠損について、可能な限り復旧した状態を指す 17 過去のインシデント対応の記録をふりかえる 1年前に Cloud Composer の本番環境が壊れた😖 1年前 - 影響範囲の調査開始から共有まで 30分〜1時間でできるようになった - データ欠損の完全復旧まで 半日で完了できるようになった 最近 対応がうまくなってきた感覚がある💡
とはいえ、すぐにうまくなったわけではない 18 - インシデントが起きたら、ふりかえりをしてポストモーテム(事後分析)を書く - アクションアイテム(再発防止策)を出す - アクションアイテムを達成する ...を地道に繰り返していくうちに、だんだんインシデント対応がうまくなっていったのだと思います
とはいえ、すぐにうまくなったわけではない 19 - インシデントが起きたら、ふりかえりをしてポストモーテム(事後分析)を書く - アクションアイテム(再発防止策)を出す - アクションアイテムを達成する ...を地道に繰り返していくうちに、だんだんインシデント対応がうまくなっていったのだと思います 過去のインシデント対応記録をふりかえって、
「再発防止策をやったおかげで、うまくいった 👏」 と思えた工夫をいくつか紹介します 🗒
20 インシデント対応の工夫
21 インシデント対応の工夫 GMOペパボのインシデント対応マニュアルより引用 📝 「インシデント」の定義 機密性の問題 情報資産のうち重要性1、2に属するものについて、アク セス権限がない人が閲覧することができた 完全性の問題 情報資産全てを対象にして、なくなってしまった
完全性の問題 情報資産全てを対象に改ざんされてしまった 可用性の問題 情報資産全てを対象に、一時的に利用できない状態が発 生しお客様に影響が発生した Cloud Composer の本番環境が壊れると、可用性に影響が出る
22 インシデント対応の工夫 事象検知 影響範囲 の特定 チーム間の 役割分担
23 インシデント対応の工夫 事象検知 影響範囲 の特定 チーム間の 役割分担
事象検知 24 過去のインシデント対応で、うまくいかなかったこと - 事象を検知する手段が不足していて、事象に気がつかなかった - 検知していたが通知を見逃した - Slack 通知一度きりだと、時間帯によっては気づかないことがある
インシデント対応の工夫 事象が発生したら、早期に検知して対応したい 「気を付ける」のではなく、自然と気がつくような仕組みで解決したい
事象検知 25 過去のインシデント対応で、うまくいかなかったこと - 事象を検知する手段が不足していて、事象に気がつかなかった -> 🔍 事象を検知する手段を増やす - 検知していたが通知を見逃した
-> 🔍 通知を見逃さないような仕組みを用意する インシデント対応の工夫 事象が発生したら、早期に検知して対応したい 「気を付ける」のではなく、自然と気がつくような仕組みで解決したい
事象検知: 事象を検知する手段を増やす 26 アラートを適切に設定する 例えば、Cloud Monitoring のアラート ポリシーを設定する - 「Cloud Composer
の本番環境が正常に動作しているか?」 - 「Pub/Sub のメッセージは適切に捌けているか?」 問題を検知したら、GitHub Issue を作成する インシデント対応の工夫
Cloud Composer DAG が作ったデータに対するチェックを行う DAG (Directed Acyclic Graph) 有向非巡回グラフ 27
b a c 💡 - 向きがある - 循環がない インシデント対応の工夫 事象検知: 事象を検知する手段を増やす Task を繋ぐことで依存関係を定義する
Cloud Composer DAG が作ったデータに対するチェックを行う DAG (Directed Acyclic Graph) 有向非巡回グラフ 28
b a c Task を定義する時は、テンプレートとして事前定義された Operator を使う - BigQueryInsertJobOperator: BigQueryへSELECTを実行して、その結果を別テーブルに保存する - GoogleCloudStorageToBigQueryOperator: GCSに保存されているファイルのデータをBigQueryへ登録する 💡 - 向きがある - 循環がない インシデント対応の工夫 事象検知: 事象を検知する手段を増やす Task を繋ぐことで依存関係を定義する
29 Cloud Composer DAG が作ったデータに対するチェックを行う DAG の処理の末尾で、 バリデーションクエリを投げる仕組み*を導入した インシデント対応の工夫 事象検知: 事象を検知する手段を増やす
30 Cloud Composer DAG が作ったデータに対するチェックを行う DAG の処理の末尾で、 バリデーションクエリを投げる仕組み*を導入した validation b
a c * 実態は、渡されたSQLを実行する KubernetesPodOperator インシデント対応の工夫 事象検知: 事象を検知する手段を増やす
31 Cloud Composer DAG が作ったデータに対するチェックを行う DAG の処理の末尾で、 バリデーションクエリを投げる仕組み*を導入した #バリデーションクエリの例 ASSERT
(( SELECT COUNT(*), FROM table ) > 0) ; validation b a c * 実態は、渡されたSQLを実行する KubernetesPodOperator 1件以上のレコードがあれば成功する インシデント対応の工夫 事象検知: 事象を検知する手段を増やす
32 Cloud Composer DAG が作ったデータに対するチェックを行う DAG の処理の末尾で、 バリデーションクエリを投げる仕組み*を導入した バリデーションに失敗したら、DAG が失敗する
DAG が失敗したら、GitHub Issue を作成する #バリデーションクエリの例 ASSERT (( SELECT COUNT(*), FROM table ) > 0) ; validation b a c * 実態は、渡されたSQLを実行する KubernetesPodOperator 1件以上のレコードがあれば成功する インシデント対応の工夫 事象検知: 事象を検知する手段を増やす
事象検知 33 - 「Cloud Monitoring でアラートを検知したら、GitHub Issue を作成する」 - 「DAG
が失敗したら、GitHub Issue を作成する」 ... など 基本的な方針として、何かが起きたら、GitHub Issue を作成してストックする そしてGitHub Issue の一覧は定期的に自動通知して、見逃しを防ぐ工夫をしている インシデント対応の工夫 GitHub Issue の通知には、特定ラベルが付いたIssueを特定時間にSlackに通知する仕組み linyows/github-issues-notice を利用しています
事象検知 34 - アラートを適切に設定する - データに対するチェックを行う - 何かが起きたら、GitHub Issue を立てる
このような工夫によって、 事象が発生したときに、以前よりも早く検知ができるようになった インシデント対応の工夫
事象を検知したら、みんなに情報共有 35 🔗インシデントレスポンスを自動化で支援する Slack Bot で人機一体なセキュリティ対策を実現する - SEASON2 インシデント対応の工夫
36 - Slackチャンネルの作成 - 初動対応チーム の招集 * * サービス、部門ごとに初動対応チームを編成している。 技術職、カスタマーサポート職、マネージャー職などが含まれたSlack
グループ インシデント対応訓練のSlack通知 インシデント対応の工夫 Slack チャンネルを見れば、これまでの調査内容を追うことができる 事象を検知したら、みんなに情報共有
37 インシデント対応の工夫 事象検知 影響範囲 の特定 チーム間の 役割分担
影響範囲の特定 38 人力で頑張るのは、とても時間がかかる... たくさんのファイルを読み解いて、手作業で影響範囲をまとめていた - 処理の依存関係 - 実行周期 - 同期方法
など ... 実行周期 同期方法 必要な情報が 散らばっている 影響範囲のまとめ インシデント対応の工夫
影響範囲の特定 39 データリネージの仕組みで、影響のあるジョブやテーブルを確認する インシデント対応の工夫 🔗データリネージの組織導入事例と今後の戦略
影響範囲の特定 40 データリネージの仕組みで、影響のあるジョブやテーブルを確認する # users テーブルの下流テーブルを抽出する例 $ stairlight down -c
config -r -t users [ "hoge", "fuga", ... ] インシデント対応の工夫
影響範囲の特定 41 データリネージの仕組みで、影響のあるジョブやテーブルを確認する # users テーブルの下流テーブルを抽出する例 $ stairlight down -c
config -r -t users [ "hoge", "fuga", ... ] インシデント対応時には、他にも ... - xx テーブルに依存する SQLファイル - xx テーブルに依存する Cloud Composer DAG といった情報を抽出している 影響範囲の特定にかかる時間が減少 ↓ インシデント対応の工夫
影響範囲の特定 42 Table A Table B Table C Table D Table E DAG 1 DAG
2 「誰がどのテーブルを見ているか分からない」 ので、 - テーブルが壊れたことを誰に伝えたらよいか - どの処理を優先して復旧させればよいか 見当をつけるのが難しい どちらを優先して復旧させる? インシデント対応の工夫
影響範囲の特定 43 クエリ実行ログを見て、「誰が困っているか」を把握する テーブル名 参照数 Table E 1000 Table D
800 Table A 1 Table B 1 Table C 1 テーブル参照数を抽出する例 INFORMATION _SCHEMA をもとに、 テーブル参照数やテーブルを参照している人を 取得するViewを作りました テーブル名 実行したクエリ クエリを実行した人の メールアドレス Table E ... ... Table E ... ... テーブルを参照している人を抽出する例 インシデント対応の工夫
44 インシデント対応の工夫 事象検知 チーム間の 役割分担 影響範囲 の特定
チーム間の役割分担 45 - 影響範囲をスプレッドシートで共有し、ジョブ再実行の判断を分担する - DAGやクエリの実装と見比べて、対応の優先度や再実行の判断を行う - GitHub Issue と
Assign 機能を使って、復旧対応を分担する - 失敗したジョブは GitHub Issue で可視化されているので、分担して再実行 - 必要に応じて他のチームメンバーの手を借りる - sssbot が作成した Slack チャンネルに人を呼ぶ - Slack チャンネルを見れば、これまでの調査内容を追うことができる ツールをうまく使って、みんなと協力する インシデント対応の工夫
インシデント対応における工夫を紹介しました - 事象検知 - 影響範囲の特定 - チーム間の役割分担 まとめ 46 すぐにできるようになったわけではなく、
ポストモーテム(事後分析)を書いて、アクションアイテム(再発防止策)を出して、地道に対応していった 結果として、発生から復旧までの時間を短縮できるようになりました インシデント対応の工夫
これからやっていきたいこと 47 - カラム単位の異常検知 値の傾向が急激に変化した時に検出する(例: NULLの割合が急に増加した*) 検知ルールの管理方法をわかりやすく管理できるような仕組みが作れると良さそう - 職種や部署を超えて、みんなとうまく協力するための仕組みづくり データ基盤チームの力だけでは単純に手数が足りないことがあったり、わからない部分があったりする
専門分野は得意な人に任せて、みんなの力で対応できるようにしたい インシデント対応の工夫 💡最近のトピック: データ欠落を検知できるようになりました。 カラム単位でNULLの割合を見て、割合が急激に変化したら通知するような処理を GitHub Actions で定期実行しています。
48 ETLサービスの活用を支える インシデント対応の工夫 小松 ももか / GMO PEPABO inc. 2023.06.05 データエンジニアリング合同勉強会