はじめに
前回投稿から半年がたってしまいました。。。反省。
Zabbix を利用してSAPシステムの稼働監視を行う際に簡単なシェルスクリプトを作成し、 監視できるようにした話です。
本稿でのSAPは「SAP Netweaver ABAP/JAVA」を示すこととします。
概要
Zabbix は UserParameter
を利用して任意のOSコマンド、シェルスクリプト標準出力を監視できます。そこで、SAPの稼働状況を示す値を標準出力に出力するシェルスクリプトを作成し監視します。
「SAPの稼働状況」とは
本稿の中でSAPの稼働状況はsapcontrol
コマンドのGetProcessList
関数で出力されるdispstatus
のことと定義します。
以下の表はdispstatus
に出力される値とその値が示す稼働状態、スクリプトの出力値です。
dispstatus | 状態 | スクリプトの出力値 |
---|---|---|
GREEN | 稼働中 | 3 |
YELLOW | 起動中 | 2 |
RED | 障害 | 1 |
GRAY | 停止中 | 0 |
実装
前提
- Zabbix Agentはrootユーザで動作させること
- sapstartsrv プロセスは別途プロセス監視すること (sapstartsrvが停止していると
sapcontrol
コマンドで稼働状況を取得できなくなるため)
シェルスクリプトの流れ
以下の流れで処理します。
-
saphostctrl
コマンドのListInstances
関数でサーバにインストールされているSAPインスタンスのインスタンス番号を取得する。 - 取得したインスタンス番号ごとに
sapcontrol
コマンドのGetProcessList
関数でSAPインスタンスの稼働状況を取得する。 -
GREEN
>YELLOW
>RED
>GRAY
の順でもっとも下位の状態をホスト全体のSAP稼働状況として標準出力に出力する。
監視シェルスクリプトソースコード
check_sap_status.sh
#!/bin/bash
readonly SAPHOSTCTRL="/usr/sap/hostctrl/exe/saphostctrl"
readonly SAPCONTROL="/usr/sap/hostctrl/exe/sapcontrol"
readonly CNS_INITIAL=4
readonly CNS_GREEN=3
readonly CNS_YELLOW=2
readonly CNS_RED=1
readonly CNS_GRAY=0
### Functions ####
function check_status() {
local sys_status="${CNS_INITIAL}"
for nr in `"${SAPHOSTCTRL}" -function ListInstances | awk '{print $6}'`
do
sys_status="$(check_instance_status "${sys_status}" "${nr}")"
done
echo "${sys_status}"
}
function check_instance_status() {
local status="${1}"
local nr="${2}"
while read dispstatus
do
case "${dispstatus}" in
GREEN) test "${status}" -ge "${CNS_GREEN}" && status="${CNS_GREEN}"
;;
YELLOW) test "${status}" -ge "${CNS_YELLOW}" && status="${CNS_YELLOW}"
;;
RED) test "${status}" -ge "${CNS_RED}" && status="${CNS_RED}"
;;
GRAY) test "${status}" -ge "${CNS_GRAY}" && status="${CNS_GRAY}"
;;
esac
done < <("${SAPCONTROL}" -format script -nr "${nr}" -function GetProcessList | grep dispstatus|awk '{print $3}')
echo "${status}"
}
### Main Proc ####
check_status
UserParameter 設定
/etc/zabbix/zabbix_agentd.d/userparameter_sap.conf
UserParameter=sap.status[*],/etc/zabbix/plugin/sap/check_sap_status.sh
アイテム設定(Zabbix Server)
トリガー設定(Zabbix Server)
GREEN
を表す 3
以外を障害と判断するように条件式を設定