====== docker-swarm.sh - Docker ====== ^ Author | [[ webmaster@ufud.org | Niels Haedecke ]] | ^ Compatibility | Xymon 4.3 | ^ Requirements | Bash, Docker >= 1.12 | ^ Download | https://github.com/ufud-org/docker-swarm.sh | ^ Last Update | 2017-05-30 | ===== Description ===== This Xymon script provides a status monitor for your docker containers running in docker swarm mode (requires docker >= 1.12). It requires that a xymon client is installed on your docker swarm manager node. ===== Installation ===== === Client side === 1.) copy docker-swarm.sh to the xymon client 'ext' directory on your docker swarm manager node (e.g. /usr/lib/xymon/client/ext on Debian based Linux distributions). 2.) copy docker-swarm.cfg to the xymon client 'etc' directoy on your docker swarm manager node (e.g. /usr/lib/xymon/client/etc on Debian based Linux distributions). 3.) after copying, edit docker-swarm.cfg to your needs by adding/modifying the service names you want the script to check on the cluster, one service name per line. As an example, preconfigured docker-swarm.cfg already contains some service names (mariadb, git, etc.). 4.) add the following lines to your clientlaunch.cfg on your docker swarm manager node (on Debian based distributions you can find it at /usr/lib/xymon/client/etc/clientlaunch.cfg): [swarm] ENVFILE $XYMONCLIENTHOME/etc/xymonclient.cfg CMD $XYMONCLIENTHOME/ext/docker-swarm.sh LOGFILE $XYMONCLIENTHOME/logs/hobbitclient.log INTERVAL 1m 5.) add the xymon user to the docker group (example for Debian based distributions): usermod -aG docker xymon 6.) restart the xymon client on your swarm manager node. === Server side === Nothing ===== Source ===== ==== docker-swarm.sh ==== #!/bin/bash # docker-swarm.sh # Xymon add on check for monitoring docker containers in swarm mode. # (c) 2017 by N. Haedecke (webmaster -at- ufud -dot- org) AUTHOR="N. Haedecke" VERSION="

`basename $0`, $AUTHOR
" # Script internal variables. Change only if needed. LOGFILE="${BBTMP}/docker-swarm.log" TMPFILE="${BBTMP}/docker-swarm.tmp" MSGFILE="${BBTMP}/docker-swarm.msg" CFGFILE="${XYMONCLIENTHOME}/etc/docker-swarm.cfg" # status constants GREEN='green' YELLOW='yellow' RED='red' TEST='swarm' STATUS='green' if [ -f "$TMPFILE" ]; then rm $TMPFILE fi if [ -f "$MSGFILE" ]; then rm $MSGFILE fi echo $VERSION >> "$MSGFILE" search_max=$search_index search_index=0 result_index=0 for i in $(cat "$CFGFILE") do docker stack ps $i --no-trunc --format "{{.Name}} {{.Node}} {{.CurrentState}} {{.Error}}" >> $TMPFILE LINE=$(grep "$i" "$TMPFILE") ! echo "$LINE" | grep "Nothing found in stack" MYRESULTSTAT[$result_index]=$? MYRESULTARRA[$result_index]=$LINE MYRESULTSRVC[$result_index]=$i MYRESULTCNTR[$result_index]=$(grep "$i" "$TMPFILE" | wc -l ) result_index=$((result_index+1)) done result_max=$result_index printf 'Docker swarm services:\n\n' >> "$MSGFILE" for y in $(seq 0 $((result_max-1)) ) do if [ "${MYRESULTSTAT[y]}" -eq 1 ] then printf '&red service failed: %-20s\n\n' "${MYRESULTSRVC[y]}" >> "$MSGFILE" STATUS=red else printf '&green %-s (%-s)\n' "${MYRESULTSRVC[y]}" "${MYRESULTCNTR[y]}" >> "$MSGFILE" printf '%-s\n\n' "${MYRESULTARRA[y]}" >> "$MSGFILE" fi done # Send status message "$BB" "$BBDISP" "status "$MACHINE"."$TEST" "$STATUS" $("$DATE") $("$CAT" $(echo "$MSGFILE"))"
==== docker-swarm.cfg ==== mariadb openldap nextcloud git ===== Known Bugs and Issues ===== ===== To Do ===== ===== Credits ===== ===== Changelog ===== * **2017-05-30** * Initial release