Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Norikra meetup session #2
kawamuray
● 名前: kawamuray
● 本業: 大学院修士課程2年
● 副業1: アルバイトサーバサイドエンジニア@LINE Corp
● 副業2: Student@Google Summer of Code
● Norikraとの関わり: jru...
Norikraでアプリログを集計してリ
アルタイムエラー通知
あるいは,Norikraの身近な活用法
テーマ
● screen or tmux + tail -F ?
● 全部のアプリ見れる?
● 流れ早いと見逃さない?
私の場合:
● アクティブに開発してるとき or デプロイ時 しか見てない
● バッチ等重要局面の失敗はikachanでIRCへgo...
sub logger {
my ($level, $message) = @_;
my(undef, $file, $line) = caller(0);
my $content = "[$level] $message at $file li...
エラー通知という名のSPAM
● メッセージは変数によって微妙に違うかもしれない
● ログのレベル,ファイル,行が同じなら同じような内容とみなして良いよね
● エラー通知はきっかけ.ざっくり内容が分かれば良い.
● 詳細はどうせファイル見に行くでしょ?
サマライズしよう
my $fluent_logger = Fluent::Logger->new(...);
my $hostname = `hostname`; chomp $hostname;
sub logger {
my ($level, $messag...
SELECT level, file, line, LAST(host) AS host, LAST
(message) AS message, COUNT(*) AS count
FROM foo_applog.win:time_batch(...
$ crontab -l
*/1 * * * * setlock -nx /tmp/norikra-error-notify.pl.lock /path/to/norikra-error-notify.pl
やること3
#!/usr/bin/env perl
use strict;
use warnings;
use Foo; # project class
use Norikra::Client;
my $IntervalMinutes = 5;
my $c...
Architecture
App
IRC norikra-error-notify.pl
@ cron
すっきり
● 複数ノード,複数インスタンスのアプリログをまとめられる
● Fluentdに投げとけばアプリの外側で使える
● ロガーと別に通知処理を入れなくて済む
良い点
不満:
● プロジェクト毎にクエリ登録したりcron仕掛けるのめんどい
● 1度来た通知が修正作業中に何回もくるのがうっとおしい
展望:
● そのへん面倒みてくれるいい感じのアプリでも作るけ?
● と思っているところです.
展望
アプリログに関して:
● アプリのログは書くだけじゃなくてちゃんと監視しよう
Norikraに関して:
● Norikraは身近なとこでも使える
● SQL書ければだいたい使える
● ログ+ストリーム(リアルタイム)処理の組み合わせは色々でき
...
Upcoming SlideShare
Loading in …5
×

Norikraでアプリログを集計してリアルタイムエラー通知 # Norikra meetup

6,752 views

Published on

Published in: Technology
  • Be the first to comment

Norikraでアプリログを集計してリアルタイムエラー通知 # Norikra meetup

  1. 1. Norikra meetup session #2 kawamuray
  2. 2. ● 名前: kawamuray ● 本業: 大学院修士課程2年 ● 副業1: アルバイトサーバサイドエンジニア@LINE Corp ● 副業2: Student@Google Summer of Code ● Norikraとの関わり: jrubyでudf書ける方法発明したりした About me
  3. 3. Norikraでアプリログを集計してリ アルタイムエラー通知 あるいは,Norikraの身近な活用法 テーマ
  4. 4. ● screen or tmux + tail -F ? ● 全部のアプリ見れる? ● 流れ早いと見逃さない? 私の場合: ● アクティブに開発してるとき or デプロイ時 しか見てない ● バッチ等重要局面の失敗はikachanでIRCへgo ● でも,errorとかcriticalレベルで吐かれるログは全部見たい アプリのログ,監視してる?
  5. 5. sub logger { my ($level, $message) = @_; my(undef, $file, $line) = caller(0); my $content = "[$level] $message at $file line $line"; print STDERR $content, "n"; if ($level eq 'error' || $level eq ‘critical’) { $c->ikachan($content); } } エラーログは全部通知する?
  6. 6. エラー通知という名のSPAM
  7. 7. ● メッセージは変数によって微妙に違うかもしれない ● ログのレベル,ファイル,行が同じなら同じような内容とみなして良いよね ● エラー通知はきっかけ.ざっくり内容が分かれば良い. ● 詳細はどうせファイル見に行くでしょ? サマライズしよう
  8. 8. my $fluent_logger = Fluent::Logger->new(...); my $hostname = `hostname`; chomp $hostname; sub logger { my ($level, $message) = @_; my(undef, $file, $line) = caller(0); my $content = "[$level] $message at $file line $line"; # ... ファイルに書く処理 ... # fluentdに全部投げちゃうど $fluent_logger->post('foo.applog', { level => $level, file => $file, line => $line, host => $hostname, message => $message, }); } やること1
  9. 9. SELECT level, file, line, LAST(host) AS host, LAST (message) AS message, COUNT(*) AS count FROM foo_applog.win:time_batch(5 min) WHERE level IN ('error', 'critical') GROUP BY level, file, line やること2
  10. 10. $ crontab -l */1 * * * * setlock -nx /tmp/norikra-error-notify.pl.lock /path/to/norikra-error-notify.pl やること3
  11. 11. #!/usr/bin/env perl use strict; use warnings; use Foo; # project class use Norikra::Client; my $IntervalMinutes = 5; my $c = Foo->bootstrap; my $norikra = Norikra::Client->new('norikra.server.address', 26571); my $query_name = "foo_errors_in_${IntervalMinutes}min"; my $events = $norikra->event($query_name); for my $event (@$events) { my ($time, $log) = @$event; next if $log->{count} == 0; my $msg = "[$log->{host}][$level] $log->{message} at $log->{file} line $log->{line}"; if ($log->{count} > 1) { my $count = $log->{count} - 1; $msg .= " ... and $count more similar logs in this $IntervalMinutes minutes"; } $c->ikachan($msg); # post to IRC via ikachan } norikra-error-notify.pl
  12. 12. Architecture App IRC norikra-error-notify.pl @ cron
  13. 13. すっきり
  14. 14. ● 複数ノード,複数インスタンスのアプリログをまとめられる ● Fluentdに投げとけばアプリの外側で使える ● ロガーと別に通知処理を入れなくて済む 良い点
  15. 15. 不満: ● プロジェクト毎にクエリ登録したりcron仕掛けるのめんどい ● 1度来た通知が修正作業中に何回もくるのがうっとおしい 展望: ● そのへん面倒みてくれるいい感じのアプリでも作るけ? ● と思っているところです. 展望
  16. 16. アプリログに関して: ● アプリのログは書くだけじゃなくてちゃんと監視しよう Norikraに関して: ● Norikraは身近なとこでも使える ● SQL書ければだいたい使える ● ログ+ストリーム(リアルタイム)処理の組み合わせは色々でき そう ● ありがとう タゴ=モリス まとめ

×