share facebook facebook twitter menu hatena pocket slack

2011.05.24 TUE

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

鈴木 宏康

WRITTEN BY 鈴木 宏康

下記の記事で準備した内容をまとめて、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のパフォーマンスデータのメトリクスが確認可能です。

グラフについても、下記のように表示されます。

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら

鈴木 宏康

鈴木 宏康

愛知県生まれ。東京工業大学大学院修士課程修了。在学時より、ベンチャー企業でインターネットに関する業務に携わり、現在はクラウド(主にAmazon Web Services)上での開発・運用を軸とした事業の、業務の中心として活躍。