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