Nagios監視項目追加設定

VPSのCentOS7にインストールしたNagios(過去記事:「NagiosをYUMでインストール」)に監視項目の追加及びダウンタイムスケジューリング設定要領の備忘録です。

◆追加監視項目

下記の6項目を追加し設定します。

1 メモリ使用状況
2 ログインユーザ数
3 NTP誤差状況
4 clamd
5 MySQL
6 ネットワーク使用状況

◆仕組み

私の環境では、ローカルホスト(当サーバ)の監視なので、「nagios.cfg」で指定される「localhost.cfg」と「commands.cfg」の設定ファイルを使用して設定します。

「commands.cfg」に追加するコマンドセクションを設定し、「localhost.cfg」に定義済みコマンドを使用して追加監視項目サービスを設定します。

Nagiosの各設定ファイル(cfgファイル)で使用できるマクロ($USERx$、$ARGx$など)の一覧は「Standard Macros in Nagios」で確認することができます。

◆監視項目設定

・メモリ使用状況
# wget "https://exchange.nagios.org/components/com_mtree/attachment.php?link_id=4174&cf_id=24" -O check_mem
# mv check_mem /usr/lib64/nagios/plugins/
# chmod +x /usr/lib64/nagios/plugins/check_mem

1行目:Nagios Exchangeからメモリ使用状況を監視するためのプラグインをダウンロード
2行目:ダウンロードしたプラグインを「plugins」ディレクトリに移動
3行目:実行権限を付与

# cd /usr/lib64/nagios/plugins
# ./check_mem -h

Help for check_mem

Basic usage: check_mem -w {warning} -c {critical} -W {warning} -C {critical}

Command switches are optional, default values for warning is 95% and critical is 98%
-w - Sets warning value for Memory Usage. Default is 95%
-c - Sets critical value for Memory Usage. Default is 98%
-W - Sets warning value for Swap Usage. Default is 95%
-C - Sets critical value for Swap Usage. Default is 98%
-h  - Displays this help message

Example: check_mem -w 80 -c 90 -W 40 -C 60



Author: Lukasz Gogolin, lukasz.gogolin@gmail.com
Git: http://bitbucket.org/lgogolin/nagios_plugins

1行目:監視サービスプラグインが格納されているディレクトリに移動
2行目:「check_mem」プラグインのヘルプ参照

# vi /etc/nagios/objects/commands.cfg

# 'check_mem' command definition

define command {

    command_name    check_mem
    command_line    $USER1$/check_mem -w $ARG1$ -c $ARG2$ -W $ARG3$ -C $ARG4$
}

1行目:「commands.cfg」にコマンド定義を追加
3行目:メモリチェックの定義であることのコメント
7行目:コマンドを特定するための名前を指定
8行目:実行するコマンドライン

# vi /etc/nagios/objects/localhost.cfg

define service {

    use                     generic-service
    host_name               localhost
    service_description     Memory Usage
    check_command           check_mem!80!90!80!90
}

#define service {

#    use                     local-service           ; Name of service template to use
#    host_name               localhost
#    service_description     Swap Usage
#    check_command           check_local_swap!20%!10%
#}

1行目:「localhost.cfg」にサービス定義を追加
5行目:useディレクティブで、「generic-service」テンプレートから設定を継承するように指定
6行目:host_nameでサービスを割り当てるホストオブジェクトを指定
7行目:service_descriptionはサービスに対する説明
8行目:check_commandでサービス監視状態を確認するコマンドを指定
   メモリ使用量80%以上で警告、90%以上で異常、スワップ使用量80%以上で警告、90% 以上で異常で設定
11~17行目:追加した「check_mem」でSwapも確認できるためコメントアウト

・ログインユーザ数
# vi /etc/nagios/objects/localhost.cfg

define service {

    use                     local-service           ; Name of service template to use
    host_name               localhost
    service_description     Current Users
    check_command           check_local_users!3!5
}

1行目:「localhost.cfg」にあるログインユーザ数の値を編集
8行目:ログインユーザ数を3以上で警告、5以上で異常で設定

