Yapc -asia 2012 lt @studio3104

6,559 views

Published on

LT at YAPC::Asia 2012

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

No Downloads
Views
Total views
6,559
On SlideShare
0
From Embeds
0
Number of Embeds
807
Actions
Shares
0
Downloads
3
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Yapc -asia 2012 lt @studio3104

  1. 1. Lightning Talk at YAPC::Asia 2012Fluentdで、コードを書いてみようかなと思った話 perl歴半年くらいですやさしくしてください @studio3104
  2. 2. @studio3104 (Satoshi SUZUKI)-- Perl歴半年くらい-- WEB業界2年目-- 妻、娘、息子います-- ソシャゲ、公式サイト、パチ(スロ)ンコ-- こんなのやってます →→→→→→→-- Perlと心中するらしいです 自己紹介
  3. 3. 仕事何してるかって聞かれると「IT系のエンジニア」「え、SE?プログラマ?」「違う、インフラ系」「え、インフラ?ガス?」
  4. 4. インフラエンジニア
  5. 5. インフラ
  6. 6. 仕事何してるかって聞かれると「インフラ」「え、インフラ?ガス?」
  7. 7. 「インフラのエンジニアなんだからプログラムなんて書く必要ないんだよね。」 23歳 男性インフラエンジニアのプログラミングへの意識
  8. 8. 「とりあえずなんとなくJavaの入門書買ってひと通りやってみたけど使い所ないと思ってる。」 24歳 男性インフラエンジニアのプログラミングへの意識
  9. 9. 「運用に必要で自分で作りたいと思う処理って、結局シェルスクリプトで間に合っちゃうんだよね。」 25歳 男性インフラエンジニアのプログラミングへの意識
  10. 10. 「やっぱりコード書けるようになりたいので、サービスの管理画面作ってみようとしたけど挫折した。」 26歳 男性インフラエンジニアのプログラミングへの意識
  11. 11. 全部過去のワタシが思ってたことです
  12. 12. 運用系エンジニアが自分で書いて有益であろうもの・Munin Plugin・Nagios Plugin・Ganglia Plugin・Zabbix Plugin・fluent-plugin
  13. 13. 運用系エンジニアが自分で書いて有益であろうもの・Munin Plugin → なんでもok・Nagios Plugin → なんでもok・Ganglia Plugin → pythonだけ?・Zabbix Plugin → よく知らない・fluent-plugin → ruby
  14. 14. そこで
  15. 15. out_exec_filter
  16. 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. 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. 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. 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. 20. デモ
  21. 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. 22. Perl歴
  23. 23. Lightning Talk at YAPC::Asia 2012Fluentdで、コードを書いてみようかなと思った話 ご清聴ありがとうございました @studio3104

×