SlideShare uma empresa Scribd logo
1 de 38
Baixar para ler offline
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

Mais conteúdo relacionado

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

LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係Hiraku Komuro
 
楽ちんユーザー認証付Spa
楽ちんユーザー認証付Spa楽ちんユーザー認証付Spa
楽ちんユーザー認証付SpaTakahiro Tsuchiya
 
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~KLab株式会社
 
Observability, Service Mesh and Microservices
Observability, Service Mesh and MicroservicesObservability, Service Mesh and Microservices
Observability, Service Mesh and MicroservicesTaiki
 
データベース勉強会 In 広島 mongodb
データベース勉強会 In 広島  mongodbデータベース勉強会 In 広島  mongodb
データベース勉強会 In 広島 mongodbRyuji Tamagawa
 
【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
 
20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム
20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム
20120407 ASP.NET+C#で開発する大規模ソーシャルゲームhideyuki ikeda
 
サーバー管理よ、サヨウナラ。サーバーレス アーキテクチャの意義と実践
サーバー管理よ、サヨウナラ。サーバーレス アーキテクチャの意義と実践サーバー管理よ、サヨウナラ。サーバーレス アーキテクチャの意義と実践
サーバー管理よ、サヨウナラ。サーバーレス アーキテクチャの意義と実践真吾 吉田
 
Webブラウザで使えるいろんな処理系
Webブラウザで使えるいろんな処理系Webブラウザで使えるいろんな処理系
Webブラウザで使えるいろんな処理系祐司 伊藤
 
サーバーレスの今とこれから
サーバーレスの今とこれからサーバーレスの今とこれから
サーバーレスの今とこれから真吾 吉田
 
Fluentd1.2 & Fluent Bit
Fluentd1.2 & Fluent BitFluentd1.2 & Fluent Bit
Fluentd1.2 & Fluent BitSeiya Mizuno
 
Common Lisp でビッグデータを作ろう
Common Lisp でビッグデータを作ろうCommon Lisp でビッグデータを作ろう
Common Lisp でビッグデータを作ろうblackenedgold
 
6th oct2012 kobeit_webintents
6th oct2012 kobeit_webintents6th oct2012 kobeit_webintents
6th oct2012 kobeit_webintentsKensaku Komatsu
 
Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会Masakazu Muraoka
 
Web App Framework at SwapSkills vol28
Web App Framework at SwapSkills vol28Web App Framework at SwapSkills vol28
Web App Framework at SwapSkills vol28光一 原田
 

Semelhante a 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
 

Mais de Tomokazu Kiyohara

JavaScript で OS X を自動操作
JavaScript で OS X を自動操作JavaScript で OS X を自動操作
JavaScript で OS X を自動操作Tomokazu Kiyohara
 
Google Cloud Platform を支える技術 …のごく一部
Google Cloud Platform を支える技術 …のごく一部Google Cloud Platform を支える技術 …のごく一部
Google Cloud Platform を支える技術 …のごく一部Tomokazu Kiyohara
 
明日から使えるコーディングツール
明日から使えるコーディングツール明日から使えるコーディングツール
明日から使えるコーディングツールTomokazu Kiyohara
 
Text-Objects - vim's elegant function
Text-Objects - vim's elegant functionText-Objects - vim's elegant function
Text-Objects - vim's elegant functionTomokazu Kiyohara
 
LiveStyle for Vim - Quick start
LiveStyle for Vim - Quick startLiveStyle for Vim - Quick start
LiveStyle for Vim - Quick startTomokazu Kiyohara
 
対サイバー攻撃アラートシステム “DAEDALUS”(ダイダロス)の紹介
対サイバー攻撃アラートシステム “DAEDALUS”(ダイダロス)の紹介対サイバー攻撃アラートシステム “DAEDALUS”(ダイダロス)の紹介
対サイバー攻撃アラートシステム “DAEDALUS”(ダイダロス)の紹介Tomokazu Kiyohara
 
Compact Web - Remind "web compression" -
Compact Web - Remind "web compression" -Compact Web - Remind "web compression" -
Compact Web - Remind "web compression" -Tomokazu Kiyohara
 
USTREAMの視聴率を上げよう!
USTREAMの視聴率を上げよう!USTREAMの視聴率を上げよう!
USTREAMの視聴率を上げよう!Tomokazu Kiyohara
 

Mais de 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
 

Último

20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 

Último (7)

20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 

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