・ NTP誤差状況
# ./check_ntp -h
check_ntp v2.3.3 (nagios-plugins 2.3.3)
Copyright (c) 2006 Sean Finney
Copyright (c) 2006-2014 Nagios Plugin Development Team
        <devel@nagios-plugins.org>

This plugin checks the selected ntp server


WARNING: check_ntp is deprecated. Please use check_ntp_peer or
check_ntp_time instead.

Usage:
 check_ntp -H <host> [-w <warn>] [-c <crit>] [-j <warn>] [-k <crit>] [-4|-6] [-v verbose] [-d <delay>]

Options:
 -h, --help
    Print detailed help screen
 -V, --version
    Print version information
 --extra-opts=[section][@file]
    Read options from an ini file. See
    https://www.nagios-plugins.org/doc/extra-opts.html
    for usage and examples.
 -H, --hostname=ADDRESS
    Host name, IP Address, or unix socket (must be an absolute path)
 -p, --port=INTEGER
    Port number (default: 123)
 -4, --use-ipv4
    Use IPv4 connection
 -6, --use-ipv6
    Use IPv6 connection
 -w, --warning=THRESHOLD
    Offset to result in warning status (seconds)
 -c, --critical=THRESHOLD
    Offset to result in critical status (seconds)
 -j, --jwarn=THRESHOLD
    Warning threshold for jitter
 -k, --jcrit=THRESHOLD
    Critical threshold for jitter
 -d, --delay=INTEGER
    Delay between each packet (seconds)
 -z, --allow-zero-stratum
    Do not discard DNS servers which report a stratum of zero (0)
 -t, --timeout=INTEGER:<timeout state>
    Seconds before connection times out (default: 10)
    Optional ":<timeout state>" can be a state integer (0,1,2,3) or a state STRING
 -v, --verbose
    Show details for command-line debugging (Nagios may truncate output)

Notes:
 --delay is useful if you are triggering the anti-DOS for the
 NTP server and need to leave a bigger gap between queries
 See:
 https://www.nagios-plugins.org/doc/guidelines.html#THRESHOLDFORMAT
 for THRESHOLD format and examples.

Examples:
 Normal offset check:
  ./check_ntp -H ntpserv -w 0.5 -c 1

 Check jitter too, avoiding critical notifications if jitter isn't available
 (See Notes above for more details on thresholds formats):
  ./check_ntp -H ntpserv -w 0.5 -c 1 -j -1:100 -k -1:200

Send email to help@nagios-plugins.org if you have questions regarding use
of this software. To submit patches or suggest improvements, send email to
devel@nagios-plugins.org

WARNING: check_ntp is deprecated. Please use check_ntp_peer or
check_ntp_time instead.

1行目:「check_ntp」プラグインのヘルプ参照

# vi /etc/nagios/objects/commands.cfg

# 'check_ntp' command definition

define command {

    command_name    check_ntp
    command_line    $USER1$/check_ntp -H $ARG1$ -w $ARG2$ -c $ARG3$
}

1行目:「commands.cfg」にコマンド定義を追加
8行目:ntpのチェックを実行するコマンドライン

# vi /etc/nagios/objects/localhost.cfg

define service {

    use                     generic-service
    host_name               localhost
    service_description     NTP
    check_command           check_ntp!ntp.nict.jp!1!2
}

1行目:「localhost.cfg」にサービス定義を追加
8行目:ホストにNTPサーバ「ntp.nict.jp」、誤差が1秒で警告、2秒で異常に設定

・clamd
# ./check_clamd -h
check_clamd v2.3.3 (nagios-plugins 2.3.3)
Copyright (c) 1999 Ethan Galstad <nagios@nagios.org>
Copyright (c) 1999-2014 Nagios Plugin Development Team
        <devel@nagios-plugins.org>

This plugin tests CLAMD connections with the specified host (or unix socket).

