SlideShare une entreprise Scribd logo
1  sur  31
Télécharger pour lire hors ligne
Lightning Talk at YAPC::Asia 2012




Fluentdで、コードを書いてみ
ようかなと思った話
       perl歴半年くらいですやさしくしてください



                                    @studio3104
@studio3104 (Satoshi SUZUKI)


-- Perl歴半年くらい

-- WEB業界2年目

-- 妻、娘、息子います




-- ソシャゲ、公式サイト、パチ(スロ)ンコ

-- こんなのやってます →→→→→→→

-- Perlと心中するらしいです



 自己紹介
仕事何してるかって聞かれると

「IT系のエンジニア」
「え、SE?プログラマ?」
「違う、インフラ系」
「え、インフラ?ガス?」
インフラ
エンジニア
インフラ
仕事何してるかって聞かれると



「インフラ」
「え、インフラ?ガス?」
「インフラのエンジニアなんだ
からプログラムなんて書く必
要ないんだよね。」
                        23歳 男性


インフラエンジニアのプログラミングへの意識
「とりあえずなんとなくJavaの
入門書買ってひと通りやって
みたけど使い所ないと思って
る。」
                        24歳 男性
インフラエンジニアのプログラミングへの意識
「運用に必要で自分で作りた
いと思う処理って、結局シェ
ルスクリプトで間に合っちゃう
んだよね。」
                        25歳 男性
インフラエンジニアのプログラミングへの意識
「やっぱりコード書けるように
なりたいので、サービスの管
理画面作ってみようとしたけ
ど挫折した。」
                        26歳 男性
インフラエンジニアのプログラミングへの意識
全部
過去のワタシが
思ってたことです
運用系エンジニアが
自分で書いて有益であろうもの


・Munin Plugin
・Nagios Plugin
・Ganglia Plugin
・Zabbix Plugin
・fluent-plugin
運用系エンジニアが
自分で書いて有益であろうもの


・Munin Plugin → なんでもok
・Nagios Plugin → なんでもok
・Ganglia Plugin → pythonだけ?
・Zabbix Plugin → よく知らない
・fluent-plugin → ruby
そこで
out_exec_filter
log_format main
    '$remote_addr - $remote_user
[$time_local] "$request" $status
$body_bytes_sent "$http_referer"
"$http_user_agent "$request_time';


 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"}

 普通に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"}

 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":""},}
 combined+レスポンスタイムなnginxのログフォーマット
デモ
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
Perl歴
Lightning Talk at YAPC::Asia 2012




Fluentdで、コードを書いてみ
ようかなと思った話
               ご清聴ありがとうございました



                                    @studio3104

Contenu connexe

Tendances

Perlで伝統芸能
Perlで伝統芸能Perlで伝統芸能
Perlで伝統芸能hitode909
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方Soudai Sone
 
大ざっぱにオブジェクト指向
大ざっぱにオブジェクト指向大ざっぱにオブジェクト指向
大ざっぱにオブジェクト指向azuma satoshi
 
CakePHP+Smartyハイブリッドによるラクラク開発
CakePHP+Smartyハイブリッドによるラクラク開発CakePHP+Smartyハイブリッドによるラクラク開発
CakePHP+Smartyハイブリッドによるラクラク開発Shinzo SAITO
 
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道20123時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012Yusuke Ando
 
PHP Object Injection入門
PHP Object Injection入門PHP Object Injection入門
PHP Object Injection入門Yu Iwama
 
Ruby 同好会宣言
Ruby 同好会宣言Ruby 同好会宣言
Ruby 同好会宣言Yuya Takeyama
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるjamadam
 
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~leverages_event
 
Web技術勉強会 第25回
Web技術勉強会 第25回Web技術勉強会 第25回
Web技術勉強会 第25回龍一 田中
 
実用裏方 Perl 入門
実用裏方 Perl 入門実用裏方 Perl 入門
実用裏方 Perl 入門keroyonn
 
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話azuma satoshi
 
Nambapm_napthats
Nambapm_napthatsNambapm_napthats
Nambapm_napthatsnapthats
 

Tendances (19)

Perlで伝統芸能
Perlで伝統芸能Perlで伝統芸能
Perlで伝統芸能
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方
 
大ざっぱにオブジェクト指向
大ざっぱにオブジェクト指向大ざっぱにオブジェクト指向
大ざっぱにオブジェクト指向
 
CakePHP+Smartyハイブリッドによるラクラク開発
CakePHP+Smartyハイブリッドによるラクラク開発CakePHP+Smartyハイブリッドによるラクラク開発
CakePHP+Smartyハイブリッドによるラクラク開発
 
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道20123時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
 
PHP Object Injection入門
PHP Object Injection入門PHP Object Injection入門
PHP Object Injection入門
 
Ruby 同好会宣言
Ruby 同好会宣言Ruby 同好会宣言
Ruby 同好会宣言
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
 
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
 
Web技術勉強会 第25回
Web技術勉強会 第25回Web技術勉強会 第25回
Web技術勉強会 第25回
 
実用裏方 Perl 入門
実用裏方 Perl 入門実用裏方 Perl 入門
実用裏方 Perl 入門
 
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
 
01 php7
01   php701   php7
01 php7
 
Teclab3
Teclab3Teclab3
Teclab3
 
Yahoo!ボックスAPI Hackathon向け資料
Yahoo!ボックスAPI Hackathon向け資料Yahoo!ボックスAPI Hackathon向け資料
Yahoo!ボックスAPI Hackathon向け資料
 
Yahoo!ボックスAPI Hackday資料
Yahoo!ボックスAPI Hackday資料Yahoo!ボックスAPI Hackday資料
Yahoo!ボックスAPI Hackday資料
 
OSC京都2011
OSC京都2011OSC京都2011
OSC京都2011
 
private-values
private-valuesprivate-values
private-values
 
Nambapm_napthats
Nambapm_napthatsNambapm_napthats
Nambapm_napthats
 

Similaire à Yapc -asia 2012 lt @studio3104

Material
MaterialMaterial
Material_TUNE_
 
テーマ「最適化」
テーマ「最適化」テーマ「最適化」
テーマ「最適化」technocat
 
EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみました
EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみましたEucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみました
EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみましたEtsuji Nakai
 
PerlとSQLのいろいろ
PerlとSQLのいろいろPerlとSQLのいろいろ
PerlとSQLのいろいろTakuya Tsuchida
 
モダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasiaモダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasia鉄次 尾形
 
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bashJun Nogata
 
知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数Wataru Terada
 
詳説ぺちぺち
詳説ぺちぺち詳説ぺちぺち
詳説ぺちぺちdo_aki
 
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのかSecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのかHiroshi Tokumaru
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)Hiroaki KOBAYASHI
 
CMSとPerlで遊ぼう
CMSとPerlで遊ぼうCMSとPerlで遊ぼう
CMSとPerlで遊ぼうDaiki Ichinose
 
テーマ「最適化 その2」
テーマ「最適化 その2」テーマ「最適化 その2」
テーマ「最適化 その2」technocat
 

Similaire à Yapc -asia 2012 lt @studio3104 (20)

Material
MaterialMaterial
Material
 
What is Metasepi?
What is Metasepi?What is Metasepi?
What is Metasepi?
 
テーマ「最適化」
テーマ「最適化」テーマ「最適化」
テーマ「最適化」
 
EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみました
EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみましたEucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみました
EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみました
 
0x300
0x3000x300
0x300
 
PerlとSQLのいろいろ
PerlとSQLのいろいろPerlとSQLのいろいろ
PerlとSQLのいろいろ
 
モダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasiaモダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasia
 
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
 
知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数
 
詳説ぺちぺち
詳説ぺちぺち詳説ぺちぺち
詳説ぺちぺち
 
PHP7を魔改造した話
PHP7を魔改造した話PHP7を魔改造した話
PHP7を魔改造した話
 
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのかSecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
 
