Module: check_mk
Branch: master
Commit: 1c444cb6e67e03fbd2a578fcf722f308eb31c9dc
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=1c444cb6e67e03…
Author: Simon Betz <si(a)mathias-kettner.de>
Date: Wed Sep 12 10:42:25 2018 +0200
6496 FIX check_mk_agent.linux: Moved piggybacked docker container sections to plugin
'mk_docker_container_piggybacked'
Change-Id: Ic6803b9057394f0fe87019168056815bf1210a00
---
.werks/6496 | 28 +++++++++++++
agents/check_mk_agent.linux | 30 --------------
agents/plugins/mk_docker_container_piggybacked | 55 ++++++++++++++++++++++++++
3 files changed, 83 insertions(+), 30 deletions(-)
diff --git a/.werks/6496 b/.werks/6496
new file mode 100644
index 0000000..a04d5be
--- /dev/null
+++ b/.werks/6496
@@ -0,0 +1,28 @@
+Title: check_mk_agent.linux: Moved piggybacked docker container sections to plugin
'mk_docker_container_piggybacked'
+Level: 1
+Component: checks
+Class: fix
+Compatible: incomp
+Edition: cre
+State: unknown
+Version: 1.6.0i1
+Date: 1536741679
+
+In order to monitor docker containers the {{check_mk_agent}}
+collects the following information of each docker container
+as piggyback data:
+<ul>
+<li>The state, node name, labels and network information</li>
+<li>Execution of the {{check_mk_agent}} within running containers</li>
+</ul>
+
+Moreover you have to create piggybacked hosts in Check_MK for each docker
+container. The piggybacked host name is the docker container ID.
+
+Due to a long running time of these sections they are transferred to the
+plugin {{mk_docker_container_piggybacked}} which also can be executed
+asynchronously.
+
+That means that these sections were removed from the {{check_mk_agent}}
+and you have to install the plugin to the plugins folder on the client.
+
diff --git a/agents/check_mk_agent.linux b/agents/check_mk_agent.linux
index 99177ac..d25780e 100755
--- a/agents/check_mk_agent.linux
+++ b/agents/check_mk_agent.linux
@@ -1027,8 +1027,6 @@ fi
# Iterate all running containers and report piggyback data for them
if type docker > /dev/null 2>&1 && [ -z "$MK_IS_PIGGYBACKED"
]; then
- NODE_NAME=$(docker info --format "{{json .Name}}")
-
echo "<<<docker_node_info>>>"
docker info --format "{{json .}}" 2>&1
@@ -1049,34 +1047,6 @@ if type docker > /dev/null 2>&1 && [ -z
"$MK_IS_PIGGYBACKED" ]; then
echo "<<<docker_node_network:sep(0)>>>"
NETWORK_IDS=$(docker network ls -f 'driver=bridge'
--format='{{.ID}}')
docker network inspect "$NETWORK_IDS"
-
- # 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}}'
- echo "<<<<>>>>"
- done
-
- for CONTAINER_ID in $(docker container ls -q); do
- echo "<<<<$CONTAINER_ID>>>>"
-
- # 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)
- if [ -n "$AGENT_PATH" ]; then
- docker container exec --env MK_IS_PIGGYBACKED=1 --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_IS_PIGGYBACKED=1 --env MK_FROM_NODE=1 --env
"REMOTE=$REMOTE" -i "$CONTAINER_ID" bash < "$0"
- fi
-
- echo "<<<<>>>>"
- done
fi
# Start new liveupdate process in background on each agent execution. Starting
diff --git a/agents/plugins/mk_docker_container_piggybacked
b/agents/plugins/mk_docker_container_piggybacked
new file mode 100755
index 0000000..5d8ca3e
--- /dev/null
+++ b/agents/plugins/mk_docker_container_piggybacked
@@ -0,0 +1,55 @@
+#!/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)
+ 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