Usage:
check_clamd -H host -p port [-w <warning time>] [-c <critical time>] [-s <send string>]
[-e <expect string>] [-q <quit string>][-m <maximum bytes>] [-d <delay>]
[-t <timeout seconds>] [-r <refuse state>] [-M <mismatch state>] [-v] [-4|-6] [-j]
[-D <warn days cert expire>[,<crit days cert expire>]] [-S <use SSL>] [-E]
[-N <server name indication>]

Options:
 -h, --help
    Print detailed help screen
 -V, --version
    Print version information
 --extra-opts=[section][@file]
    Read options from an ini file. See
    https://www.nagios-plugins.org/doc/extra-opts.html
    for usage and examples.
 -H, --hostname=ADDRESS
    Host name, IP Address, or unix socket (must be an absolute path)
 -p, --port=INTEGER
    Port number (default: none)
 -4, --use-ipv4
    Use IPv4 connection
 -6, --use-ipv6
    Use IPv6 connection
 -E, --escape
    Can use \n, \r, \t or \\ in send or quit string. Must come before send or quit option
    Default: nothing added to send, \r\n added to end of quit
 -s, --send=STRING
    String to send to the server
 -e, --expect=STRING
    String to expect in server response (may be repeated)
 -A, --all
    All expect strings need to occur in server response. Default is any
 -q, --quit=STRING
    String to send server to initiate a clean close of the connection
 -r, --refuse=ok|warn|crit
    Accept TCP refusals with states ok, warn, crit (default: crit)
 -M, --mismatch=ok|warn|crit
    Accept expected string mismatches with states ok, warn, crit (default: warn)
 -j, --jail
    Hide output from TCP socket
 -m, --maxbytes=INTEGER
    Close connection once more than this number of bytes are received
 -d, --delay=INTEGER
    Seconds to wait between sending string and polling for response
 -D, --certificate=INTEGER[,INTEGER]
    Minimum number of days a certificate has to be valid.
    1st is #days for warning, 2nd is critical (if not specified - 0).
 -S, --ssl
    Use SSL for the connection.
 -w, --warning=DOUBLE
    Response time to result in warning status (seconds)
 -c, --critical=DOUBLE
    Response time to result in critical status (seconds)
 -t, --timeout=INTEGER:<timeout state>
    Seconds before connection times out (default: 10)
    Optional ":<timeout state>" can be a state integer (0,1,2,3) or a state STRING
 -v, --verbose
    Show details for command-line debugging (Nagios may truncate output)

Send email to help@nagios-plugins.org if you have questions regarding use
of this software. To submit patches or suggest improvements, send email to
devel@nagios-plugins.org

1行目:「check_clamd」プラグインのヘルプ参照

# vi /etc/nagios/objects/commands.cfg

# 'check_clamd command definition

define command {

    command_name    check_clamd
    command_line    $USER1$/check_clamd -H $ARG1$
}

1行目:「commands.cfg」にコマンド定義を追加
8行目:clamdと接続テストを実行するコマンドライン

# vi /etc/nagios/objects/localhost.cfg

define service {

    use                     generic-service
    host_name               localhost
    service_description     clamd
    check_command           check_clamd!/var/run/clamd.scan/clamd.sock
}

1行目:「localhost.cfg」にサービス定義を追加
8行目:ホストにclamdソケットをフルパスで設定

・MySQL
# ./check_mysql -h
check_mysql v2.3.3 (nagios-plugins 2.3.3)
Copyright (c) 1999-2014 Nagios Plugin Development Team
        <devel@nagios-plugins.org>

This program tests connections to a MySQL server


Usage:
 check_mysql [-d database] [-H host] [-P port] [-s socket]
       [-u user] [-p password] [-S] [-l] [-a cert] [-k key]
       [-C ca-cert] [-D ca-dir] [-L ciphers] [-f optfile] [-g group]

Options:
 -h, --help
    Print detailed help screen
 -V, --version
    Print version information
 --extra-opts=[section][@file]
    Read options from an ini file. See
    https://www.nagios-plugins.org/doc/extra-opts.html
    for usage and examples.
 -H, --hostname=ADDRESS
    Host name, IP Address, or unix socket (must be an absolute path)
 -P, --port=INTEGER
    Port number (default: 3306)
 -n, --ignore-auth
    Ignore authentication failure and check for mysql connectivity only
 -s, --socket=STRING
    Use the specified socket (has no effect if -H is used)
 -d, --database=STRING
    Check database with indicated name
 -f, --file=STRING
    Read from the specified client options file
 -g, --group=STRING
    Use a client options group
 -u, --username=STRING
    Connect using the indicated username
 -p, --password=STRING
    Use the indicated password to authenticate the connection
    ==> IMPORTANT: THIS FORM OF AUTHENTICATION IS NOT SECURE!!! <==
    Your clear-text password could be visible as a process table entry
 -S, --check-slave
    Check if the slave thread is running properly.
 -w, --warning
    Exit with WARNING status if slave server is more than INTEGER seconds
    behind master
 -c, --critical
    Exit with CRITICAL status if slave server is more then INTEGER seconds
    behind master
 -l, --ssl
    Use ssl encryptation
 -C, --ca-cert=STRING
    Path to CA signing the cert
 -a, --cert=STRING
    Path to SSL certificate
 -k, --key=STRING
    Path to private SSL key
 -D, --ca-dir=STRING
    Path to CA directory
 -L, --ciphers=STRING
    List of valid SSL ciphers

 There are no required arguments. By default, the local database is checked
 using the default unix socket. You can force TCP on localhost by using an
 IP address or FQDN ('localhost' will use the socket as well).

Notes:
 You must specify -p with an empty string to force an empty password,
 overriding any my.cnf settings.

Send email to help@nagios-plugins.org if you have questions regarding use
of this software. To submit patches or suggest improvements, send email to
devel@nagios-plugins.org

1行目:「check_mysql」プラグインのヘルプ参照

# vi /etc/nagios/objects/commands.cfg

# 'check_mysql' command definition

define command {

    command_name    check_mysql
    command_line    $USER1$/check_mysql -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$
}

1行目:「commands.cfg」にコマンド定義を追加
8行目:MySQLサーバと接続テストを実行するコマンドライン

# vi /etc/nagios/objects/localhost.cfg

define service {

    use                     generic-service
    host_name               localhost
    service_description     MySQL
    check_command           check_mysql!suname!supass
}

1行目:「localhost.cfg」にサービス定義を追加
8行目:ホストの指定は必須ではなく、デフォルトでローカル・データベースに接続するた め、ユーザ名とパスワードのみ設定

・ ネットワーク使用状況
# wget "https://exchange.nagios.org/components/com_mtree/attachment.php?link_id=4105&cf_id=24" -O check_traffic_pnp4nagios.sh
# mv check_traffic_pnp4nagios.sh /usr/lib64/nagios/plugins/
# chmod +x /usr/lib64/nagios/plugins/check_traffic_pnp4nagios.sh

1行目: Nagios Exchangeからネットワーク使用状況を監視するためのプラグインをダウンロード
2行目:ダウンロードしたプラグインを「plugins」ディレクトリに移動
3行目:実行権限を付与

# ./check_traffic_pnp4nagios.sh -h
Useage: check_traffic -i Interface -w warn -c cirt

1行目:「check_traffic_pnp4nagios.sh」プラグインのヘルプ参照

# vi /usr/lib64/nagios/plugins/check_traffic_pnp4nagios.sh

#DIR=/App/nagios/tmp
DIR=/usr/lib64/nagios/var

#if [ `cat /App/nagios/tmp/.network-$DEVICE.tmp | wc -c` -eq 0 ];then
if [ `cat $FILE | wc -c` -eq 0 ];then
        echo -en `date +%s`"\t" >$FILE
#       echo -en `ifconfig $DEVICE | grep "RX bytes" | awk '{print $2}' | awk -F: '{print $NF}'`"\t" >>$FILE
#       echo `ifconfig $DEVICE | grep "RX bytes" | awk '{print $6}' | awk -F: '{print $NF}'`>>$FILE
        echo -en `ifconfig $DEVICE | grep "RX " | grep "bytes" | awk '{print $5}'`"\t" >>$FILE
        echo `ifconfig $DEVICE | grep "TX " | grep "bytes" | awk '{print $5}'`>>$FILE
        echo "This is first run"
else
        New_Time=`date +%s`
#       New_In=`ifconfig $DEVICE | grep "RX bytes" | awk '{print $2}' | awk -F: '{print $NF}'`
#       New_Out=`ifconfig $DEVICE | grep "RX bytes" | awk '{print $6}' | awk -F: '{print $NF}'`
        New_In=`ifconfig $DEVICE | grep "RX " | grep "bytes" | awk '{print $5}'`
        New_Out=`ifconfig $DEVICE | grep "TX " | grep "bytes" | awk '{print $5}'`

1行目:「check_traffic_pnp4nagios.sh」の編集
3行目:コメントアウト
4行目:追加し、一時ディレクトリを指定
6行目:コメントアウト
7行目:6行目を変数を使用した記述に変更
9,10,16,17行目:コメントアウト
11,12,18,19行目:ifconfigコマンド実行時の出力フォーマットに合わせた変更

# vi /etc/nagios/objects/commands.cfg

# 'check_traffic' command definition

define command {

    command_name    check_traffic
    command_line    $USER1$/check_traffic_pnp4nagios.sh -i $ARG1$ -w $ARG2$ -c $ARG3$
}

1行目:「commands.cfg」にコマンド定義の追加
8行目:NICの送受信状態を確認するコマンドライン

# vi /etc/nagios/objects/localhost.cfg

define service {

    use                     generic-service
    host_name               localhost
    service_description     Traffic Usage
    check_command           check_traffic!venet0!80000000!90000000
}

1行目:「localhost.cfg」にサービス定義を追加
8行目:インターフェイス名「venet0」の単位時間あたりの使用量が80Mbit以上で警告、90Mbit以上で異常に設定

# systemctl restart nagios

1行目:「nagios」のサービスを再起動

◆Downtime Scheduling Utility設定

サーバ運用時、閑散時間にバックアップやウィルスチェックの定時実行を設定しています。
その時間帯においては処理によってサーバが一時的に高負荷となってしまうため、Nagiosが警告・異常を検知する場合があります。
日々、定時で実行される場合は、毎回同じ時間にNagiosの警告・異常を受信するのは煩わしくなってしまうので、Downtime Scheduling Utilityを導入し、CRON設定して自動化する。

・ダウンロード

Nagios Exchangeからnagios_downをダウンロードし、サーバへWinSCPなどでアップロードします。

・ファイルの展開
# tar zxvf nagios_down-0.2.tar.gz
tar: これは tar アーカイブではないようです
tar: 次のヘッダをスキップします
tar: 前のエラーにより失敗ステータスで終了します

# file nagios_down-0.2.tar.gz
nagios_down-0.2.tar.gz: gzip compressed data, from Unix

# gunzip nagios_down-0.2.tar.gz

# tar zxvf nagios_down-0.2.tar
nagios_down.README
nagios_down.php

1~4行目:「tar.gz」の拡張子が付いていたので、tarコマンドで展開しようとしたところ、tarアーカイブではないエラー
6行目:fileコマンドでファイルタイプを確認
7行目:gzipの圧縮ファイルと判明
10行目:gunzipで解凍
12行目:tarコマンドで展開

tar.gzでまとめたファイルをさらにgzipで圧縮していたファイルのようです。

・ファイルの編集
# cp nagios_down.php /etc/nagios/
# rm -f nagios_down*
# vi /etc/nagios/nagios_down.php

#define(NAGIOSCMD, "/usr/local/groundwork/nagios/var/spool/nagios.cmd");
define(NAGIOSCMD, "/etc/nagios/var/rw/nagios.cmd");

# mkdir /etc/nagios/var /etc/nagios/var/rw

