#!/bin/bash # ABOUT docker for zabbix # author mikedmorto 2021 year export LC_ALL="" export LANG="en_US.UTF-8" version="0.6" DOCKER="/usr/bin/docker" TMP="" PATCH="/tmp/zabbix.docker.tmp" JSON="" #### PARAMETRS #### METRIC="$1" ITEM="$2" ERROR=0 case "$METRIC" in discovery) JSON="{ \"data\":[" DCLIST="" # get all docker containers list of id DCLIST=`${DOCKER} ps -a | tail -n +2 | awk '{print $1}'` # show all docker id for DOCKERID in ${DCLIST}; do JSON=${JSON}" {\"{#DOCKERID}\":\"${DOCKERID}\"}," done JSON=${JSON::-1} JSON=${JSON}"]}" echo ${JSON} exit 0 ;; # get container status docker.container_running) RET=`${DOCKER} ps -a | tail -n +2 | awk -v IT="${ITEM}" ' BEGIN {count=0} {if ($1 == IT) count += 1} END {if (count == 1) print 1; else print ""} '` TMP=`${DOCKER} ps | tail -n +2` if [ "$RET" == "1" ] then RET=`echo $TMP | awk -v IT="${ITEM}" ' BEGIN {count=0} {if ($1 == IT) count += 1} END {if (count == 1) print 1; else if (count > 1) print ""; else if (count == 0) print 0} '` fi echo ${RET} exit 0 ;; #get cpu usage docker.cpu) RET=`${DOCKER} ps -a | tail -n +2 | awk -v IT="${ITEM}" ' BEGIN {count=0;} {if ($1 == IT) count += 1} END {if (count == 1) print 1; else print ""} '` TMP=`${DOCKER} stats --no-stream | tail -n +2` if [ "$RET" == "1" ] then RET=`echo $TMP | awk -v IT="${ITEM}" ' BEGIN {count=0} {if ($1 == IT) count += 1} END {if (count == 1) print 1; else if (count == 0) print 0; else print ""}'` if [ "$RET" == "1" ] then RET=`echo $TMP | awk -v IT="${ITEM}" '{if ($1 == IT) print $3}'` fi fi echo ${RET} | awk -v FS="%" '{print $1}' exit 0 ;; #get ram usage docker.ram) RET=`${DOCKER} ps -a | tail -n +2 | awk -v IT="${ITEM}" ' BEGIN {count=0;} {if ($1 == IT) count += 1} END {if (count == 1) print 1; else print ""} '` TMP=`${DOCKER} stats --no-stream | tail -n +2` if [ "$RET" == "1" ] then RET=`echo $TMP | awk -v IT="${ITEM}" ' BEGIN {count=0} {if ($1 == IT) count += 1} END {if (count == 1) print 1; else if (count == 0) print 0; else print ""}'` if [ "$RET" == "1" ] then RET=`echo $TMP | awk -v IT="${ITEM}" '{if ($1 == IT) print int($4*1048576)}'` fi fi echo ${RET} exit 0 ;; #get container name docker.name) RET=`${DOCKER} ps -a | tail -n +2 | awk -v IT="${ITEM}" ' BEGIN {count = 0} {if ($1 == IT) count += 1} END {if (count == 1) print 1; else print ""} '` if [ "$RET" == "1" ] then RET=`${DOCKER} ps -a | tail -n +2 | awk -v IT="${ITEM}" '{if ($1 == IT) print $12}'` fi echo ${RET} exit 0 ;; #get container image docker.image) RET=`${DOCKER} ps -a | tail -n +2 | awk -v IT="${ITEM}" ' BEGIN {count = 0} {if ($1 == IT) count += 1} END {if (count == 1) print 1; else print ""} '` if [ "$RET" == "1" ] then RET=`${DOCKER} ps -a | tail -n +2 | awk -v IT="${ITEM}" '{if ($1 == IT) print $2}'` fi echo ${RET} exit 0 ;; #get script version script.version) echo ${version} exit 0 ;; help) echo "please use these parametrs { discovery docker.container_running docker.cpu docker.ram docker.name docker.image script.version }" ;; *) echo "" ;; esac