SlideShare ist ein Scribd-Unternehmen logo
1 von 38
Downloaden Sie, um offline zu lesen
Web API をデバッグするときに必要な

たったひとつのこと
2015/05/16 - Kanazawa.rb meetup 33
かしこいロギング
こたえ
かしこいロギング
こたえ
Web API の特徴
• 多数の構成要素
• ロードバランサ, リバースプロクシ, アプケーションサーバー,
DB ...
• プロセス, スレッド …
• 多数の並列処理
• 複数クライアント, 多重 API コール …
client
A
client
B
RP
RP
App
Server
App
Server
DB
DB
Process
α
・
・
・
・
・
・
・
・
・
・
・
・
Process
β
・
・
・
・
・
・
LB
client A からの
API コール x の
処理パスを特定して
それぞれの log を
目 grep して…
そんな装備で大丈夫か?
–T.K, 2013
“開発環境はそんな複雑じゃない。複数 Terminal
開いて log を tail しておけば十分。”
–T.K, 2014
“開発環境は複雑だった”
–T.K, 2015
“本当のバグは運用環境にこそ潜む”
かしこさの種
• ロギング全般
• いろいろある。おおい。
• おググりください。
• Web API に絞ると
• 集約と識別
集約と識別
集約と識別
ログの集約
• すでに様々なアプローチがある
• 古くは syslog
• イマドキは fluentd
集約と識別
ログの識別
• API Call を識別する
• 構成要素横断で識別
• サーバやプロセスをまたいでも識別できることが大事
• API Call 毎に識別
• クライアント毎ではなく Call 毎であることが大事
どうやって?
• 識別子を発行して構成要素間で伝搬
• だれが発行?
• どうやって伝搬?
だれが発行?
client
A
client
B
RP
RP
App
Server
App
Server
DB
DB
・
・
・
・
・
・
・
・
・
・
・
・
LB
APIクライアントに
もっとも近い構成要素
入れやすいのはこの辺
どうやって伝搬?
・
・
・
・
・
・
・
・
・
client
A
client
B
RP
RP
App
Server
App
Server
DB
DB
・
・
・
・
・
・
・
・
・
・
・
・
LB
①
API Call
②
識別子発行
③
識別子付き
で logging
④
識別子付き
でIPC(call)
⑤
識別子付き
で logging
⑥
識別子付き
でIPC(call)
⑦
識別子付き
で logging
⑧
識別子付き
でIPC(call)
⑨
識別子付き
で logging
⑩
識別子付き
でIPC(res)
⑫
識別子付き
でIPC(res)
⑪
識別子付き
で logging
⑬
識別子付き
で logging
⑭
識別子付き
でIPC(res)
⑮
識別子付き
で logging
⑯
API
Response
シンプルな話
押さえるべきポイントが
もうひとつ
どうやって?
• 識別子を発行して構成要素間で伝搬
• だれが発行?
• どうやって伝搬?
どうやって?
• 識別子を発行して構成要素間で伝搬
• だれが発行?
• どうやって発行?
• どうやって伝搬?
New!
client
A
client
B
RP
RP
App
Server
App
Server
DB
DB
・
・
・
LB
①
API Call
②
識別子発行
LB
①'
API Call ②'
識別子発行
・
・
・
・
・
・
・
・
・
client
A
client
B
RP
RP
App
Server
App
Server
DB
DB
・
・
・
LB
①
API Call
②
識別子発行
LB
①'
API Call ②'
識別子発行
・
・
・
・
・
・
・
・
・
ログの識別
• API Call を識別する
• 構成要素横断で識別
• サーバやプロセスをまたいでも識別できることが大事
• API Call 毎に識別
• クライアント毎ではなく Call 毎であることが大事
ログの識別
• API Call を識別する
• 構成要素横断で識別
• サーバやプロセスをまたいでも識別できることが大事
• API Call 毎に識別
• クライアント毎ではなく Call 毎であることが大事
一意性
(Uniqueness)
client
A
client
B
RP
RP
App
Server
App
Server
DB
DB
・
・
・
LB
①
API Call
②
識別子発行
LB
①'
API Call ②'
識別子発行
・
・
・
・
・
・
・
・
・
client
A
client
B
RP
RP
App
Server
App
Server
DB
DB
・
・
・
LB
①
API Call
②
識別子発行
LB
①'
API Call ②'
識別子発行
・
・
・
・
・
・
・
・
・
識別子発行
サーバー×The ボトルネック
分散型ユニークID生成問題
分散型採番手法
• 分散した採番環境それぞれで自立的に採番可能

であること
• 採番結果が絶対に衝突しないこと
分散型採番手法
• 分散した採番環境それぞれで自立的に採番可能

であること
• 採番結果が絶対に衝突しないこと
分散型採番手法
• 分散した採番環境それぞれで自立的に採番可能

であること
• 採番結果の衝突確率が運用されるシステムにおいて

十分に低確率であること
分散型採番手法
• 大きな桁数のランダム文字列
• UUID
分散型採番手法
• 演算コスト問題
• Snowflake
• Twitter の Tweet ID 生成手法
• 衝突確率は上がる
• Twitter にとっては十分低確率
まとめ
• Web API におけるかしこいロギング
• 収集と識別を実現する
• 識別子には分散型ユニークID生成手法をもちいる
Thank you
Tomokazu Kiyohara
http://github.com/kiyohara
http://facebook.com/tomokazu.kiyohara

