SlideShare a Scribd company logo
Norikraで作る
PHPの例外検知システム
YAPC::Asia Tokyo 2015 LT
Masahiro Nagano @kazeburo
PHPはじめました
長年Perlをやってきましたが
PHPの例外を検出し
通知するシステム
Catch PHP Exception and send it to Slack
STEP 1
例外をログに記録する
Log the PHP Exception
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');
}
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
set_error_handler
set_error_handler(
function($severity, $msg, $file, $line){
throw new ErrorException(
$msg, 0, $$severity, $file, $line
);
}
);
PHPではエラーと例外は別物
エラーを例外に変換
Convert Error to Exeption
これらの機能を使っても
補足できない例外がある
(例)
syntax error、存在しないメソッドの呼び出し
Can’t all Exception with these functions
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
Apache vhost ErrorLog
<VirtualHost *:80>
ServerName api.example.com
ErrorLog /path/to/error_log
</VirtualHost>
php.ini にerror_logの設定がなく
ini_set 前にエラーが発生した場合
Apache ErrorLog
ErrorLog /var/log/httpd/error_log
Segmentation fault など
Apacheのworkerプロセスの不正終了
ここまでまとめ
PHP(mod_php)のエラーログは全部で
4つのファイルに記録される
ここまでが長かった
弊社の環境では
STEP 2
例外の集約から通知
構成
App
App
App SQLを投入
エラーログをfluentdでNorikraに送り
リアルタイムに集計してSlackに通知
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追加
集約サーバへの送信
Norikra
•Norikra とはリアルタイムイベントスト
リームに対して SQL ライクな言語で処
理できる super cool なプロダクト
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
表示例
まとめ
• Norikra便利
• PHPのエラーログはつらい
• 扱いづらいPHPのエラー処理を適当にいなす
- uzullaがブログ
• http://uzulla.hateblo.jp/entry/
2013/12/20/041619
He is an awesome
PHP guy!!!
おわり

More Related Content

PDF
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
Masahiro Nagano
 
PDF
15分でCakePHPを始める方法(Nseg 2013-11-09 )
hiro345
 
PPTX
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
CLARA, Inc.
 
PDF
omoon.org の裏側 〜FuelPHP の task 活用例〜
Sotaro Omura
 
PPT
Scripting Layer for Android + Perl
Naoya Ito
 
PDF
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
Naoya Ito
 
PDF
Ansible 入門 #01 (初心者向け)
Taro Hirose
 
PDF
Ansible入門...?
shirou wakayama
 
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
Masahiro Nagano
 
15分でCakePHPを始める方法(Nseg 2013-11-09 )
hiro345
 
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
CLARA, Inc.
 
omoon.org の裏側 〜FuelPHP の task 活用例〜
Sotaro Omura
 
Scripting Layer for Android + Perl
Naoya Ito
 
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
Naoya Ito
 
Ansible 入門 #01 (初心者向け)
Taro Hirose
 
Ansible入門...?
shirou wakayama
 

What's hot (19)

PDF
Ansible入門
Daiki Hayakawa
 
PPTX
CMSとPerlで遊ぼう
Daiki Ichinose
 
PDF
FuelPHPで3種のprofilerを使ってみた
Katsuhiro Miura
 
PPT
about Thrift
Naoya Ito
 
KEY
Development app-with-elixir
k1complete
 
PPT
CPANの依存モジュールをもう少し正しく検出したい
charsbar
 
PPTX
Open Source System Administration Framework - Func
Gosuke Miyashita
 
PPT
081108huge_data.ppt
Naoya Ito
 
PPT
Titanium Mobile
Naoya Ito
 
PDF
CodeIgniter入門
Sho A
 
PPT
Scala on Hadoop
Shinji Tanaka
 
PDF
Tottoruby 20110903
Takashi SAKAGUCHI
 
PDF
WordPress関数の処理コストを考えよう
Naoki Matsuda
 
KEY
あらためてPHP5.3
Masashi Shinbara
 
PPT
Using Windows Azure
Shinji Tanaka
 
KEY
FuelPHPをさわってみて
Sotaro Omura
 
PDF
Zabbix API
Shuhei Hayashibara
 
PDF
10分で作る Node.js Auto Scale 環境 with CloudFormation
Kazuyuki Honda
 
PDF
実"戦"CakePHP Plugin
Kenichirou Oyama
 
Ansible入門
Daiki Hayakawa
 
CMSとPerlで遊ぼう
Daiki Ichinose
 
FuelPHPで3種のprofilerを使ってみた
Katsuhiro Miura
 
about Thrift
Naoya Ito
 
Development app-with-elixir
k1complete
 
CPANの依存モジュールをもう少し正しく検出したい
charsbar
 
Open Source System Administration Framework - Func
Gosuke Miyashita
 
081108huge_data.ppt
Naoya Ito
 
Titanium Mobile
Naoya Ito
 
CodeIgniter入門
Sho A
 
Scala on Hadoop
Shinji Tanaka
 
Tottoruby 20110903
Takashi SAKAGUCHI
 
WordPress関数の処理コストを考えよう
Naoki Matsuda
 
