LoginSignup
3
1

More than 5 years have passed since last update.

Mackerelのカスタムメトリックでプロセス一覧を表示する

Posted at

断続的なアラートや瞬間的な過負荷等で、対応を検討する際に
プロセス一覧を時系列でみたくなる事ありませんか?
ありますね。

弊社では一部のサーバーを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で確認

設定したホストのカスタムメトリックにこんな感じでプロセスの一覧が表示されれば完了です。

スクリーンショット 2018-07-17 18.50.25.png

さいごに

プロセス一覧を可視化できるようになって、
先回りして対応するなど、アラートへの対応が少し楽になった気がしています。

Mackerelが標準で対応してない項目でも、
少しスクリプトを書くだけで簡単に追加して可視化できるのは便利ですし
どんどん使っていきたいですね。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1