2013年9月12日木曜日

APC(PHP)のメモリ使用率をチェックするNagiosプラグイン

スズキです。

"apc_sma_info"関数の出力を、そのままJSON形式で表示するPHPファイルを用意します。
# cat apc_sma_info.php
<?php print(json_encode(apc_sma_info())); ?>

Webサーバ経由でアクセスすると下記のように出力されます。
# curl -s http://localhost/apc_sma_info.php
{
    "num_seg":1,
    "seg_size":67108728,
    "avail_mem":58670064,
    "block_lists":[
        [
            {"size":58670024,"offset":8438760}
        ]
    ]
}

使用率は下記のように計算できます。
# curl -s http://localhost/apc_sma_info.php \
| jq '100 - .avail_mem / .num_seg / .seg_size * 100' \
| cut -d. -f1
12

上記を使ってNagiosプラグインを作ってみます。
# cd /usr/lib64/nagios/plugins
# cat check_apc_sma
#!/bin/sh

. `dirname $0`/utils.sh

set -e
trap 'echo "UNKNOWN: $?"; exit $STATE_UNKNOWN' ERR

WARN=0
CRIT=0

while getopts c:w:u: OPTNAME; do
    case $OPTNAME in
    w)
        WARN=$OPTARG
        ;;
    c)
        CRIT=$OPTARG
        ;;
    u)
        URL=$OPTARG
        ;;
    *)
        echo "UNKNOWN: Usage"
        exit $STATE_UNKNOWN
        ;;
    esac
done

USAGE=`curl -s $URL | jq '100 - .avail_mem / .num_seg / .seg_size * 100' | cut -d. -f1`

if   [ $USAGE -gt $CRIT ]; then
    echo "CRITICAL USAGE $USAGE%|usage=$USAGE%;$WARN;$CRIT;0;100"
    exit $STATE_CRITICAL
elif [ $USAGE -gt $WARN ]; then
    echo "WARNING USAGE $USAGE%|usage=$USAGE%;$WARN;$CRIT;0;100"
    exit $STATE_WARNING
else
    echo "OK USAGE $USAGE%|usage=$USAGE%;$WARN;$CRIT;0;100"
    exit $STATE_OK
fi

echo "UNKNOWN: End"; exit $STATE_UNKNOWN

実行すると下記のようになります。
# ./check_apc_sma -c 20 -w 10 -u http://localhost/apc_sma_info.php ; echo $?
WARNING USAGE 12%|usage=12%;10;20;0;100
1

あとはNagiosに組み込むだけです。(ここは未検証...)

近頃、JSONが出てきたら、すぐに"jq"です...
--------
http://www.suz-lab.com

0 コメント: