Skip to content

Instantly share code, notes, and snippets.

@samsulmaarif
Last active April 23, 2019 02:53
Show Gist options
  • Save samsulmaarif/954f451983842b90fc5990246bc9d41f to your computer and use it in GitHub Desktop.
Save samsulmaarif/954f451983842b90fc5990246bc9d41f to your computer and use it in GitHub Desktop.
#!/bin/bash
CONTAINER_LIST=$(docker ps -aq)
for CONTAINER in $(echo $CONTAINER_LIST); do
if [ "x${CONTAINER}" == "x" ]; then
echo "UNKNOWN - Container ID or Friendly Name Required"
exit 3
fi
if [ "x$(which docker)" == "x" ]; then
echo "UNKNOWN - Missing docker binary"
exit 3
fi
docker info > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "UNKNOWN - Unable to talk to the docker daemon"
exit 3
fi
RUNNING=$(docker inspect --format="{{.State.Running}}" $CONTAINER 2> /dev/null)
if [ $? -eq 1 ]; then
echo "UNKNOWN - $CONTAINER does not exist."
exit 3
fi
if [ "$RUNNING" == "false" ]; then
echo "CRITICAL - $CONTAINER is not running."
exit 2
fi
DHOST=$(docker inspect --format="{{.Config.Hostname}}" $CONTAINER)
STARTED=$(docker inspect --format="{{.State.StartedAt}}" $CONTAINER)
NETWORK=$(docker inspect --format="{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" $CONTAINER)
PIPELINE1=$(docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' $CONTAINER | grep CI_PROJECT_NAME) #project name
PIPELINE2=$(docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' $CONTAINER | grep CI_COMMIT_TITLE) #commit message
PIPELINE3=$(docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' $CONTAINER | grep GITLAB_USER_LOGIN) #gitlab user login
PIPELINE4=$(docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' $CONTAINER | grep CI_JOB_URL) #job URL
PIPELINE5=$(docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' $CONTAINER | grep CI_COMMIT_SHORT_SHA) #commit revision
echo "$CONTAINER is running. IP: $NETWORK, StartedAt: $STARTED"
printf "Container name: $DHOST\nProject name: $PIPELINE1\nCommit revision: $PIPELINE5\nCommit message: $PIPELINE2\nUser: $PIPELINE3\nJob URL: $PIPELINE4\n"
echo "OK - $CONTAINER is running. IP: $NETWORK, StartedAt: $STARTED"
done
#!/bin/bash
# Author: Erik Kristensen
# Email: [email protected]
# License: MIT
# Nagios Usage: check_nrpe!check_docker_container!_container_id_
# Usage: ./check_docker_container.sh _container_id_
#
# Depending on your docker configuration, root might be required. If your nrpe user has rights
# to talk to the docker daemon, then root is not required. This is why root privileges are not
# checked.
#
# The script checks if a container is running.
# OK - running
# WARNING - restarting
# CRITICAL - stopped
# UNKNOWN - does not exist
#
# CHANGELOG - March 20, 2017
# - Removes Ghost State Check, Checks for Restarting State, Properly finds the Networking IP addresses
# - Returns unknown (exit code 3) if docker binary is missing, unable to talk to the daemon, or if container id is missing
#CONTAINER=$1
CONTAINER_LIST=$(docker ps -aq)
for CONTAINER in $(echo $CONTAINER_LIST); do
if [ "x${CONTAINER}" == "x" ]; then
echo "UNKNOWN - Container ID or Friendly Name Required"
exit 3
fi
if [ "x$(which docker)" == "x" ]; then
echo "UNKNOWN - Missing docker binary"
exit 3
fi
docker info > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "UNKNOWN - Unable to talk to the docker daemon"
exit 3
fi
RUNNING=$(docker inspect --format="{{.State.Running}}" $CONTAINER 2> /dev/null)
if [ $? -eq 1 ]; then
echo "UNKNOWN - $CONTAINER does not exist."
exit 3
fi
if [ "$RUNNING" == "false" ]; then
echo "CRITICAL - $CONTAINER is not running."
exit 2
fi
RESTARTING=$(docker inspect --format="{{.State.Restarting}}" $CONTAINER)
if [ "$RESTARTING" == "true" ]; then
echo "WARNING - $CONTAINER state is restarting."
exit 1
fi
STARTED=$(docker inspect --format="{{.State.StartedAt}}" $CONTAINER)
DHOST=$(docker inspect --format="{{.Config.Hostname}}" $CONTAINER)
NETWORK=$(docker inspect --format="{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" $CONTAINER)
PIPELINE1=$(docker inspect --format='{{ index (index .Config.Env) 38 }}' $CONTAINER) #project name
PIPELINE2=$(docker inspect --format='{{ index (index .Config.Env) 52 }}' $CONTAINER) #commit message
PIPELINE3=$(docker inspect --format='{{ index (index .Config.Env) 60 }}' $CONTAINER) #gitlab user login
PIPELINE4=$(docker inspect --format='{{ index (index .Config.Env) 7 }}' $CONTAINER) #job URL
PIPELINE5=$(docker inspect --format='{{ index (index .Config.Env) 26 }}' $CONTAINER) #commit revision
echo "$CONTAINER is running. IP: $NETWORK, StartedAt: $STARTED"
printf "Container: $DHOST\nProject name: $PIPELINE1\nCommit revision: $PIPELINE5\nCommit message: $PIPELINE2\nUser: $PIPELINE3\nJob URL: $PIPELINE4\n"
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment