memcachedの統計情報をCSVファイルに出力する
get_hits,get_misses等を時刻とともにCSVファイルに出力するコードを下に記述しました。
タスクスケジューラやcronで定期的に実行することで統計情報の推移を調べることができます。
#!c:/perl/bin/perl use Cache::Memcached; my $server; my $port; my $server_port; my $stats; my $hosts; my $host; my $server_port; my $misc; my $get_hits; my $get_misses; my $get_hits_ratio; my $get_misses_ratio; my $filename; my @ltime; my $date; my $date_without_slash; my $time; $server = "localhost"; $port = "11211"; $server_port = "$server" . ":" . "$port"; print '$server_port = ' . "$server_port" . "\n"; $memd = new Cache::Memcached { 'servers' => [ $server_port ], }; $stats = $memd->stats([qw(misc)]); $hosts = $stats->{hosts}; $host = $hosts->{"$server_port"}; $misc = $host->{misc}; $get_hits = $misc->{get_hits}; $get_misses = $misc->{get_misses}; if (($get_hits + $get_misses) == 0) { $get_hits_ratio = 0; $get_misses_ratio = 0; } else { $get_hits_ratio = $get_hits/($get_hits + $get_misses); $get_misses_ratio = $get_misses/($get_hits + $get_misses); } $bytes = $misc->{bytes}; @ltime=localtime(time); $date = sprintf("%04d/%02d/%02d", $ltime[5] + 1900, $ltime[4] + 1, $ltime[3]); $date_without_slash = sprintf("%04d%02d%02d", $ltime[5] + 1900, $ltime[4] + 1, $ltime[3]); $time = sprintf("%02d:%02d:%02d", $ltime[2], $ltime[1], $ltime[0]); $filename = "memcachestats" . $date_without_slash . ".csv"; unless (-e $filename) { open(OUT, ">$filename"); print OUT "time"; print OUT ","; print OUT "get_hits"; print OUT ","; print OUT "get_misses"; print OUT ","; print OUT "get_hits_ratio"; print OUT ","; print OUT "get_misses_ratio"; print OUT ","; print OUT "bytes"; print OUT "\n"; close(OUT); } open(OUT, ">>$filename"); print OUT $date; print OUT " "; print OUT $time; print OUT ","; print OUT $get_hits; print OUT ","; print OUT $get_misses; print OUT ","; print OUT $get_hits_ratio; print OUT ","; print OUT $get_misses_ratio; print OUT ","; print OUT $bytes; print OUT "\n"; close(OUT);