Gorinphp0729
Gorinphp0729Gorinphp0729
Gorinphp0729
 
Gorinphp0729
Gorinphp0729Gorinphp0729
Gorinphp0729
 
zsh とわたし
zsh とわたし zsh とわたし
zsh とわたし
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
 
Subprocess no susume
Subprocess no susumeSubprocess no susume
Subprocess no susume
 
Perl勉強会#2資料
Perl勉強会#2資料Perl勉強会#2資料
Perl勉強会#2資料
 
CMSとPerlで遊ぼう
CMSとPerlで遊ぼうCMSとPerlで遊ぼう
CMSとPerlで遊ぼう
 
テーマ「最適化 その2」
テーマ「最適化 その2」テーマ「最適化 その2」
テーマ「最適化 その2」
 

Plus de Satoshi Suzuki

Prometheus meets Consul -- Consul Casual Talks
Prometheus meets Consul -- Consul Casual TalksPrometheus meets Consul -- Consul Casual Talks
Prometheus meets Consul -- Consul Casual TalksSatoshi Suzuki
 
focuslight-validator validate sinatra application - validation night at LINE ...
focuslight-validator validate sinatra application - validation night at LINE ...focuslight-validator validate sinatra application - validation night at LINE ...
focuslight-validator validate sinatra application - validation night at LINE ...Satoshi Suzuki
 
インフラエンジニアは死んだ Yapc -asia 2014
インフラエンジニアは死んだ Yapc -asia 2014 インフラエンジニアは死んだ Yapc -asia 2014
インフラエンジニアは死んだ Yapc -asia 2014 Satoshi Suzuki
 
My sql casual talks vol.6
My sql casual talks vol.6My sql casual talks vol.6
My sql casual talks vol.6Satoshi Suzuki
 
Fluetnd meetup japan #3 @studio3104
Fluetnd meetup japan #3 @studio3104 Fluetnd meetup japan #3 @studio3104
Fluetnd meetup japan #3 @studio3104 Satoshi Suzuki
 
MySQL ガチBeginnerがやってみたことと反省したこと
MySQL ガチBeginnerがやってみたことと反省したことMySQL ガチBeginnerがやってみたことと反省したこと
MySQL ガチBeginnerがやってみたことと反省したことSatoshi Suzuki
 

Plus de Satoshi Suzuki (8)

PyCon Kyushu 2018 LT
PyCon Kyushu 2018 LTPyCon Kyushu 2018 LT
PyCon Kyushu 2018 LT
 
Prometheus meets Consul -- Consul Casual Talks
Prometheus meets Consul -- Consul Casual TalksPrometheus meets Consul -- Consul Casual Talks
Prometheus meets Consul -- Consul Casual Talks
 
Monitoringcasual007
Monitoringcasual007Monitoringcasual007
Monitoringcasual007
 
focuslight-validator validate sinatra application - validation night at LINE ...
focuslight-validator validate sinatra application - validation night at LINE ...focuslight-validator validate sinatra application - validation night at LINE ...
focuslight-validator validate sinatra application - validation night at LINE ...
 
インフラエンジニアは死んだ Yapc -asia 2014
インフラエンジニアは死んだ Yapc -asia 2014 インフラエンジニアは死んだ Yapc -asia 2014
インフラエンジニアは死んだ Yapc -asia 2014
 
My sql casual talks vol.6
My sql casual talks vol.6My sql casual talks vol.6
My sql casual talks vol.6
 
Fluetnd meetup japan #3 @studio3104
Fluetnd meetup japan #3 @studio3104 Fluetnd meetup japan #3 @studio3104
Fluetnd meetup japan #3 @studio3104
 
MySQL ガチBeginnerがやってみたことと反省したこと
MySQL ガチBeginnerがやってみたことと反省したことMySQL ガチBeginnerがやってみたことと反省したこと
MySQL ガチBeginnerがやってみたことと反省したこと
 

Yapc -asia 2012 lt @studio3104