Module: check_mk
Branch: master
Commit: 2d43d696de115e458d82a39d20403d884cef8f47
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=2d43d696de115e…
Author: Moritz Kiemer <mo(a)mathias-kettner.de>
Date: Fri Feb 8 13:29:03 2019 +0100
7143 mk_docker.py: A new docker monitoring plugin
We introduce a new plugin for docker monitoring, 'mk_docker.py'.
It combines the functionality of the two deprecated plugins
'mk_docker_node' and 'mk_docker_container_piggybacked', while
adding more configuration options.
If you where using both plugins, you can use the new plugin in its
default configuration to replace them. If you have been using only
one of them, you can disable the opposite parts of the new plugin,
either by using the bakery rule "Docker node and containers" or via
the configuration file (please refer to the example files in
agents/cfg_examples fo rmore details).
The previous rule "Piggybacked docker containers" is deprecated -
please set up a corresponding new one.
To deploy this plugin you must at least have the 'docker-py' python
library version 3.0.0 installed on the monitored system.
You can install it using the python package manager pip
(using the shell command "pip install docker-py").
CMK-1564
Change-Id: Ic8a619f7cf784ee3ebf9cde52c5d6ff865ad3e0e
---
.werks/7143 | 29 ++++++++++++++
agents/plugins/mk_docker_container_piggybacked | 55 --------------------------
agents/plugins/mk_docker_node | 49 -----------------------
checks/docker_container_status | 1 +
checks/docker_node_disk_usage | 1 +
checks/docker_node_info | 2 +
6 files changed, 33 insertions(+), 104 deletions(-)
diff --git a/.werks/7143 b/.werks/7143
new file mode 100644
index 0000000..91b885f
--- /dev/null
+++ b/.werks/7143
@@ -0,0 +1,29 @@
+Title: mk_docker.py: A new docker monitoring plugin
+Level: 1
+Component: checks
+Compatible: incomp
+Edition: cre
+Version: 1.6.0i1
+Date: 1550048642
+Class: feature
+
+We introduce a new plugin for docker monitoring, 'mk_docker.py'.
+It combines the functionality of the two deprecated plugins
+'mk_docker_node' and 'mk_docker_container_piggybacked', while
+adding more configuration options.
+
+If you where using both plugins, you can use the new plugin in its
+default configuration to replace them. If you have been using only
+one of them, you can disable the opposite parts of the new plugin,
+either by using the bakery rule "Docker node and containers" or via
+the configuration file (please refer to the example files in
+agents/cfg_examples fo rmore details).
+
+The previous rule "Piggybacked docker containers" is deprecated -
+please set up a corresponding new one.
+
+To deploy this plugin you must have the 'docker-py' python library
+installed on the monitored system. You can install it using the
+python package manager pip (using the shell command
+"pip install docker-py").
+
diff --git a/agents/plugins/mk_docker_container_piggybacked
b/agents/plugins/mk_docker_container_piggybacked
deleted file mode 100755
index 36cf98c..0000000
--- a/agents/plugins/mk_docker_container_piggybacked
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/bin/bash
-# +------------------------------------------------------------------+
-# | ____ _ _ __ __ _ __ |
-# | / ___| |__ ___ ___| | __ | \/ | |/ / |
-# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
-# | | |___| | | | __/ (__| < | | | | . \ |
-# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
-# | |
-# | Copyright Mathias Kettner 2018 mk(a)mathias-kettner.de |
-# +------------------------------------------------------------------+
-#
-# This file is part of Check_MK.
-# The official homepage is at
http://mathias-kettner.de/check_mk.
-#
-# check_mk is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation in version 2. check_mk is distributed
-# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with-
-# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE. See the GNU General Public License for more de-
-# tails. You should have received a copy of the GNU General Public
-# License along with GNU Make; see the file COPYING. If not, write
-# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
-# Boston, MA 02110-1301 USA.
-
-# $REMOTE is exported from check_mk_agent.linux
-
-if type docker > /dev/null 2>&1; then
- NODE_NAME=$(docker info --format "{{json .Name}}")
-
- # For the container status, we want information about *all* containers
- for CONTAINER_ID in $(docker container ls -q --all); do
- echo "<<<<${CONTAINER_ID}>>>>"
- docker inspect "$CONTAINER_ID" \
- --format='{{println
"<<<docker_container_status>>>"}}{{json
.State}}{{println}}{{println
"<<<docker_container_node_name>>>"}}{{println
'"$NODE_NAME"'}}{{println
"<<<docker_container_labels>>>"}}{{json
.Config.Labels}}{{println}}{{println
"<<<docker_container_network>>>"}}{{json
.NetworkSettings}}{{println}}'
-
- if [ "$(docker inspect -f '{{.State.Running}}'
"$CONTAINER_ID")" = "true" ]; then
- # Is there a regular agent available in the container? Use it!
- #
- # Otherwise execute the agent of the node in the context of the container.
- # Using this approach we should always get at least basic information from
- # the container.
- # Once it comes to plugins and custom configuration the user needs to use
- # a little more complex setup. Have a look at the documentation.
- AGENT_PATH=$(docker container exec "$CONTAINER_ID" bash -c
"type check_mk_agent" 2>/dev/null) || AGENT_PATH=
- if [ -n "$AGENT_PATH" ]; then
- docker container exec --env "REMOTE=$REMOTE"
"$CONTAINER_ID" check_mk_agent
- elif docker container exec "$CONTAINER_ID" which bash >/dev/null
2>&1; then
- docker container exec --env MK_FROM_NODE=1 --env
"REMOTE=$REMOTE" -i "$CONTAINER_ID" bash < "$0"
- fi
- fi
-
- echo "<<<<>>>>"
- done
-fi
diff --git a/agents/plugins/mk_docker_node b/agents/plugins/mk_docker_node
deleted file mode 100755
index 7bc1080..0000000
--- a/agents/plugins/mk_docker_node
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/bin/bash
-# +------------------------------------------------------------------+
-# | ____ _ _ __ __ _ __ |
-# | / ___| |__ ___ ___| | __ | \/ | |/ / |
-# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
-# | | |___| | | | __/ (__| < | | | | . \ |
-# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
-# | |
-# | Copyright Mathias Kettner 2016 mk(a)mathias-kettner.de |
-# +------------------------------------------------------------------+
-#
-# This file is part of Check_MK.
-# The official homepage is at
http://mathias-kettner.de/check_mk.
-#
-# check_mk is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation in version 2. check_mk is distributed
-# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with-
-# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE. See the GNU General Public License for more de-
-# tails. You should have received a copy of the GNU General Public
-# License along with GNU Make; see the file COPYING. If not, write
-# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
-# Boston, MA 02110-1301 USA.
-
-if type docker > /dev/null 2>&1; then
- echo "<<<docker_node_info:sep(58)>>>"
- # sed: protect leading whitespace
- docker info | sed 's/^/|/'
-
- echo "<<<docker_node_disk_usage:sep(0)>>>"
- docker system df
-
- echo "<<<docker_node_images>>>"
- echo "[[[images]]]"
- docker images --format "{{json .}}"
-
- echo "[[[image_inspect]]]"
- IMAGE_IDS=$(docker images | awk 'NR>1 {print $3}')
- docker image inspect $IMAGE_IDS
-
- echo "[[[containers]]]"
- # equivalent of 'docker ps' for newer docker versions: 'docker container
ls'
- docker ps --all --format "{{json .}}"
-
- echo "<<<docker_node_network:sep(0)>>>"
- NETWORK_IDS=$(docker network ls -f 'driver=bridge' | awk 'NR>1 {print
$1}')
- docker network inspect $NETWORK_IDS
-fi
diff --git a/checks/docker_container_status b/checks/docker_container_status
index 9920e05..69649fa 100644
--- a/checks/docker_container_status
+++ b/checks/docker_container_status
@@ -95,6 +95,7 @@ check_info["docker_container_status.health"] = {
# '----------------------------------------------------------------------'
+@append_deprecation_warning # pylint: disable=undefined-variable
def check_docker_container_status(_no_item, _no_params, parsed):
status = parsed.get("Status", "unknown")
state = {"running": 0, "unknown": 3}.get(status, 2)
diff --git a/checks/docker_node_disk_usage b/checks/docker_node_disk_usage
index 21e770b..d5355e2 100644
--- a/checks/docker_node_disk_usage
+++ b/checks/docker_node_disk_usage
@@ -35,6 +35,7 @@ def parse_docker_node_disk_usage(info):
return {r.get('type'): r for r in table_rows if r is not None}
+@append_deprecation_warning # pylint: disable=undefined-variable
@get_parsed_item_data
def check_docker_node_disk_usage(_no_item, params, data):
diff --git a/checks/docker_node_info b/checks/docker_node_info
index ce80041..3d193d1 100644
--- a/checks/docker_node_info
+++ b/checks/docker_node_info
@@ -38,6 +38,7 @@ def parse_docker_node_info(info):
return loaded or {}
+@append_deprecation_warning # pylint: disable=undefined-variable
def check_docker_node_info(_no_item, _no_params, parsed):
if "Name" in parsed:
yield 0, 'Daemon running on host %s' % parsed["Name"]
@@ -56,6 +57,7 @@ check_info['docker_node_info'] = {
}
+@append_deprecation_warning # pylint: disable=undefined-variable
def check_docker_node_containers(_no_item, params, parsed):
def check_node_levels(count, levels, levels_lower):
warn, crit = levels