1行目:展開した「nagios_down.php」ファイルをコピー
2行目:ダウンロード及び展開したファイルを削除
3行目:「nagios_down.php」ファイルを編集
5行目:コメントアウト
6行目:「nagios.cmd」のパスを指定して追加
8行目:「nagios.cmd」が格納されるディレクトリを作成

# vi /etc/cron.d/nagios

01 00 * * * root /usr/bin/php /etc/nagios/nagios_down.php -h localhost -s "Current Load" -f -b "04:00 now" -e "06:00 now" -a "Nagios Admin" -c "Server Maintenance"

1行目:CRON設定ファイルを作成
3行目:例として、毎日4:00~6:00の間は、CPU負荷の監視は実施しない設定

◆エラー対処

cron daemonからエラーメールを受信したので対処しました。

PHP Warning:  Use of undefined constant NAGIOSCMD - assumed 'NAGIOSCMD' (this will throw an Error in a future version of PHP) in /etc/nagios/nagios_down.php on line 13
PHP Warning:  Use of undefined constant VERSION - assumed 'VERSION' (this will throw an Error in a future version of PHP) in /etc/nagios/nagios_down.php on line 18
PHP Warning:  Use of undefined constant VERDATE - assumed 'VERDATE' (this will throw an Error in a future version of PHP) in /etc/nagios/nagios_down.php on line 19
PHP Fatal error:  Uncaught Error: Call to undefined function ereg() in /etc/nagios/nagios_down.php:189
・「PHP Warning」に対する対処
# vi /etc/php.ini

;error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING

1行目:PHP設定ファイルの編集
3行目:コメントアウト
4行目:通知及び警告メッセージを出力しないように追加

・「PHP Fatal error」に対する対処
# vi /etc/nagios/nagios_down.php

#               if ( ereg("^all$", $service) )
                if ( preg_match("/^all$/", $service) )

1行目:「nagios_down.php」ファイルの編集
3行目:コメントアウト(ereg関数は、PHP5.3から非推奨となり、PHP7.0で削除されている)
4行目:「preg_match」関数に変更し追加

・「check_mem」の監視で取得する値の不具合に対する対処

Nagiosの監視Webを表示すると、「check_mem」のSWAPがTotal、Usedともに同じ値となっており、常に100%となっている不具合を対処しました。

# view /usr/lib64/nagios/plugins/check_mem

array=( $(cat /proc/meminfo | egrep 'MemTotal|MemFree|Buffers|Cached|SwapTotal|SwapFree' |awk '{print $1 " " $2}' |tr '\n' ' ' |tr -d ':' |awk '{ printf("%i %i %i %i %i %i %i", $2, $4, $6, $8, $10, $12, $14) }') )

memTotal_k=${array[0]}
memTotal_b=$(($memTotal_k*1024))
memFree_k=${array[1]}
memFree_b=$(($memFree_k*1024))
memBuffer_k=${array[2]}
memBuffer_b=$(($memBuffer_k*1024))
memCache_k=${array[3]}
memCache_b=$(($memCache_k*1024))
memTotal_m=$(($memTotal_k/1024))
memFree_m=$(($memFree_k/1024))
memBuffer_m=$(($memBuffer_k/1024))
memCache_m=$(($memCache_k/1024))
memUsed_b=$(($memTotal_b-$memFree_b-$memBuffer_b-$memCache_b))
memUsed_m=$(($memTotal_m-$memFree_m-$memBuffer_m-$memCache_m))
memUsedPrc=$((($memUsed_b*100)/$memTotal_b))

swapTotal_k=${array[5]}
swapTotal_b=$(($swapTotal_k*1024))
swapFree_k=${array[6]}
swapFree_b=$(($swapFree_k*1024))
swapUsed_k=$(($swapTotal_k-$swapFree_k))
swapUsed_b=$(($swapUsed_k*1024))
swapTotal_m=$(($swapTotal_k/1024))
swapFree_m=$(($swapFree_k/1024))
swapUsed_m=$(($swapTotal_m-$swapFree_m))

if [ $swapTotal_k -eq 0 ]; then
    swapUsedPrc=0
