下記の記事で準備した内容をまとめて、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のパフォーマンスデータのメトリクスが確認可能です。
グラフについても、下記のように表示されます。