CHECK_DOCKER_IO

Script: check_docker_io

check_docker_stats shows the docker net io total and for each container. This check sends performance data.

The first implemented measurement is the network io.

This check starts the docker CLI and might be slow (a few seconds).

Requirements

  • docker Docker must be installed
  • jq must be installed - commandline JSON processor
  • bc must be installed - an arbitrary precision calculator language
  • sudo permissions on docker command
icingaclient ALL=(ALL) NOPASSWD:SETENV: /usr/bin/docker

Standalone installation

From this repository you need next to this script:

  • inc_pluginfunctions shared function for all IML checks written in bash
  • inc_dockerfunctions.sh

Rootless docker

It works with docker setups as root and can handle rootless docker instances.

To bring it up and running with an unpriviledged icinga user it must be able to access docker. Copy the docker binary eg. from /home/dockeruser/bin/docker to /usr/bin/. Then use the parameter -p /usr/bin.

If DOCKER_HOST is not set then the docker socket is detected from a running docker instance and will be fetched from the process list.

Syntax

______________________________________________________________________

CHECK_DOCKER_IO
v0.2

(c) Institute for Medical Education - University of Bern
Licence: GNU GPL 3

https://os-docs.iml.unibe.ch/icinga-checks/Checks/check_docker_io.html
______________________________________________________________________

Show IO data of all docker containers

USAGE:
  check_docker_io [OPTIONS]

OPTIONS:

  General:
  -h, --help        this help

  Connect to docker:
  -p, --path        Custom directory for docker binary
  -t, --target      Custom docker target; value for DOCKER_HOST
                    Needed only if Docker does not run on a unix socket or
                    multiple users run a rootless docker daemon.

  mode:
  -m, --mode MODE   Mode what kind of information to show.
                    The output of container list is sorted by the maximum 
                    value first.

                      netio     sum of netio of all containers IN and OUT

EXAMPLES:
  check_docker_io -m netio
    Show netio of all docker containers

Parameters

None.

Examples

Network io

$ ./check_docker_io -m netio

OK: Docker Network I/O of all containers: 0.00 MB/s IN .. 0.00 MB/s OUT
portainer_agent.1cnjqw9p0nlmpaij393abu0ng.rwy5mv629o0yxonz5f6krasz5    5670551      36804         392 B/s           2 B/s
morpheus-live_morpheus-live.2.w1umgrc21kvinl6h2x2cqdkze   55671295      13944           0 B/s           0 B/s
morpheus-live_morpheus-live.1.10npyt2qnb1kzvta851i9mtvd   54929047      12883           0 B/s           0 B/s
morpheus-demo_morpheus-demo.1.nsf410w59q9g1an7iyf0j12lr     161951       1620           0 B/s           0 B/s
swarm_proxy_reverse-proxy.1.hw7snlg5i0sudyh58ydf02rtc  498606567    4208586         455 B/s           5 B/s
swarm_proxy_memcached.1.c8gimogel0k9iffffiyw3k9l4   11679831     167671          16 B/s           0 B/s
whoami_whoami.1.mguqldgk3pxuqsuw1ir0d5xjz     155845       2027           0 B/s           0 B/s
portainer_monitoring_se_node-exporter.1cnjqw9p0nlmpaij393abu0ng.ncfvhpy81tq5pp9i9o6qzs2ih   32668084     301076          34 B/s           0 B/s
portainer_monitoring_se_cadvisor.1cnjqw9p0nlmpaij393abu0ng.lr7xkpgdu43lkihcr0agj0vh6   88027743    1139668          93 B/s           1 B/s
 |rx=990;; tx=10;; 

Troubleshooting

Missing environment

sudo: sorry, you are not allowed to preserve the environment
UNKNOWN: No data. Unable to fetch Docker information.

Solution: you did not set SETENV in the sudoers config file

icingaclient ALL=(ALL) NOPASSWD:SETENV: /usr/bin/docker

Docker not found

If you get an error message that docker was not found then it is not reachable in ofe of the directories of $PATH. This can happen especialy in rootless docker instances.

Solution: Use the parameter -p /usr/bin to define a target. Copy the docker binary there.