else
    swapUsedPrc=$((($swapUsed_k*100)/$swapTotal_k))
fi

message="[MEMORY] Total: $memTotal_m MB - Used: $memUsed_m MB - $memUsedPrc% [SWAP] Total: $swapTotal_m MB - Used: $swapUsed_m MB - $swapUsedPrc% | MTOTAL=$memTotal_b;;;; MUSED=$memUsed_b;;;; MCACHE=$memCache_b;;;; MBUFFER=$memBuffer_b;;;; STOTAL=$swapTotal_b;;;; SUSED=$swapUsed_b;;;;"

1行目:「check_mem」ファイルの確認(抜粋)
3行目:配列変数で実行するコマンドを分解して実行して確認していく

# cat /proc/meminfo | egrep 'MemTotal|MemFree|Buffers|Cached|SwapTotal|SwapFree' |awk '{print $1 " " $2}'
MemTotal: 4194304
MemFree: 226820
Cached: 2184624
Buffers: 0
SwapTotal: 8388608
SwapFree: 7476116

短く区切って順に長くしながら実行していくとこの状態が確認できる

# cat /proc/meminfo | egrep 'MemTotal|MemFree|Buffers|Cached|SwapTotal|SwapFree' |awk '{print $1 " " $2}' |tr '\n' ' ' |tr -d ':' |awk '{ printf("%i %i %i %i %i %i %i", $2, $4, $6, $8, $10, $12, $14) }'
4194304 253488 2185304 0 8388608 7476116 0

最終的に実行すると各値がスペース区切りで表示される
しかし、egrepで6項目取得しているはずが最後の7個目に謎の0が表示されている
とりあえず、影響はしないので放置する

次に「check_mem」の配列内の値を取得する部分(上記「check_mem(抜粋)」)5~29行目を確認します。

memTotal_k=${array[0]}
memTotal_b=$(($memTotal_k*1024))
memFree_k=${array[1]}
memFree_b=$(($memFree_k*1024))
memBuffer_k=${array[2]}
memBuffer_b=$(($memBuffer_k*1024))
memCache_k=${array[3]}
memCache_b=$(($memCache_k*1024))
memTotal_m=$(($memTotal_k/1024))
memFree_m=$(($memFree_k/1024))
memBuffer_m=$(($memBuffer_k/1024))
memCache_m=$(($memCache_k/1024))
memUsed_b=$(($memTotal_b-$memFree_b-$memBuffer_b-$memCache_b))
memUsed_m=$(($memTotal_m-$memFree_m-$memBuffer_m-$memCache_m))
memUsedPrc=$((($memUsed_b*100)/$memTotal_b))

swapTotal_k=${array[5]}
swapTotal_b=$(($swapTotal_k*1024))
swapFree_k=${array[6]}
swapFree_b=$(($swapFree_k*1024))
swapUsed_k=$(($swapTotal_k-$swapFree_k))
swapUsed_b=$(($swapUsed_k*1024))
swapTotal_m=$(($swapTotal_k/1024))
swapFree_m=$(($swapFree_k/1024))
swapUsed_m=$(($swapTotal_m-$swapFree_m))

ここで、「swapTotal」及び「swapFree」を取得する配列番号が、それぞれ5と6になっているが、配列番号は0から始まるため4と5がそれぞれの値となるはずである。

swapTotal_k=${array[4]}
swapTotal_b=$(($swapTotal_k*1024))
swapFree_k=${array[5]}
swapFree_b=$(($swapFree_k*1024))

1行目:「array[5]」を「array[4]」に修正
3行目:「array[6]」を「array[5]」に修正

# systemctl restart nagios

1行目: 「nagios」のサービスを再起動

しばらくして、Nagiosの監視Webを再確認すると正常に取得されているのが確認できました。

追加した監視項目もそれぞれ正常に表示されており、監視状態が整いました。
あとは、運用状態に合わせて監視する閾値をそれぞれ微調整していく必要があります。

LINEで送る
Pocket

コメントは受け付けていません。