LoginSignup
3
7

More than 1 year has passed since last update.

【Zabbix】jstatでjavaヒープ領域(heap memory)を監視することになった

Last updated at Posted at 2019-06-19

◆やったこと
・監視対象サーバにて、jstatを用いてgcログを元に、Old領域の使用率を出力するスクリプトを作成
・スクリプトをcron設定で1分間隔で起動させる
・Old領域の使用率が90%を超えると、Zabbixのログ監視で検知する

◆条件
・監視対象サーバで下記が使えること
 ・Zabbix Agent
  ※監視対象サーバと監視サーバ間でZabbix Agentの通信が使えること
 ・jstatコマンド
 ・bcコマンド

◆環境
・OSはCentOS7、JavaはOpenJDK8(1.8)、監視サーバはZabbix3.0を利用。

◆作業
[監視対象サーバ]
必要なパッケージをインストールする。bcパッケージはヒープ領域の閾値計算にスクリプト内で利用。


# yum install bc
# yum install java-1.8.0-openjdk-devel

gcログのモニター用スクリプトを設置。

gc_monitor.sh
#!/bin/sh
##

############################################
# 変数
############################################
PID=`/bin/jps |grep Bootstrap |awk '{print $1}'`
#GCログ出力先
LOGFILE=/var/log/tool/jstat_gcutil.log
#Zabbix監視用のログ出力先
CHECK_LOGFILE=/var/log/tool/jstat_check.log
OUR=`tail -1 ${LOGFILE}|awk '{print $5}'`
TV_1=80 #NOTICEレベルの閾値(%)
TV_2=90 #WARNINGレベルの閾値(%)

############################################
# 処理
############################################

##調査用ログ出力
echo -e "`date` ¥¥n `jstat -gcutil -t ${PID}`" >> ${LOGFILE}

##Old領域使用率チェック
OU_CHECK=$?

        if [[ ${OU_CHECK} = 0 ]] && [[ "$(echo "${OUR}< ${TV_1}" |/bin/bc )" -eq 1 ]] ;then

                  echo "`date +%Y%m%d_%H:%M:%S` Java HeapMemory(Old Area) Check OK" >> ${CHECK_LOGFILE}

        elif [[ ${OU_CHECK} = 0 ]] && [[ "$(echo "${OUR}> ${TV_1}" |/bin/bc )" -eq 1 ]] && [[ "$(echo "${OUR}< ${TV_2}" |/bin/bc )" -eq 1 ]] ;then

                  echo "`date +%Y%m%d_%H:%M:%S` Java HeapMemory(Old Area) over ${TV_1}% NOTICE" >> ${CHECK_LOGFILE}

        elif [[ ${OU_CHECK} = 0 ]] &&  [[ "$(echo "${OUR}> ${TV_2}" |/bin/bc )" -eq 1 ]] ;then

                  echo "`date +%Y%m%d_%H:%M:%S` Java HeapMemory(Old Area) over ${TV_2}% WARNING" >> ${CHECK_LOGFILE}

        else
                  echo "`date +%Y%m%d_%H:%M:%S` Java HeapMemory(Old Area) Check Failed" >> ${CHECK_LOGFILE}

         fi
exit

[監視サーバ]
Zabbix3.0にアイテム設定とトリガー設定を入れる。

アイテム設定
zabbix-1

トリガー設定 ※条件式の抜粋
下記の通り、正規表現で"WARNING"の文言があるとステータス=1となる。
あとは、アラート通知設定を入れればメールなどで通知可能。アラート通知設定は割愛。

トリガー設定
{ホスト名:log[/var/log/tools/jstat_check.log,,,,skip,].regexp(WARNING)}=1

以上となります。

3
7
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
7