2011年5月19日木曜日

NagiosとCloudWatchを組み合わせてみた

スズキです。

下記で準備したことをまとめて、ようやくNagiosのCloudWatchが連動するようにできました。

-Nagiosでパフォーマンスデータをファイルに出力して処理する
-PHPでCloudWatchにメトリクスのデータを登録
-NagiosのパフォーマンスデータをCloudWatch用に抽出

まずは、「Nagiosでパフォーマンスデータをファイルに出力して処理する」の内容ですが、
下記のような"/etc/nagios/nagios.cfg"の設定で、パフォーマンスデータを
"/tmp/service-perfdata"に出力するようにし、
定期的に"process-service-perfdata-file"コマンドで処理するようにしています。

...
process_performance_data=1
...
service_perfdata_file=/tmp/service-perfdata
...
service_perfdata_file_template=[SERVICEPERFDATA]\t$TIMET$\t$HOSTNAME$\t$SERVICEDESC$\t$SERVICEEXECUTIONTIME$\t$SERVICELATENCY$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$
...
service_perfdata_file_mode=a

service_perfdata_file_processing_interval=300
...
service_perfdata_file_processing_command=process-service-perfdata-file
...

"/tmp/service-perfdata"に出力されるパフォーマンスデータは次の通りです。

[SERVICEPERFDATA]       1305756366      localhost       Current Users   0.006   0.197   USERS OK - 1 users currently logged in  users=1;20;50;0
[SERVICEPERFDATA]       1305756376      localhost       PING    4.005   0.241   PING OK - Packet loss = 0%, RTA = 0.04 ms       rta=0.040000ms;100.000000;500.000000;0.000000 pl=0%;20;60;0
[SERVICEPERFDATA]       1305756406      localhost       Root Partition  0.005   0.132   DISK OK - free space: / 6244 MB (65% inode=96%):        /=3322MB;8063;9071;0;10079
[SERVICEPERFDATA]       1305756436      localhost       Current Load    0.005   0.011   OK - load average: 0.00, 0.00, 0.00     load1=0.000;5.000;10.000;0; load5=0.000;4.000;6.000;0; load15=0.000;3.000;4.000;0;
[SERVICEPERFDATA]       1305756486      localhost       Swap Usage      0.005   0.204   SWAP OK - 100% free (2047 MB out of 2047 MB)    swap=2047MB;0;0;0;2047
[SERVICEPERFDATA]       1305756576      localhost       Total Processes 0.008   0.053   PROCS OK: 7 processes with STATE = RSZDT

"process-service-perfdata-file"コマンドは下記のように、
"/etc/nagios/objects/commands.cfg"に定義しています。

...
define command {
    command_name    process-service-perfdata-file
    command_line    /opt/cloudpack/bin/put-perfdata-cloudwatch /tmp/service-perfdata
}

実際にNagiosのパフォーマンスデータをCloudWatchのカスタムメトクリクに登録するのは、
PHPでCloudWatchにメトリクスのデータを登録
NagiosのパフォーマンスデータをCloudWatch用に抽出
あたりの話になります。

上記の記事に出てくるPHPスクリプトを融合させて、
最終的に"put-perfdata-cloudwatch"は下記のようになりました。

require_once("/opt/aws/php/sdk.class.php");
define("AWS_KEY"       , "AAAAAAAA");
define("AWS_SECRET_KEY", "SSSSSSSS");
date_default_timezone_set("Asia/Tokyo");
$metrics = array();

$time = time();
rename($argv[1], $argv[1] . "." . $time);
$lines = file($argv[1] . "." . $time);
foreach($lines as $line){
    $tokens = split("\t", $line);
    if(trim($tokens[7]) != "") {
        $values = split(" ", $tokens[7]);
        foreach($values as $value) {
            if(trim($value) != "") {
                preg_match_all("/([0-9A-Za-z\/]+)=([0-9.]+)/", $value, $matches);
                array_push($metrics, array(
                    "MetricName" => $tokens[3] . " (". $matches[1][0] . ")",
                    "Dimensions" => array(
                        array("Name" => "Host", "Value" => $tokens[2])
                    ),
                    "Timestamp" => date("c", $tokens[1]),
                    "Value"     => $matches[2][0],
                    "Unit"      => "None"
                ));
            }
        }
    }
}

$cw = new AmazonCloudWatch();
$cw->set_region(AmazonCloudWatch::REGION_US_E1);
$response = $cw->put_metric_data("suz-lab", $metrics);

上記の状態でNagiosを再起動すると、定期的(5分ごと)にパフォーマンスデータを
CloudWatchのカスタムメトリクスに登録するようになります。

実際に"AWS Management Console"で確認すると、下記のように、
Nagiosのパフォーマンスデータのメトリクスが確認できます。


グラフもしっかり表示してます。


cloudpackの監視システムにも組み込もう。
--------
http://www.suz-lab.com

0 コメント: