断続的なアラートや瞬間的な過負荷等で、対応を検討する際に
プロセス一覧を時系列でみたくなる事ありませんか?
ありますね。
弊社では一部のサーバーをMackerelで監視していて
プラグインで任意の監視項目(メトリック)の追加も簡単にできるのでこれを利用していきます。
公式ページを参考に、今回はPHP
でMackerelにメトリックを投稿してみます。
ホストのカスタムメトリックを投稿する
スクリプトを設置する
プロセス一覧を出力するプラグインを監視対象のサーバーに保存します。
processlist.php
<?php
define(METRICS_NAME,'process-list'); // Mackerelのカスタムメトリックに表示される名前
exec('top -n1 -b | awk \'{print $9,$12}\'', $output);
$processes = array();
for ($i = 7, $count = count($output); $i < $count; $i++) {
$proc = explode(' ', $output[$i]);
if (count($proc) != 2) {
continue;
}
if ($proc[0] == '0.0' || $proc[1] == 'top') {
continue;
}
if (preg_match('/^(.*?)[\/]/', $proc[1], $matches) === 1) {
$proc[1] = $matches[1];
}
if (array_key_exists($proc[1], $processes)) {
$processes[$proc[1]] += $proc[0];
} else {
$processes[$proc[1]] = $proc[0];
}
}
$graph = array(
'graphs' => array(
METRICS_NAME => array(
'label' => 'top',
'unit' => 'percentage',
'metrics' => array(),
),
),
);
$timestamp = date('Y-m-d H:i:s');
echo "# mackerel-agent-plugin\n";
echo json_encode($graph) . "\n";
foreach ($processes as $key => $value) {
echo METRICS_NAME.".{$key}\t{$value}\t{$timestamp}\n";
}
mackerel-agent.conf
ファイルに先程設置したプラグインを使用するように追記します。
mackerel-agent.conf
[plugin.metrics.process-list]
command = "php /path/to/processlist.php"
Mackerelで確認
設定したホストのカスタムメトリックにこんな感じでプロセスの一覧が表示されれば完了です。
さいごに
プロセス一覧を可視化できるようになって、
先回りして対応するなど、アラートへの対応が少し楽になった気がしています。
Mackerelが標準で対応してない項目でも、
少しスクリプトを書くだけで簡単に追加して可視化できるのは便利ですし
どんどん使っていきたいですね。