あらためてPHP5.3
Masashi Shinbara
 
Using Windows Azure
Shinji Tanaka
 
FuelPHPをさわってみて
Sotaro Omura
 
Zabbix API
Shuhei Hayashibara
 
10分で作る Node.js Auto Scale 環境 with CloudFormation
Kazuyuki Honda
 
実"戦"CakePHP Plugin
Kenichirou Oyama
 
Ad

Viewers also liked (20)

PDF
Mackerel & Norikra mackerel meetup #4 LT
Masahiro Nagano
 
PDF
Rhebok, High Performance Rack Handler / Rubykaigi 2015
Masahiro Nagano
 
PDF
Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT
Masahiro Nagano
 
PDF
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
Masahiro Nagano
 
PDF
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
Masahiro Nagano
 
PDF
メルカリでのNorikraの活用、 Mackerelを添えて
Masahiro Nagano
 
PDF
Big Master Data PHP BLT #1
Masahiro Nagano
 
PDF
Rrdtool基礎から応用
Shoichi Masuhara
 
PDF
仮想化専門コンサルタントが教える「成功するエンタープライズクラウド環境構のポイント」
VirtualTech Japan Inc.
 
PDF
ZabbixによるOpenStack監視のご紹介
VirtualTech Japan Inc.
 
PDF
Deep Learning on iOS #360iDev
Shuichi Tsutsumi
 
PDF
飛び道具ではないMetal #iOSDC
Shuichi Tsutsumi
 
PPTX
医療データ解析界隈から見たICLR2017
RIKEN, Medical Sciences Innovation Hub Program (MIH)
 
PDF
[ICLR2017読み会 @ DeNA] ICLR2017紹介
Takeru Miyato
 
PDF
言葉のもつ広がりを、モデルの学習に活かそう -one-hot to distribution in language modeling-
Takahiro Kubo
 
PDF
ICLR2017読み会 Data Noising as Smoothing in Neural Network Language Models @Dena
Takanori Nakai
 
PDF
ICLR読み会 奥村純 20170617
Jun Okumura
 
PDF
Semi-Supervised Classification with Graph Convolutional Networks @ICLR2017読み会
Eiji Sekiya
 
PDF
170614 iclr reading-public
Katsuhiko Ishiguro
 
PDF
Q prop
Reiji Hatsugai
 
Mackerel & Norikra mackerel meetup #4 LT
Masahiro Nagano
 
Rhebok, High Performance Rack Handler / Rubykaigi 2015
Masahiro Nagano
 
Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT
Masahiro Nagano
 
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
Masahiro Nagano
 
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
Masahiro Nagano
 
メルカリでのNorikraの活用、 Mackerelを添えて
Masahiro Nagano
 
Big Master Data PHP BLT #1
Masahiro Nagano
 
Rrdtool基礎から応用
Shoichi Masuhara
 
仮想化専門コンサルタントが教える「成功するエンタープライズクラウド環境構のポイント」
VirtualTech Japan Inc.
 
ZabbixによるOpenStack監視のご紹介
VirtualTech Japan Inc.
 
Deep Learning on iOS #360iDev
Shuichi Tsutsumi
 
飛び道具ではないMetal #iOSDC
Shuichi Tsutsumi
 
医療データ解析界隈から見たICLR2017
RIKEN, Medical Sciences Innovation Hub Program (MIH)
 
[ICLR2017読み会 @ DeNA] ICLR2017紹介
Takeru Miyato
 
言葉のもつ広がりを、モデルの学習に活かそう -one-hot to distribution in language modeling-
Takahiro Kubo
 
ICLR2017読み会 Data Noising as Smoothing in Neural Network Language Models @Dena
Takanori Nakai
 
ICLR読み会 奥村純 20170617
Jun Okumura
 
Semi-Supervised Classification with Graph Convolutional Networks @ICLR2017読み会
Eiji Sekiya
 
170614 iclr reading-public
Katsuhiko Ishiguro
 
Ad

Similar to Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT (20)

PDF
Local php-100828 2
Akio Ishida
 
PDF
Modern PHP Programming @ PFI Seminar
Sotaro Karasawa
 
PPTX
pecl-AOPの紹介
Hiraku Nakano
 
PDF
Swift 2.0 の Error Handling #yhios
Tomohiro Kumagai
 
PDF
PHP language update 201211
Moriyoshi Koizumi
 
PPTX
知ってるようで意外と知らないPHPの便利関数
Wataru Terada
 
KEY
Perl 非同期プログラミング
lestrrat
 
PDF
90分間濃縮 PHPエラーの教室
Yusuke Ando
 
KEY
Cakephp api
Eiji Yokota
 
PDF
最近の PHP の話
y-uti
 
PDF
Node.js Error & Debug Leveling
kumatch kumatch
 
PDF
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
Arata Fujimura
 
PPTX
詳説ぺちぺち
do_aki
 
PDF
PHPの今とこれから2023
Rui Hirokawa
 
PDF
PHPの今とこれから2014
Rui Hirokawa
 
PDF
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
leverages_event
 
