Your SlideShare is downloading. ×
Yapc -asia 2012 lt @studio3104
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Yapc -asia 2012 lt @studio3104

6,260
views

Published on

LT at YAPC::Asia 2012

LT at YAPC::Asia 2012


0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,260
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
2
Comments
0
Likes
4
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Lightning Talk at YAPC::Asia 2012Fluentdで、コードを書いてみようかなと思った話 perl歴半年くらいですやさしくしてください @studio3104
  • 2. @studio3104 (Satoshi SUZUKI)-- Perl歴半年くらい-- WEB業界2年目-- 妻、娘、息子います-- ソシャゲ、公式サイト、パチ(スロ)ンコ-- こんなのやってます →→→→→→→-- Perlと心中するらしいです 自己紹介
  • 3. 仕事何してるかって聞かれると「IT系のエンジニア」「え、SE?プログラマ?」「違う、インフラ系」「え、インフラ?ガス?」
  • 4. インフラエンジニア
  • 5. インフラ
  • 6. 仕事何してるかって聞かれると「インフラ」「え、インフラ?ガス?」
  • 7. 「インフラのエンジニアなんだからプログラムなんて書く必要ないんだよね。」 23歳 男性インフラエンジニアのプログラミングへの意識
  • 8. 「とりあえずなんとなくJavaの入門書買ってひと通りやってみたけど使い所ないと思ってる。」 24歳 男性インフラエンジニアのプログラミングへの意識
  • 9. 「運用に必要で自分で作りたいと思う処理って、結局シェルスクリプトで間に合っちゃうんだよね。」 25歳 男性インフラエンジニアのプログラミングへの意識
  • 10. 「やっぱりコード書けるようになりたいので、サービスの管理画面作ってみようとしたけど挫折した。」 26歳 男性インフラエンジニアのプログラミングへの意識
  • 11. 全部過去のワタシが思ってたことです
  • 12. 運用系エンジニアが自分で書いて有益であろうもの・Munin Plugin・Nagios Plugin・Ganglia Plugin・Zabbix Plugin・fluent-plugin
  • 13. 運用系エンジニアが自分で書いて有益であろうもの・Munin Plugin → なんでもok・Nagios Plugin → なんでもok・Ganglia Plugin → pythonだけ?・Zabbix Plugin → よく知らない・fluent-plugin → ruby
  • 14. そこで
  • 15. out_exec_filter
  • 16. log_format main $remote_addr - $remote_user[$time_local] "$request" $status$body_bytes_sent "$http_referer""$http_user_agent "$request_time; combined+レスポンスタイムなnginxのログフォーマット
  • 17. {"host":"192.168.1.4","user":"-","method":"GET","path":"/foo/bar/index.psgi?source=ig&hl=ja&rlz=1G1GGLQ_JAJP314&q=td-agent&oq=td-agent&aq=f&aqi=&aql=&gs_l=igoogle.3...0.0.0.387.0.0.0.0.0.0.0.0..0.0...0.0.","code":"200",size":"0","referer":"-","agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5(KHTML, like Gecko) Chrome/19.0.1084.56Safari/536.5","response":"0.000"} 普通にFluentdの処理を通すとこうなる
  • 18. {"host":"192.168.1.4","user":"-","method":"GET","path":"/foo/bar/index.psgi?source=ig&hl=ja&rlz=1G1GGLQ_JAJP314&q=td-agent&oq=td-agent&aq=f&aqi=&aql=&gs_l=igoogle.3...0.0.0.387.0.0.0.0.0.0.0.0..0.0...0.0.","code":"200",size":"0","referer":"-","agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5(KHTML, like Gecko) Chrome/19.0.1084.56Safari/536.5","response":"0.000"} combined+レスポンスタイムなnginxのログフォーマット
  • 19. {"agent":"Mozilla/5.0 (X11; Linux x86_64)AppleWebKit/536.5 (KHTML, like Gecko)Chrome/19.0.1084.56 Safari/536.5","code":"200","host":"192.168.1.4","method":"GET","path":"/foo/bar/index.psgi","referer":"-","response":"0.000","size":"0","user":"-","query_strings":{"source":"ig","aqi":"","aq":"f","oq":"td-agent","rlz":"1G1GGLQ_JAJP314","hl":"ja","gs_l":"igoogle.3...0.0.0.387.0.0.0.0.0.0.0.0..0.0...0.0.","q":"td-agent","aql":""},} combined+レスポンスタイムなnginxのログフォーマット
  • 20. デモ
  • 21. MySQL slow_log 1 #!/usr/bin/env perl$ 27 $ tail 2$ 28 unless ( defined $slowlog->{sql} ) {$ 3 use strict;$ 29 print $mp->pack($slowlog);$ 4 use warnings;$ 30 next;$ 5 use Data::Dumper;$ 31 }$ EXPLAIN 6 use DBIx::Handler;$ 7 use JSON::XS;$ 32 $ 33 my $select_statement;$ 8 use Data::MessagePack;$ 34 if ( $slowlog->{sql} =~ /(select[^;]+)/i ) {$ 9$ 35 $select_statement = $1;$ 10 $| = 1;$ 36 }$ 11 $ 37 $ 12 my $mp = Data::MessagePack->new();$ 38 if ( $slowlog->{sql} =~ /^use ([^;]+)/i ) {$ 13 $ 39 $db = ` . $1 . `;$ 14 my $db_user = "root";$ 40 }$ 15 my $db_passwd = "";$ 41 $ 16 my $db_opt = { RaiseError => 0, PrintError => 1 };$ 42 if ( defined $db && defined $select_statement ) {$ 17 my $handler = DBIx::Handler->new( "DBI:mysql: 43 $handler->dbh->do("use $db");$database=information_schema:1 27.0.0.1", $db_user, 44 my $explains = eval { $handler->dbh-$db_passwd, $db_opt );$ >selectall_arrayref( "EXPLAIN $selec t_statement", +{ 18 $ Slice => {} } ); };$ 19 my $db;$ 45 if ( ref $explains eq ARRAY ) {$ 20 my $long_query_time = $handler->dbh- 46 $slowlog->{explain} = $explains;$>selectrow_array($ 47 $slowlog->{database} = $db;$ 21 "SELECT VARIABLE_VALUE FROM 48 }$GLOBAL_VARIABLES WHERE VARIABLE_NAME = 49 }$LONG_Q UERY_TIME");$ 50 $ 22 $handler->dbh->do("SELECT SLEEP 51 print $mp->pack($slowlog);$($long_query_time)");$ 52 }$ 23 $ 24 while ( my $json = <STDIN> ) {$ 25 my $slowlog = eval { decode_json($json); };$ 26 next if ($@);$ store MongoDB
  • 22. Perl歴
  • 23. Lightning Talk at YAPC::Asia 2012Fluentdで、コードを書いてみようかなと思った話 ご清聴ありがとうございました @studio3104