Weitere ähnliche Inhalte

Ähnlich wie Web API をデバックするときに必要なたったひとつのこと

【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
Developers Summit
 
Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会
Masakazu Muraoka
 

Ähnlich wie Web API をデバックするときに必要なたったひとつのこと (20)

LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係
 
楽ちんユーザー認証付Spa
楽ちんユーザー認証付Spa楽ちんユーザー認証付Spa
楽ちんユーザー認証付Spa
 
[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005
 
Albatross
AlbatrossAlbatross
Albatross
 
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
 
Observability, Service Mesh and Microservices
Observability, Service Mesh and MicroservicesObservability, Service Mesh and Microservices
Observability, Service Mesh and Microservices
 
データベース勉強会 In 広島 mongodb
データベース勉強会 In 広島  mongodbデータベース勉強会 In 広島  mongodb
データベース勉強会 In 広島 mongodb
 
Fluentd meetup #2
Fluentd meetup #2Fluentd meetup #2
Fluentd meetup #2
 
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
 
20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム
20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム
20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム
 
サーバー管理よ、サヨウナラ。サーバーレス アーキテクチャの意義と実践
サーバー管理よ、サヨウナラ。サーバーレス アーキテクチャの意義と実践サーバー管理よ、サヨウナラ。サーバーレス アーキテクチャの意義と実践
サーバー管理よ、サヨウナラ。サーバーレス アーキテクチャの意義と実践
 
Webブラウザで使えるいろんな処理系
Webブラウザで使えるいろんな処理系Webブラウザで使えるいろんな処理系
Webブラウザで使えるいろんな処理系
 
Amazon EC2 Container Service Deep dive
Amazon EC2 Container Service Deep diveAmazon EC2 Container Service Deep dive
Amazon EC2 Container Service Deep dive
 
サーバーレスの今とこれから
サーバーレスの今とこれからサーバーレスの今とこれから
サーバーレスの今とこれから
 
Node platforms
Node platformsNode platforms
Node platforms
 
Fluentd1.2 & Fluent Bit
Fluentd1.2 & Fluent BitFluentd1.2 & Fluent Bit
Fluentd1.2 & Fluent Bit
 
Common Lisp でビッグデータを作ろう
Common Lisp でビッグデータを作ろうCommon Lisp でビッグデータを作ろう
Common Lisp でビッグデータを作ろう
 
6th oct2012 kobeit_webintents
6th oct2012 kobeit_webintents6th oct2012 kobeit_webintents
6th oct2012 kobeit_webintents
 
Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会
 
Web App Framework at SwapSkills vol28
Web App Framework at SwapSkills vol28Web App Framework at SwapSkills vol28
Web App Framework at SwapSkills vol28
 

Mehr von Tomokazu Kiyohara

Mehr von Tomokazu Kiyohara (15)

JavaScript で OS X を自動操作
JavaScript で OS X を自動操作JavaScript で OS X を自動操作
JavaScript で OS X を自動操作
 
Google Cloud Platform を支える技術 …のごく一部
Google Cloud Platform を支える技術 …のごく一部Google Cloud Platform を支える技術 …のごく一部
Google Cloud Platform を支える技術 …のごく一部
 
イベント継続のコツ
イベント継続のコツイベント継続のコツ
イベント継続のコツ
 
明日から使えるコーディングツール
明日から使えるコーディングツール明日から使えるコーディングツール
明日から使えるコーディングツール
 
Atom.io Quick Scripting
Atom.io Quick ScriptingAtom.io Quick Scripting
Atom.io Quick Scripting
 
Text-Objects - vim's elegant function
Text-Objects - vim's elegant functionText-Objects - vim's elegant function
Text-Objects - vim's elegant function
 
LiveStyle for Vim - Quick start
LiveStyle for Vim - Quick startLiveStyle for Vim - Quick start
LiveStyle for Vim - Quick start
 
こわくないプルリク
こわくないプルリクこわくないプルリク
こわくないプルリク
 
Github's HUB
Github's HUBGithub's HUB
Github's HUB
 
対サイバー攻撃アラートシステム “DAEDALUS”(ダイダロス)の紹介
対サイバー攻撃アラートシステム “DAEDALUS”(ダイダロス)の紹介対サイバー攻撃アラートシステム “DAEDALUS”(ダイダロス)の紹介
対サイバー攻撃アラートシステム “DAEDALUS”(ダイダロス)の紹介
 
Beginner's Sinatra
Beginner's SinatraBeginner's Sinatra
Beginner's Sinatra
 
Compact Web - Remind "web compression" -
Compact Web - Remind "web compression" -Compact Web - Remind "web compression" -
Compact Web - Remind "web compression" -
 
Zen coding15min
Zen coding15minZen coding15min
Zen coding15min
 
USTREAMの視聴率を上げよう!
USTREAMの視聴率を上げよう!USTREAMの視聴率を上げよう!
USTREAMの視聴率を上げよう!
 
JavaScript Dynamic Loading
JavaScript Dynamic LoadingJavaScript Dynamic Loading
JavaScript Dynamic Loading
 

Kürzlich hochgeladen

Kürzlich hochgeladen (10)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

Web API をデバックするときに必要なたったひとつのこと