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
Perlでもトレーシングがしたい! 〜はてなブログの"見える化"への挑戦〜 / Tracing...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
papix
July 03, 2019
Technology
1.4k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Perlでもトレーシングがしたい! 〜はてなブログの"見える化"への挑戦〜 / Tracing in Perl
papix
July 03, 2019
More Decks by papix
See All by papix
Houtou.pm #1
papix
0
2k
Perl歴約10年のエンジニアがフルスタックTypeScriptに出会ってみた
papix
1
780
YAPC::Kyotoの「全て」 / All of "YAPC::Kyoto"
papix
0
1.7k
イベントの中の人 / Inside the Events
papix
0
370
2022年に始めるPerlでWebサービス開発(趣味)
papix
0
650
ワーケーションに関する考察
papix
3
2.4k
(今更)Amplifyさっくり体験
papix
0
940
はてなにおけるGitHub Actions活用事例 / GitHub Actions in Hatena
papix
0
2.9k
ミススペルを発見するmisspellのご紹介 / Introduce misspell
papix
0
1.3k
Other Decks in Technology
See All in Technology
消えない 動かない 効かない
yama3133
1
120
The Agent Builder Loop from Daily Work to OSS
minorun365
PRO
3
160
【技術的負債conf】事業成長に伴う技術的負債の説明責任とAIによるモニタリング、認知的負債について
i35_267
1
340
OpenTelemetry eBPF Instrumentationの舞台裏 / Behind the Scenes of OpenTelemetry eBPF Instrumentation
ymotongpoo
4
1.2k
目の前の楽しいが人生を変える - コミュニティの螺旋の歩き方と楽しむコツ / change your life
soudai
PRO
4
550
NW運用でNWトポロジ可視化ツールに期待すること/shumoku-meetup1
corestate55
2
120
SREは、MCPとAutopilotをこう使え!
kazumax55
2
530
Deployment の 先にある AI Agent 基盤 - kagent vNext、Agent Substrate、Hermes から読み解く Agent Runtime の現在地 / k8s-matsuri-2-ai-agent-platform-amsy810
masayaaoyama
3
430
Snowflakeのコスト最適化を支えるアーキテクチャ設計
ktatsuya
1
1.5k
「守り」で活用するオンデバイスLLM 〜写ってはいけないを総力戦で防ぐ〜 / iOSDC Japan 2026
nakamuuu
0
120
AIエージェントの自己改善をどう設計するか / How to Design Self-Improvement for AI Agents
22mi
22
13k
Claude Codeを「使うほど育つ」AI秘書にするノウハウ
minorun365
PRO
4
320
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
41
2.7k
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
670
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Paper Plane (Part 1)
katiecoart
PRO
1
11k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
Believing is Seeing
oripsolob
1
220
Optimising Largest Contentful Paint
csswizardry
37
4k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
Designing for Timeless Needs
cassininazir
1
470
Visualization
eitanlees
152
17k
Transcript
Perlでもトレーシングがしたい! ~はてなブログの"見える化"への挑戦~ by id:papix (@__papix__) 株式会社はてな
papix 株式会社はてな アプリケーションエンジニア (2017年2月~) シニアエンジニア (2019年2月~) ブログMediaチーム サービスリード兼スクラムマスター はてなブログのHTTPS化などを担当しました 一般社団法人
Japan Perl Association 理事 アカウント類 はてな: id:papix Twitter: @__papix__ GitHub: papix / CPAN: PAPIX ブログ: https://papix.hatena(blog.(com|jp)|diary.jp)/ 趣味はPerlと, (交通機関を利用した)旅行 JGC修行は完遂済み, 今年はSFC修行をしています
「推測するな, 計測せよ」 ISUCONでよく聞く言葉 元はRob Pike氏(現Google, Goの開発者)の発言だそう: ルール1: プログラムがどこで時間を消費することになるか知ること はできない。ボトルネックは驚くべき箇所で起こるものである。し たがって、どこがボトルネックなのかをはっきりさせるまでは、推
測を行ったり、スピードハックをしてはならない。 ルール2: 計測すべし。計測するまでは速度のための調整をしてはな らない。コードの一部が残りを圧倒しないのであれば、なおさらで ある。
見える化の重要性 近年, Webサービスはどんどん高性能化している それに伴って, Webサービスの構成も複雑化している コードベースの大規模化, マイクロサービス化... それらに立ち向かうには"推測"では不十分 計測した結果(= 見える化した結果)に基づいて対処しないとい
けない
はてなブログの開発における「見える化」 インフラの見える化 エラーの見える化 処理の見える化
「見える化」を実現する方法
はてなの場合: インフラの見える化 Mackerel はてな製のインフラ可視化/管理SaaS はてなブログでももちろん活用しています
None
None
はてなの場合: エラーの見える化 Sentry エラーをトラッキングしてくれるSaaS SDKを入れることで勝手にエラー情報をまとめてくれる
None
はてなの場合: 処理の見える化 AWS X‑Ray AWSが提供する"分散トレーシング" as a Service このトークでは, はてなブログにおけるAWS
X‑Rayについての アレコレをご紹介します
Perlでもトレーシングがしたい! ~はてなブログの"見える化"への挑戦~ by id:papix (@__papix__) 株式会社はてな
トレーシング/トレースとは トレース Wikipedia曰く, プログラミングにおいて、命令の実行された形跡 をたどること。 = 処理の見える化(可視化) 可視化をすることで, バグ調査の助けにしたり, 最適化の道筋を
立てたり出来る
Perlにおけるトレーシング Devel::NYTProf NYTはNewYork Times NYT社内のエンジニア有志が作ったらしい... Devel::KYTProf KYTは京都 弊社サービスシステム開発本部部長, id:onishiのモジュール
Devel::KYTProf use するだけでいろいろいい感じに表示してくれる 以下はFurl::HTTPのProfilerでFurlを使ったHTTPリクエストを トレースした様子
ProfilerとLogger Profiler ... 実際にトレースする君 データベースの読み書き, HTTPリクエスト, Memcachedの読 み書きなどをトレースできる 他, Redis用のProfilerもCPANizeされている
昨日, AWS::CLIWrapperのProfilerを書いた → Devel::KYTProf::Profiler::AWS::CLIWrapper Logger ... トレース結果を出力する君 指定しなければSTDERRに出す
ところで... Devel::KYTProfを追えば, DBIを使ったデータベースアクセスなどを トレース出来る しかし, 実際のバックエンドサーバーは同時に大量のリクエストを 捌く もし, 本番環境でトレーシングしようとすると...? あるトレース結果がどのリクエストによるものかが判定出来な
い 単発の操作のトレースはできるが, あるリクエストに起因して 起きた一連の操作のトレーシングはできない!
そこで...
AWS X‑Ray 本番環境や分散アプリケーションの分析とデバッグ
詳しくは... Perlでも分散トレーシングしたい!AWS::XRay による解析とその実 装 https://speakerdeck.com/fujiwara3/yapc‑tokyo‑2019 Web+DB PRESS Vol.111 Perl Hackers
Hub 「AWS X‑Rayによる分散 トレーシング」
AWS X‑Rayの構成 SDK -(UDP)-> daemon -> API 各プログラミング言語向けにSDKが提供されている SDKは, トレースした結果をUDPでdaemonに送る
daemonはAWSが提供しているので, EC2インスタンスによし なに置いてあげるとよい daemonへはUDPで通信するので, 最悪daemonが死んでいても 安心 daemonはAWSが提供するAPIに向けてトレース結果を送る 開発者は, X‑Rayのコンソールでトレース結果を見れる
AWS X‑Rayにおけるトレース AWS X‑Rayでは... 1リクエスト = 1トレース トレースは, 幾つかのセグメントを持つ 分散トレーシングのための仕様としては"OpenTracing"などが存在
する ベンダー非依存のAPI仕様とライブラリを提供 OpenTracingでは... 1リクエスト = 1トレース トレースは幾つかのスパンを持つ
X‑Rayの嬉しさ あるリクエストによって行われた全ての処理(それぞれが1つのセグ メントになる)を紐づけてトレース出来る 更に, (SDKを入れて対応していれば)あるリクエストによって他のサ ービスにリクエストが飛んだ時も, まとめてトレース出来る = 分散トレーシング!!!!
ところでお値段は? トレースの記録 毎月10万トレースまで無料 100万件あたり5 USD トレースの取得/スキャン 取得/スキャンあわせて毎月100万回まで無料 取得は100万件あたり0.5 USD スキャンは100万件あたり0.5USD
はてなブログの規模だと, サンプリングレートを指定してある程度 絞る必要がある
実際にやってみた Perlのための, X‑RayのSDKは... (AWSが公式に提供するものは)な い... さらに言えば, PerlはそもそもAWSのSDKが... ない... ので, 有志が作ったAWS::CLIWrapperというモジュールが
CPANで公開されていて, 内部で aws コマンドを実行すること でAWSの操作をやっている...
そこで... fujiwaraさんがなんとかしてくれました! AWS::XRay Perl製のAWS X‑Ray用ライブラリ Devel::KYTProf::Logger::XRay Devel::KYTProfでトレースした結果をXRayに送る Devel::KYTProfで計測した内容を, AWS X‑Rayを使ってトレースで
きる!
実装方針 ひとまず一部のインスタンスにのみ, X‑Rayを導入する 若干とはいえパフォーマンス劣化は存在するため 現在, サンプリングレートは0.1%としてみている 環境変数 ENABLE_AWS_XRAY が真値を返す(真値を返すように設定 した)EC2インスタンスで動作するbackendサーバのみ有効化
cpanfile requires 'AWS::XRay'; requires 'Devel::KYTProf'; requires 'Devel::KYTProf::Logger::XRay'; requires 'Devel::KYTProf::Profiler::Redis::Fast';
app.psgi if ($ENV{'ENABLE_AWS_XRAY'}) { require AWS::XRay; require Devel::KYTProf; require Devel::KYTProf::Logger::XRay;
Devel::KYTProf->apply_prof('Cache::Memcached::Fast'); Devel::KYTProf->apply_prof('DBI'); Devel::KYTProf->apply_prof('LWP::UserAgent'); Devel::KYTProf->apply_prof('Redis::Fast'); Devel::KYTProf->logger('Devel::KYTProf::Logger::XRay'); }
Plack::Middlewareの読み込み enable 'Plack::Middleware::XRay', name => 'Hatena-Blog', sampling_rate => 0.1, #
= 10% サンプリング ;
None
None
None
None
None
None
sampler と response_filter
Tips: 強制的にトレーシングする enable 'Plack::Middleware::XRay', name => 'Hatena-Blog', sampler => sub
{ my ($env) = @_; # Plack::Request を作ってクエリパラメータを見て, # `force_aws_xray` の値が # XRay を強制的に有効にするためのトークンと一致していれば, # 必ず1 を返す = XRay でトレーシングする my $req = Plack::Request->new($env); my $token = $req->parameters->{force_aws_xray}; return 1 if defined $token && $token eq 'SAMPLE_TOKEN'; # sampling rate でXRay でトレーシングするか判定 return rand() < 0.1; # = 10% サンプリング }, ;
トレースを活かす 定期的に眺める チームで眺める → PWG 改善点を見つける Mackerelのグラフとはまた違う視点/粒度でサービスを見つめ ることができる
まとめ はてなブログで取り組んでいる"見える化"についてご紹介しました 特に, AWS X‑Rayの導入や活用について詳しく説明しました 引き続き, これら"見える化"の成果を元に, より良く/より安定したブ ログ体験を皆様に提供できるよう, 頑張っていきます