はじめに
Dockerコンテナの生死監視を行いたいと思い、「docker ps」コマンドで出力されるステータスをチェックするシェルスクリプトを作成した。
作成したシェルスクリプト
#!/usr/bin/env bash
####################
#
# Docker Container Status Check
#
####################
########## Set Environment
#
JOB_NAME=`basename $0 .sh`
#
##########
########## Check User
#
EXEC_USER="root"
if [[ "${USER}" != "${EXEC_USER}" ]]
then
echo "[ERROR] [${JOB_NAME}] You must chenge user ${EXEC_USER} !!"
exit 99
fi
#
##########
########## Main
#
logger "[${JOB_NAME}] [INFO] shell start."
for CONTAINER in `docker ps -a --format "{{.Names}}" | sort`
do
docker ps -a --filter name=${CONTAINER} | grep Up
RC=`echo $?`
if [[ "${RC}" -eq 0 ]]
then
logger "[${JOB_NAME}] [INFO] ${CONTAINER} status OK."
else
logger "[${JOB_NAME}] [ERROR] ${CONTAINER} status NG!"
fi
sleep 1
done
logger "[${JOB_NAME}] [INFO] shell end."
#
##########
実行例
Dockerコンテナの状態はこのようになっている。
[root]# docker ps -a | grep test
f8d3248146c5 test-webapp:vrfy "docker-php-entrypoi…" About an hour ago Exited (0) 41 minutes ago test_webapp_1
3ffd4cf895b3 test-mysqldb:vrfy "docker-entrypoint.s…" About an hour ago Up About an hour 3306/tcp, 33060/tcp test_mysqldb_1
[root]#
- test_webapp_1:終了状態(Exited)
- test_mysqldb_1:正常起動 (Up)
シェルスクリプトを実行すると、 syslogに以下のようなメッセージが出力される。
[root]# grep test /var/log/messages
Aug 14 09:27:25 testserver opc: [docker_status_check] [INFO] test_mysqldb_1 status OK.
Aug 14 09:27:26 testserver opc: [docker_status_check] [ERROR] test_webapp_1 status NG!
[root]#
あとはcronなどでシェルスクリプトを定期実行させ、Zabbixなどの監視ツールで”ERROR”キーワードを監視設定すれば良い。
より詳細な監視が必要であれば、Docker HEALTHCHECKオプションを使用する。