PDF
Swift 2.0 で変わったところ「前編」 #cswift
Tomohiro Kumagai
 
KEY
モダンmod_perl入門 #yapcasia
鉄次 尾形
 
PDF
Ajax 応用
Katsuyuki Seino
 
Local php-100828 2
Akio Ishida
 
Modern PHP Programming @ PFI Seminar
Sotaro Karasawa
 
pecl-AOPの紹介
Hiraku Nakano
 
Swift 2.0 の Error Handling #yhios
Tomohiro Kumagai
 
PHP language update 201211
Moriyoshi Koizumi
 
知ってるようで意外と知らないPHPの便利関数
Wataru Terada
 
Perl 非同期プログラミング
lestrrat
 
90分間濃縮 PHPエラーの教室
Yusuke Ando
 
Cakephp api
Eiji Yokota
 
最近の PHP の話
y-uti
 
Node.js Error & Debug Leveling
kumatch kumatch
 
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
Arata Fujimura
 
詳説ぺちぺち
do_aki
 
PHPの今とこれから2023
Rui Hirokawa
 
PHPの今とこれから2014
Rui Hirokawa
 
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
leverages_event
 
Swift 2.0 で変わったところ「前編」 #cswift
Tomohiro Kumagai
 
モダンmod_perl入門 #yapcasia
鉄次 尾形
 
Ajax 応用
Katsuyuki Seino
 

More from Masahiro Nagano (20)

PDF
Advanced nginx in mercari - How to handle over 1,200,000 HTTPS Reqs/Min
Masahiro Nagano
 
PDF
Stream processing in Mercari - Devsumi 2015 autumn LT
Masahiro Nagano
 
PDF
ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術
Masahiro Nagano
 
PDF
Isucon makers casual talks
Masahiro Nagano
 
PDF
blogサービスの全文検索の話 - #groonga を囲む夕べ
Masahiro Nagano
 
PDF
Gazelle - Plack Handler for performance freaks #yokohamapm
Masahiro Nagano
 
PDF
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Masahiro Nagano
 
PDF
Web Framework Benchmarksと Perl の現状報告会 YAPC::Asia Tokyo 2014 LT
Masahiro Nagano
 
PDF
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
Masahiro Nagano
 
PDF
Webアプリケーションの パフォーマンス向上のコツ 実践編
Masahiro Nagano
 
PDF
Webアプリケーションの パフォーマンス向上のコツ 概要編
Masahiro Nagano
 
PDF
Webアプリケーションとメモリ
Masahiro Nagano
 
PDF
最近作ったN個のCPANモジュール Yokohama.pm #10
Masahiro Nagano
 
PDF
How to build a High Performance PSGI/Plack Server
Masahiro Nagano
 
PDF
Apache::LogFormat::Compiler YAPC::Asia 2013 Tokyo LT-Thon
Masahiro Nagano
 
PDF
MHA for MySQL の話
Masahiro Nagano
 
KEY
1台から500台までのMySQL運用(YAPC::Asia編)
Masahiro Nagano
 
KEY
監視ツールの話
Masahiro Nagano
 
KEY
捗れ!Operation
Masahiro Nagano
 
KEY
グラフで捗る話#2 kansai.pm#14
Masahiro Nagano
 
Advanced nginx in mercari - How to handle over 1,200,000 HTTPS Reqs/Min
Masahiro Nagano
 
Stream processing in Mercari - Devsumi 2015 autumn LT
Masahiro Nagano
 
ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術
Masahiro Nagano
 
Isucon makers casual talks
Masahiro Nagano
 
blogサービスの全文検索の話 - #groonga を囲む夕べ
Masahiro Nagano
 
Gazelle - Plack Handler for performance freaks #yokohamapm
Masahiro Nagano
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Masahiro Nagano
 
Web Framework Benchmarksと Perl の現状報告会 YAPC::Asia Tokyo 2014 LT
Masahiro Nagano
 
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
Masahiro Nagano
 
Webアプリケーションの パフォーマンス向上のコツ 実践編
Masahiro Nagano
 
Webアプリケーションの パフォーマンス向上のコツ 概要編
Masahiro Nagano
 
Webアプリケーションとメモリ
Masahiro Nagano
 
最近作ったN個のCPANモジュール Yokohama.pm #10
Masahiro Nagano
 
How to build a High Performance PSGI/Plack Server
Masahiro Nagano
 
Apache::LogFormat::Compiler YAPC::Asia 2013 Tokyo LT-Thon
Masahiro Nagano
 
MHA for MySQL の話
Masahiro Nagano
 
1台から500台までのMySQL運用(YAPC::Asia編)
Masahiro Nagano
 
監視ツールの話
Masahiro Nagano
 
捗れ!Operation
Masahiro Nagano
 
グラフで捗る話#2 kansai.pm#14
Masahiro Nagano
 

Recently uploaded (9)

PPTX
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
PPTX
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
PDF
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
PDF
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
PDF
20250729_Devin-for-Enterprise
Masaki Yamakawa
 
PDF
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
PDF
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
PDF
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
PDF
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
20250729_Devin-for-Enterprise
Masaki Yamakawa
 
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 

Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT