Dockerコンテナのステータスをチェックするシェルスクリプト

IT技術

はじめに

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オプションを使用する。

タイトルとURLをコピーしました