安定したWebサービスを提供するためには欠かすことができないのが監視です。監視を行うことで障害をいち早く検知し、
稼働監視とリソースモニタリング
Webサービスのシステムの監視には大きく分けて2種類の監視があります。1つ目は稼働監視、
稼働監視は監視を行った瞬間の
memcachedの監視も稼働監視とリソースモニタリングの両面から行う必要があります。
memcachedの稼働監視
memcachedの稼働監視としてNagiosを利用した監視を紹介します。Nagiosはオープンソースの稼働監視ソフトウェアとして最も有名なソフトウェアで、
- 『WEB+DB PRESS Vol.
55』 - http://
gihyo. jp/ magazine/ wdpress/ archive/ 2010/ vol55 - 『サーバ/インフラを支える技術』
- http://
gihyo. jp/ book/ 2008/ 978-4-7741-3566-3
接続と動作の監視
memcachedの稼働監視として真っ先にあげられるのが、
define command {
command_name check_memcached
command_line $USER1$/check_tcp \
-H $HOSTADDRESS$ \
-p 11211 \
-t 5
}
上記の監視コマンド設定を利用すると、
define host{
use generic-host
host_name memserver
alias memserver
address 192.168.67.30
}
define service{
use generic-service
host_name memserver
service_description memcached
check_command check_memcached ---(1)
}
IPアドレス
この設定のみで死活監視を行うことができますが、
define command {
command_name check_memcached
command_line $USER1$/check_tcp
-H $HOSTADDRESS$ \
-p 11211 \
-t 5 \
-s 'stats\r\nquit\r\n' \ --- (1)
-E \ ---- (2)
-e 'uptime' \ --- (3)
-M crit
}
(1)
さらにNagiosの監視プラグインを作成することで、
- check_
memcached_ paranoid - http://
d. hatena. ne. jp/ hirose31/ 20100118/ 1263810212
コネクション数の監視
memcachedがListenするポートに対して接続をする死活監視、
先日
障害の有無に関わらず最大接続数に達することでクライアントがmemcachedに接続できなくなり、
以下は現在のコネクション数が最大同時コネクション数に対して、
#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long;
use IO::Socket::INET;
GetOptions(
'H=s' => \my $HOST, 'p=s' => \my $PORT,
'w=i' => \my $WARN, 'c=i' => \my $CRITICAL,
);
my $sock = IO::Socket::INET->new(
PeerAddr => $HOST, PeerPort => $PORT
);
my ($raw_stats, $raw_setting_stats);
$sock->syswrite("stats\r\n");
$sock->sysread( $raw_stats, 8192 );
my %stats;
foreach my $line ( split /\r?\n/, $raw_stats ) {
if ( $line =~ /^STAT\s([^ ]+)\s(.+)$/ ) {
$stats{$1} = $2;
}
}
$sock->syswrite("stats settings\r\n");
$sock->sysread( $raw_setting_stats, 8192 );
my %setting;
foreach my $line ( split /\r?\n/, $raw_setting_stats ) {
if ( $line =~ /^STAT\s([^ ]+)\s(.+)$/ ) {
$setting{$1} = $2;
}
}
my $rate = $stats{curr_connections} / $setting{maxconns} * 100;
if ( $rate >= $CRITICAL ) {
printf "MEMCACHED CRTICAL: conn/max = %d\n",int($rate);
exit(2); #crit
}
elsif ( $rate >=$WARN ) {
printf "MEMCACHED WARNING: conn/max = %d\n", int($rate);
exit(1); #warn
}
exit(0);
define command {
command_name check_memcached_conn
command_line $USER1$/check_memcahced_conn.pl
-H $HOSTADDRESS$ \
-p 11211 \
-w 85 \
-c 90
}
上記の設定では、
CloudForecastによるリソースモニタリング
ここまでmemcachedの稼働監視として、
CloudForecastとは
CloudForecastとは、
- RRDTool
- http://
oss. oetiker. ch/ rrdtool/
CloudForecastのインストール
CloudForecastはSNMPとRRDToolを使用しています。RRDToolはCentOSの場合、
$ sudo yum install net-snmp net-snmp-perl rrdtool rrdtool-perl
RRDToolやSNMPのPerlのモジュールも必要となるため同時にインストールします。CloudForecastのソースコードはgithubから取得できます。また、
$ git clone git://github.com/kazeburo/cloudforecast.git $ cd cloudforecast $ cpanm -l extlib --installdeps .
memcachedサーバの登録
memcachedサーバをモニタリングするための設定を紹介します。まず、
# 設定ファイル $ cp cloudforecast_sample.yaml cloudforecast.yaml
次にサーバ一覧ファイルをserver_
--- #Memcached ----(1) servers: - config: memcached.yaml ---(2) hosts: - 192.168.67.30 memserver memcached server 1 ----(3)
(1)
(2)
resources:
- traffic:eth1
- basic
- memcached:11211
resourcesにモニタリングするリソースを追加します。ここではeth1インターフェースの通信量
ここまで設定が完了したら、
# Webサーバ port 5000番でListen $ ./cloudforecast_web -p 5000 -c cloudforecast.yaml -l server_list.yaml # 巡回デーモン。5分ごとにリソースデータの取得を行います $ ./cloudforecast_radar -c cloudforecast.yaml -l server_list.yaml
起動後ブラウザで

グラフ解説
CloudForecastによるmemcachedのリソースモニタリングは、
telnet localhost 12345 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. stats STAT pid 14509 STAT uptime 12031825 STAT time 1283157970 STAT version 1.4.4 STAT pointer_size 64 STAT rusage_user 5510.072358 STAT rusage_system 17891.870172 STAT curr_connections 337 STAT total_connections 1314016 STAT connection_structures 806 STAT cmd_get 3128199909 STAT cmd_set 187991838 STAT cmd_flush 13 STAT get_hits 3047486629 STAT get_misses 80713280
statsコマンドによるデータ収集の結果、




上から、
最後のグラフは、
まとめ
memcachedのNagiosを利用した稼働監視とCloudForecastでのリソースモニタリングについて紹介しました。Webサービスのスケーラビリティにおいてmemcachedが重要なコンポーネントの1つとなって今、
次回はこれまでに説明した起動オプションやセキュリティ以外のmemcachedを利用する上でのTIPSを紹介します。