SlideShare a Scribd company logo
Submit Search
Upload
Login
Signup
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Report
Masahiro Nagano
Follow
Aug. 24, 2015
•
0 likes
•
38,587 views
1
of
21
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Aug. 24, 2015
•
0 likes
•
38,587 views
Download Now
Download to read offline
Report
Technology
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Masahiro Nagano
Follow
Recommended
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
Masahiro Nagano
8.6K views
•
41 slides
15分でCakePHPを始める方法(Nseg 2013-11-09 )
hiro345
4.4K views
•
20 slides
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
CLARA ONLINE, Inc.
3K views
•
47 slides
omoon.org の裏側 〜FuelPHP の task 活用例〜
Sotaro Omura
10K views
•
81 slides
Scripting Layer for Android + Perl
Naoya Ito
3.3K views
•
21 slides
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
Naoya Ito
5.5K views
•
47 slides
More Related Content
What's hot
Ansible入門
Daiki Hayakawa
935 views
•
16 slides
CMSとPerlで遊ぼう
Daiki Ichinose
1.9K views
•
17 slides
FuelPHPで3種のprofilerを使ってみた
Katsuhiro Miura
15.5K views
•
79 slides
about Thrift
Naoya Ito
2.3K views
•
18 slides
Development app-with-elixir
k1complete
1K views
•
15 slides
CPANの依存モジュールをもう少し正しく検出したい
charsbar
3.3K views
•
90 slides
What's hot
(20)
Ansible入門
Daiki Hayakawa
•
935 views
CMSとPerlで遊ぼう
Daiki Ichinose
•
1.9K views
FuelPHPで3種のprofilerを使ってみた
Katsuhiro Miura
•
15.5K views
about Thrift
Naoya Ito
•
2.3K views
Development app-with-elixir
k1complete
•
1K views
CPANの依存モジュールをもう少し正しく検出したい
charsbar
•
3.3K views
Open Source System Administration Framework - Func
Gosuke Miyashita
•
1.7K views
081108huge_data.ppt
Naoya Ito
•
2.8K views
Titanium Mobile
Naoya Ito
•
4.1K views
CodeIgniter入門
Sho A
•
13.1K views
Scala on Hadoop
Shinji Tanaka
•
2.5K views
Tottoruby 20110903
Takashi SAKAGUCHI
•
806 views
WordPress関数の処理コストを考えよう
Naoki Matsuda
•
3.7K views
あらためてPHP5.3
Masashi Shinbara
•
4.2K views
Using Windows Azure
Shinji Tanaka
•
2.2K views
FuelPHPをさわってみて
Sotaro Omura
•
17.4K views
Zabbix API
Shuhei Hayashibara
•
2.1K views
WordPress のキャッシュ機構
katanyan
•
12.3K views
10分で作る Node.js Auto Scale 環境 with CloudFormation
Kazuyuki Honda
•
4K views
実"戦"CakePHP Plugin
Kenichirou Oyama
•
4.6K views
Viewers also liked
Mackerel & Norikra mackerel meetup #4 LT
Masahiro Nagano
36.4K views
•
22 slides
Rhebok, High Performance Rack Handler / Rubykaigi 2015
Masahiro Nagano
75.9K views
•
67 slides
Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT
Masahiro Nagano
39K views
•
19 slides
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
Masahiro Nagano
54.4K views
•
89 slides
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
Masahiro Nagano
42.4K views
•
51 slides
メルカリでのNorikraの活用、 Mackerelを添えて
Masahiro Nagano
70.8K views
•
39 slides
Viewers also liked
(20)
Mackerel & Norikra mackerel meetup #4 LT
Masahiro Nagano
•
36.4K views
Rhebok, High Performance Rack Handler / Rubykaigi 2015
Masahiro Nagano
•
75.9K views
Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT
Masahiro Nagano
•
39K views
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
Masahiro Nagano
•
54.4K views
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
Masahiro Nagano
•
42.4K views
メルカリでのNorikraの活用、 Mackerelを添えて
Masahiro Nagano
•
70.8K views
Big Master Data PHP BLT #1
Masahiro Nagano
•
39.1K views
Rrdtool基礎から応用
Shoichi Masuhara
•
16.8K views
仮想化専門コンサルタントが教える「成功するエンタープライズクラウド環境構のポイント」
VirtualTech Japan Inc.
•
25.9K views
ZabbixによるOpenStack監視のご紹介
VirtualTech Japan Inc.
•
31K views
Deep Learning on iOS #360iDev
Shuichi Tsutsumi
•
6.8K views
飛び道具ではないMetal #iOSDC
Shuichi Tsutsumi
•
8.5K views
医療データ解析界隈から見たICLR2017
RIKEN, Medical Sciences Innovation Hub Program (MIH)
•
33.9K views
[ICLR2017読み会 @ DeNA] ICLR2017紹介
Takeru Miyato
•
26.1K views
言葉のもつ広がりを、モデルの学習に活かそう -one-hot to distribution in language modeling-
Takahiro Kubo
•
37.9K views
ICLR2017読み会 Data Noising as Smoothing in Neural Network Language Models @Dena
Takanori Nakai
•
33.5K views
ICLR読み会 奥村純 20170617
Jun Okumura
•
33.9K views
Semi-Supervised Classification with Graph Convolutional Networks @ICLR2017読み会
Eiji Sekiya
•
34.1K views
170614 iclr reading-public
Katsuhiko Ishiguro
•
34.1K views
Q prop
Reiji Hatsugai
•
33.3K views
Similar to Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Local php-100828 2
Akio Ishida
977 views
•
22 slides
Modern PHP Programming @ PFI Seminar
Sotaro Karasawa
7.1K views
•
82 slides
pecl-AOPの紹介
Hiraku Nakano
2.1K views
•
28 slides
Swift 2.0 の Error Handling #yhios
Tomohiro Kumagai
6.8K views
•
106 slides
PHP language update 201211
Moriyoshi Koizumi
1.8K views
•
19 slides
知ってるようで意外と知らないPHPの便利関数
Wataru Terada
9.7K views
•
57 slides
Similar to Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
(20)
Local php-100828 2
Akio Ishida
•
977 views
Modern PHP Programming @ PFI Seminar
Sotaro Karasawa
•
7.1K views
pecl-AOPの紹介
Hiraku Nakano
•
2.1K views
Swift 2.0 の Error Handling #yhios
Tomohiro Kumagai
•
6.8K views
PHP language update 201211
Moriyoshi Koizumi
•
1.8K views
知ってるようで意外と知らないPHPの便利関数
Wataru Terada
•
9.7K views
Perl 非同期プログラミング
lestrrat
•
7.3K views
90分間濃縮 PHPエラーの教室
Yusuke Ando
•
16.5K views
Cakephp api
Eiji Yokota
•
2.4K views
最近の PHP の話
y-uti
•
3.2K views
Node.js Error & Debug Leveling
kumatch kumatch
•
4.4K views
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
Arata Fujimura
•
1.7K views
詳説ぺちぺち
do_aki
•
2.1K views
Task
Shingo Nakamura
•
633 views
PHPの今とこれから2014
Rui Hirokawa
•
21.3K views
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
leverages_event
•
9.1K views
Swift 2.0 で変わったところ「前編」 #cswift
Tomohiro Kumagai
•
28.6K views
モダンmod_perl入門 #yapcasia
鉄次 尾形
•
8.2K views
Ajax 応用
Katsuyuki Seino
•
5.9K views
PHP5.5新機能「ジェネレータ」初心者入門
kwatch
•
22.2K views
More from Masahiro Nagano
Advanced nginx in mercari - How to handle over 1,200,000 HTTPS Reqs/Min
Masahiro Nagano
47.8K views
•
33 slides
Stream processing in Mercari - Devsumi 2015 autumn LT
Masahiro Nagano
3K views
•
20 slides
ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術
Masahiro Nagano
18.4K views
•
37 slides
Isucon makers casual talks
Masahiro Nagano
3K views
•
25 slides
blogサービスの全文検索の話 - #groonga を囲む夕べ
Masahiro Nagano
10.9K views
•
48 slides
Gazelle - Plack Handler for performance freaks #yokohamapm
Masahiro Nagano
13.1K views
•
26 slides
More from Masahiro Nagano
(20)
Advanced nginx in mercari - How to handle over 1,200,000 HTTPS Reqs/Min
Masahiro Nagano
•
47.8K views
Stream processing in Mercari - Devsumi 2015 autumn LT
Masahiro Nagano
•
3K views
ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術
Masahiro Nagano
•
18.4K views
Isucon makers casual talks
Masahiro Nagano
•
3K views
blogサービスの全文検索の話 - #groonga を囲む夕べ
Masahiro Nagano
•
10.9K views
Gazelle - Plack Handler for performance freaks #yokohamapm
Masahiro Nagano
•
13.1K views
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Masahiro Nagano
•
32.9K views
Web Framework Benchmarksと Perl の現状報告会 YAPC::Asia Tokyo 2014 LT
Masahiro Nagano
•
11.8K views
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
Masahiro Nagano
•
55.4K views
Webアプリケーションの パフォーマンス向上のコツ 実践編
Masahiro Nagano
•
40.4K views
Webアプリケーションの パフォーマンス向上のコツ 概要編
Masahiro Nagano
•
36.5K views
Webアプリケーションとメモリ
Masahiro Nagano
•
13.9K views
最近作ったN個のCPANモジュール Yokohama.pm #10
Masahiro Nagano
•
2.7K views
How to build a High Performance PSGI/Plack Server
Masahiro Nagano
•
18.6K views
Apache::LogFormat::Compiler YAPC::Asia 2013 Tokyo LT-Thon
Masahiro Nagano
•
8.1K views
MHA for MySQL の話
Masahiro Nagano
•
6.7K views
1台から500台までのMySQL運用(YAPC::Asia編)
Masahiro Nagano
•
11.3K views
監視ツールの話
Masahiro Nagano
•
2.5K views
捗れ!Operation
Masahiro Nagano
•
1.8K views
グラフで捗る話#2 kansai.pm#14
Masahiro Nagano
•
1.6K views
Recently uploaded
GraphQLはどんな時に使うか
Yutaka Tachibana
17 views
•
37 slides
MLOps Course Slides_JP(配布用).pdf
Yuya Yamamoto
125 views
•
31 slides
CCoE実践者コミュニティ#1_CCoEが進めるセキュリティカイゼンの旅.pptx
Tomoaki Tada
69 views
•
20 slides
磁石内臓イヤリングによる磁力変化を利用したジェスチャ識別
sugiuralab
7 views
•
1 slide
遠隔お酌IoTLT2309.pptx
Yoshiaki Ito
149 views
•
12 slides
拡散する画像生成.pdf
NTTDOCOMO-ServiceInnovation
45 views
•
38 slides
Recently uploaded
(13)
GraphQLはどんな時に使うか
Yutaka Tachibana
•
17 views
MLOps Course Slides_JP(配布用).pdf
Yuya Yamamoto
•
125 views
CCoE実践者コミュニティ#1_CCoEが進めるセキュリティカイゼンの旅.pptx
Tomoaki Tada
•
69 views
磁石内臓イヤリングによる磁力変化を利用したジェスチャ識別
sugiuralab
•
7 views
遠隔お酌IoTLT2309.pptx
Yoshiaki Ito
•
149 views
拡散する画像生成.pdf
NTTDOCOMO-ServiceInnovation
•
45 views
遠征ドルヲタのための便利サイトを作ってみた
Kenta Fujimoto
•
11 views
20230921_IoTLT_vol103_kitazaki_v1.pdf
Ayachika Kitazaki
•
170 views
インフラチームとCCoEの関係.pptx
ssuser5c7ee4
•
28 views
CatBoost on GPU のひみつ
Takuji Tahara
•
780 views
画像生成AIの問題点
iPride Co., Ltd.
•
13 views
ヒアラブルデバイスにおける音漏れ信号を用いた空中ジェスチャ認識
sugiuralab
•
6 views
2023情報処理学会関西支部大会-G12.pdf
KoseiShimoda1
•
7 views
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
1.
Norikraで作る PHPの例外検知システム YAPC::Asia Tokyo 2015
LT Masahiro Nagano @kazeburo
2.
PHPはじめました 長年Perlをやってきましたが
3.
PHPの例外を検出し 通知するシステム Catch PHP Exception
and send it to Slack
4.
STEP 1 例外をログに記録する Log the
PHP Exception
5.
Try-Catch try { throw new
MyAppException('Boofy'); } catch (Exception $e ) { $msg = json_encode(array( 'message' => $e->getMessage(), '_exception' => array( 'class' => get_class($e), 'message' => $e->getMessage(), 'trace' => .. ), )). "n"; error_log($msg, 3, '/path/to/app_error_log'); }
6.
set_exception_handler set_exception_handler(function($e) { $msg =
decorate_exception($e); error_log($msg, 3, '/path/to/app_error_log'); }); throw new MyAppException('Boofy'); try-catch外で発生した例外を補足 Catch the PHP Exception outside Try-Catch
7.
set_error_handler set_error_handler( function($severity, $msg, $file,
$line){ throw new ErrorException( $msg, 0, $$severity, $file, $line ); } ); PHPではエラーと例外は別物 エラーを例外に変換 Convert Error to Exeption
8.
これらの機能を使っても 補足できない例外がある (例) syntax error、存在しないメソッドの呼び出し Can’t all
Exception with these functions
9.
error_reporting & error_log error_reporting(E_ALL
| E_STRICT); ini_set('error_log', '/path/to/php_log'); 致命的エラーをログに記録 php.ini でも書ける Log Fatal Errors to the log file
10.
Apache vhost ErrorLog <VirtualHost
*:80> ServerName api.example.com ErrorLog /path/to/error_log </VirtualHost> php.ini にerror_logの設定がなく ini_set 前にエラーが発生した場合
11.
Apache ErrorLog ErrorLog /var/log/httpd/error_log Segmentation
fault など Apacheのworkerプロセスの不正終了
12.
ここまでまとめ PHP(mod_php)のエラーログは全部で 4つのファイルに記録される ここまでが長かった 弊社の環境では
13.
STEP 2 例外の集約から通知
14.
構成 App App App SQLを投入 エラーログをfluentdでNorikraに送り リアルタイムに集計してSlackに通知
15.
fluentd <source> type tail format json path
/path/to/app_error_log tag nohostname.error_app_log </source> <source> type tail format /^[(?<time>[^]]*)] (?<message>.*)$/ time_format %d-%b-%Y %H:%M:%S path /path/to/php_log tag nohostname.apache_error </source> <source> type tail format /^[[^ ]* (?<time>[^]]*)] [(?<level>[^]]*)](?: [pid (?<pid>[^]]*)])? [client (?<client>[^]]*)] (?<message>.*?)(?:, referer: (? <referer>.*))?$/ path /path/to/error_log tag nohostname.apache_error </source> <source> type tail format /^[[^ ]* (?<time>[^]]*)] [(?<level>[^]]*)](?: [pid (?<pid>[^]]*)])? [client (?<client>[^]]*)] (?<message>.*?)(?:, referer: (? <referer>.*))?$/ path /var/log/httpd/error_log tag nohostname.apache_error </source> <match nohostname.**> type record_reformer tag ${tag_suffix[1]} hostname ${hostname} </match> <match {error_app_log,apache_error}> type forward <server> name cep host cep </server> </match> in_tail x 4 hostname追加 集約サーバへの送信
16.
Norikra •Norikra とはリアルタイムイベントスト リームに対して SQL
ライクな言語で処 理できる super cool なプロダクト
17.
Norikra Query SELECT "alert-channel" as
channel, "[..][" || hostname || "] Detect *" || CAST(COUNT(*), string) || "* PDOException in this 1min: ```" || message || "``` action: `" || COALESCE(NULLABLE(action),"-") || "`" AS msg FROM error_app_log.win:time_batch(1 min) WHERE exception.class = "PDOException" OR ( _exception.class = "ErrorException" AND _exception.message LIKE "PDOStatement%" ) GROUP BY hostname, message, action HAVING COUNT(*) > 0
18.
表示例
19.
まとめ • Norikra便利 • PHPのエラーログはつらい •
扱いづらいPHPのエラー処理を適当にいなす - uzullaがブログ • http://uzulla.hateblo.jp/entry/ 2013/12/20/041619
20.
He is an
awesome PHP guy!!!
21.
おわり