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」で確認することができます。
◆監視項目設定
・メモリ使用状況
1 2 3 | # 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行目:実行権限を付与
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # 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」プラグインのヘルプ参照
1 2 3 4 5 6 7 8 9 | # 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行目:実行するコマンドライン
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # 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も確認できるためコメントアウト
・ログインユーザ数
1 2 3 4 5 6 7 8 9 | # 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誤差状況
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | # ./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」プラグインのヘルプ参照
1 2 3 4 5 6 7 8 9 | # 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のチェックを実行するコマンドライン
1 2 3 4 5 6 7 8 9 | # 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | # ./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」プラグインのヘルプ参照
1 2 3 4 5 6 7 8 9 | # 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と接続テストを実行するコマンドライン
1 2 3 4 5 6 7 8 9 | # 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | # ./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」プラグインのヘルプ参照
1 2 3 4 5 6 7 8 9 | # 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サーバと接続テストを実行するコマンドライン
1 2 3 4 5 6 7 8 9 | # 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行目:ホストの指定は必須ではなく、デフォルトでローカル・データベースに接続するた め、ユーザ名とパスワードのみ設定
・ ネットワーク使用状況
1 2 3 | # 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行目:実行権限を付与
1 2 | # ./check_traffic_pnp4nagios.sh -h Useage: check_traffic -i Interface -w warn -c cirt |
1行目:「check_traffic_pnp4nagios.sh」プラグインのヘルプ参照
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # 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コマンド実行時の出力フォーマットに合わせた変更
1 2 3 4 5 6 7 8 9 | # 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の送受信状態を確認するコマンドライン
1 2 3 4 5 6 7 8 9 | # 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以上で異常に設定
1 | # systemctl restart nagios |
1行目:「nagios」のサービスを再起動
◆Downtime Scheduling Utility設定
サーバ運用時、閑散時間にバックアップやウィルスチェックの定時実行を設定しています。
その時間帯においては処理によってサーバが一時的に高負荷となってしまうため、Nagiosが警告・異常を検知する場合があります。
日々、定時で実行される場合は、毎回同じ時間にNagiosの警告・異常を受信するのは煩わしくなってしまうので、Downtime Scheduling Utilityを導入し、CRON設定して自動化する。
・ダウンロード
Nagios Exchangeからnagios_downをダウンロードし、サーバへWinSCPなどでアップロードします。
・ファイルの展開
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 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で圧縮していたファイルのようです。
・ファイルの編集
1 2 3 4 5 6 7 8 | # 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」が格納されるディレクトリを作成
1 2 3 | # 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からエラーメールを受信したので対処しました。
1 2 3 4 | 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」に対する対処
1 2 3 4 | # 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」に対する対処
1 2 3 4 | # 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%となっている不具合を対処しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | # 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行目:配列変数で実行するコマンドを分解して実行して確認していく
1 2 3 4 5 6 7 | # 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 |
短く区切って順に長くしながら実行していくとこの状態が確認できる
1 2 | # 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行目を確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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がそれぞれの値となるはずである。
1 2 3 4 | 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]」に修正
1 | # systemctl restart nagios |
1行目: 「nagios」のサービスを再起動
しばらくして、Nagiosの監視Webを再確認すると正常に取得されているのが確認できました。
追加した監視項目もそれぞれ正常に表示されており、監視状態が整いました。
あとは、運用状態に合わせて監視する閾値をそれぞれ微調整していく必要があります。