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
ノーコードAI開発SaaS裏側 〜GCPで完結!KPI分析指向のログ設計から可視化まで〜
Search
skmochi
August 21, 2023
Technology
26
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ノーコードAI開発SaaS裏側 〜GCPで完結!KPI分析指向のログ設計から可視化まで〜
skmochi
August 21, 2023
More Decks by skmochi
See All by skmochi
任意Pythonコード実行機能でセキュリティを守るため設計例
skmochi
0
120
Other Decks in Technology
See All in Technology
大型犬好きによるPugの紹介
yamanoku
1
160
エンタメ企業のM&Aを支えるデータ基盤 ― 統合から店舗のリアルタイム分析まで / Data Engineering Summit 2026
genda
0
200
今さら理解するウェブフォントver.2026
takanorip
3
900
Gemini Intelligence 入門 ― AppFunctions と Gemini Nano
takuroabe
0
290
AI駆動で「他アプリの音を加工できる」アプリを作った
satomasahiro2005
0
170
価値について
gree_tech
PRO
0
100
SAENM ~Jupyterで残すPoCの試行錯誤、未来の自分と仲間を助ける記録!~
terapyon
0
120
AI コーディングと人間の認知スループット / CTO Night & Day 2026 Morning Session / AI Coding and Human Cognitive Throughput
prog893
5
1.3k
Metadata - Section 1: HTML Basics
mohab1
0
120
V8のArray.prototype.flatを最大約20倍速くするまでと、巨大OSSへの大規模コミットの道のり
riyaamemiya
0
310
20261017福岡devIO 「AIは"良いダッシュボード"を作れるか?
jtakeda
0
190
Persisting Massive Data with Rails ~Designing for 60 billion rows, and fighting the bottlenecks~ Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
0
740
Featured
See All Featured
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
360
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.4k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
67k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.9k
Navigating Team Friction
lara
192
16k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.4k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
1k
The Cult of Friendly URLs
andyhume
79
7k
Transcript
ノーコードAI開発SaaSの裏側 〜GCPで完結!KPI分析指向の ログ設計から可視化まで〜 Yuki Sakamoto NTTコミュニケーションズ株式会社 # Cloud Operator Days
Tokyo 2023
- 自チームでKPI計測のためにログ設計~KPI可視化を行ったのでその実例をご紹介 します - GCPのサービス群に閉じる形で実現したので、GCPあるいはオンプレミスでサービ ス運用を行っていて、これからログを用いた KPI計測を行いたい人向け の内容に なります -
アプリケーションの言語はPythonを想定しています お話しすること
about me Yuki Sakamoto Software Engineer NTTコミュニケーションズ株式会社 イノベーションセンター ノーコードAI開発SaaSの開発全般を担当 2020/03
Join 機能開発 Now GKE対応 DevOps高度化 2021/03 2022/06 SREチーム発足
ノーコードAI開発ツール Node-AI 時系列データの前処理~AIモデル作成~予測まで 全てweb上でできるサービス 現在公開中 https://nodeai.io/ サービス概要 Node-AIの操作画面
サービス概要 操作デモ
KPIとは? - KPI: Key Performance Indicator - 目標到達のための計測可能な指標 - これが伸び悩んでいた場合は軌道修正が必要
- プロダクトオーナーは頻繁に確認したい KGI プレミアム会員の 月額課金収益 NSM 月間楽曲再生時間 KPI プレミアム会員数 KPI セッション数 /週 SpotifyのKPI例 (一部抜粋) ※1 ※1 https://amplitude.com/north-star/getting-started-running-a-north-star-workshop
Node-AIのKPI - 1人当たりのカード実行の成功回数 / 週 - ユーザがどれだけNode-AIを利用しているか - ユニークユーザ数 /
週 - どれだけ集客できているか KGI XXX NSM XXX KPI 1人当たりのカード 実行の成功回数 /週 KPI ユニークユーザ数 /週 Node-AIのKPI例 (一部抜粋)
課題 KPIをちゃんと計測してみたいんだけどできる? me プロダクトオーナー
課題 KPIをちゃんと計測してみたいんだけどできる? できらあ!(とりあえずログはCloud Loggingにあるから何とかなるやろ) me プロダクトオーナー
課題 KPIをちゃんと計測してみたいんだけどできる? できらあ!(とりあえずログはCloud Loggingにあるから何とかなるやろ) 全体の構成はこんな感じで! me プロダクトオーナー
課題 KPIをちゃんと計測してみたいんだけどできる? できらあ!(とりあえずログはCloud Loggingにあるから何とかなるやろ) 全体の構成はこんな感じで! ~~~~~ 実際にログを見てみる ~~~~~ me プロダクトオーナー
課題 KPIをちゃんと計測してみたいんだけどできる? できらあ!(とりあえずログはCloud Loggingにあるから何とかなるやろ) あれ、ログが構造化されていないから検索性が悪いな... 全体の構成はこんな感じで! ~~~~~ 実際にログを見てみる ~~~~~ me
プロダクトオーナー
課題 KPIをちゃんと計測してみたいんだけどできる? できらあ!(とりあえずログはCloud Loggingにあるから何とかなるやろ) あれ、ログが構造化されていないから検索性が悪いな... 全体の構成はこんな感じで! そういえば基盤がオンプレ版とGKE版の2種類あるけどどうやってまとめればいいんだ? ~~~~~ 実際にログを見てみる ~~~~~
me プロダクトオーナー
課題 KPIをちゃんと計測してみたいんだけどできる? できらあ!(とりあえずログはCloud Loggingにあるから何とかなるやろ) あれ、ログが構造化されていないから検索性が悪いな... 全体の構成はこんな感じで! そういえば基盤がオンプレ版とGKE版の2種類あるけどどうやってまとめればいいんだ? そもそも既存のログをどう組み合わせたらKPIが測れるのかよくわからないぞ... ~~~~~ 実際にログを見てみる
~~~~~ me プロダクトオーナー
課題 KPIをちゃんと計測してみたいんだけどできる? できらあ!(とりあえずログはCloud Loggingにあるから何とかなるやろ) あれ、ログが構造化されていないから検索性が悪いな... 全体の構成はこんな感じにしようかな そういえば基盤がオンプレ版とGKE版の2種類あるけどどうやってまとめればいいんだ? そもそも既存のログをどう組み合わせたらKPIが測れるのかよくわからないぞ ~~~~~ 実際にログを見てみる
~~~~~ me プロダクトオーナー うわああああ!どうすればいいんだ!!
最終的な構成 GKE版 Node-AI オンプレ版 Node-AI API サーバー Worker API サーバー
Worker ※ サンプル GCP Project: A GCP Project: B KPIの可視化 他にもマイクロサービスが複数あり 他にもマイクロサービスが複数あり
最終的な構成 (課題部分) GKE版 Node-AI オンプレ版 Node-AI API サーバー Worker API
サーバー Worker ※ サンプル GCP Project: A GCP Project: B KPIの可視化 ログを構造化
最終的な構成 (課題部分) GKE版 Node-AI オンプレ版 Node-AI API サーバー Worker API
サーバー Worker ※ サンプル GCP Project: A GCP Project: B KPIの可視化 トレース可能なロ グにする
最終的な構成 (課題部分) GKE版 Node-AI オンプレ版 Node-AI API サーバー Worker API
サーバー Worker ※ サンプル GCP Project: A GCP Project: B KPIの可視化 Cloud Loggingに 適したログ形式
最終的な構成 (課題部分) GKE版 Node-AI オンプレ版 Node-AI API サーバー Worker API
サーバー Worker ※ サンプル GCP Project: A GCP Project: B KPIの可視化 オンプレ環境 からログを転送
1. ログの構造化について 2. マイクロサービス間でもトレース可能なログの設計について 3. Cloud Loggingに適したログ形式について 4. オンプレ環境からCloud Loggingへのログ転送について
課題一覧
1. ログの構造化について 2. マイクロサービス間でもトレース可能なログの設計について 3. Cloud Loggingに適したログ形式について 4. オンプレ環境からCloud Loggingへのログ転送について
課題一覧
BigQueryへの保存前提でログをjson形式で構造化 - 方法1: python-json-loggerライブラリ - 今回はこれ前提で話を進めます - 方法2: Python用Google Cloud
Logging ライブラリ - 特にこだわりがないならこれがおすすめ - ログレベルや転送の設定が基本的に不要、ログ書き込み権限を付与するだけ timestamp api user card 2023-... api/v0/xxx user1 hoge … … … … Cloud Logging BigQuery ログルーター
開発過程でコンテナログなどを直接読む際は構造化ログだと不要な情報で無駄に文量 が増えてつらい そのため我々は見やすさの観点で商用環境は構造化ログ 、開発環境は非構造化ログ を出力するように設定しています あえて構造化しないことも必要 商用環境の構造化ログ 開発環境の非構造化ログ
- KPI計測のためにDBへアクセスすることは避けたい => オペレーションミス回避やDBへ不要な負荷をかけないために、極力ログだけで KPIを計測できるようにする - いざBigQueryでクエリ文を書こうとしても複雑なものだと難しい => ログの設計段階である程度KPIを意識したkey-value構造にしておくと、とりあえ ず後にクエリ文を書くのは楽になる
(できる範囲で) KPI内容を意識したログ設計にする
1. ログの構造化について 2. マイクロサービス間でもトレース可能なログの設計について 3. Cloud Loggingに適したログ形式について 4. オンプレ環境からCloud Loggingへのログ転送について
課題一覧
KPIによっては複数のマイクロサービスをまたぐ処理をトレースする必要がある その際は専用のユニークな IDを振って対応する 別マイクロサービス間でもトレース可能なログにする GKE版 Node-AI API サーバー Worker ログ例
{ "user": "xxx", "api": "api/v0/yyy", "traceID": "zzz" } ログ例 { "cardType": "欠損値補間", “result”: “success”, "traceID": "zzz" } task情報にtraceIDを入れて Workerに渡す KPI: 1人当たりのカード実行の成 功回数 / 週 を計測できる
BigQueryのクエリ文でトレース対象のログを紐付ける GKE版 Node-AI API サーバー Worker データセット service1 データセット service2
2つのデータセットをtrace_idで紐づけるクエリ文の例
1. ログの構造化について 2. マイクロサービス間でもトレース可能なログの設計について 3. Cloud Loggingに適したログ形式について 4. オンプレ環境からCloud Loggingへのログ転送について
課題一覧
ログレベルのvalueに対するkeyは”level” or “severity”にしないとGUI上で適切に表 示されない Cloud Loggingのログレベルに適したkey-valueを設定する {level_name: “ERROR”} として出力した場合 エラー表示にしたいのにinfoア
イコンとなってしまう ※ Cloud Loggingライブラリ使用の際は対応不要 keyを“severity”にすると jsonPayload項目に 載らないのでおすすめ {level: “ERROR”} として出力した場合
1. ログの構造化について 2. マイクロサービス間でもトレース可能なログの設計について 3. Cloud Loggingに適したログ形式について 4. オンプレ環境から Cloud
Loggingへのログ転送について 課題一覧
fluent bitを使ってCloud Loggingに転送する fluent bitをデプロイしてオンプレ環境のログをCloud Loggingに転送する設定を入れる - DaemonSet: ノード単位でログを送信 -
Sidecar: Pod単位でログを送信 Pod fluentbit ConfigMap fluentbit config Secret GSA key [OUTPUT] Name stackdriver [PARSER] Format json ログの書き込み権限 環境変数 GOOGLE_APPLICATION_ CREDENTIALS=key.json を設定 volumeMount ※ Cloud Loggingライブラリ使用の際は対応不要
備考: fluent bit vs fluentd https://docs.fluentbit.io/manual/about/fluentd-and-fluent-bit
KPIを計測できることで何が変わったか - リリースした機能がどのくらいプロダクト価値向上に寄 与したかがわかるようになった - 指標ベースにすることで開発する機能の優先順位を決 めやすくなった - ステークホルダーにプロダクトの状況を説明しやすく なった
※ サンプル
- スプリント毎のKPIを可視化する仕組みを作った - 最終的な構成から逆算してログ設計や転送設定などを行った - 楽したいならCloud Loggingライブラリを使うべき - 代替手段はpython-json-logger +
fluent bit - もしオンプレ or GCP基盤を利用していてまだKPI計測を行っていない、という方が いれば是非やってみてください まとめ