From 7c738eb9b49f061ab3d250de2d2bc8f7c0bbd1ed Mon Sep 17 00:00:00 2001 From: charlyF Date: Thu, 8 Feb 2018 18:48:13 -0500 Subject: [PATCH 1/2] add option to ignore docker cloud containers --- docker_daemon/CHANGELOG.md | 7 +++++++ docker_daemon/conf.yaml.example | 5 ++++- docker_daemon/datadog_checks/docker_daemon/__init__.py | 2 +- .../datadog_checks/docker_daemon/docker_daemon.py | 10 +++++----- docker_daemon/manifest.json | 2 +- 5 files changed, 18 insertions(+), 8 deletions(-) diff --git a/docker_daemon/CHANGELOG.md b/docker_daemon/CHANGELOG.md index 74311798e9eaf..71b08bfb5428f 100644 --- a/docker_daemon/CHANGELOG.md +++ b/docker_daemon/CHANGELOG.md @@ -1,5 +1,12 @@ # CHANGELOG - docker_daemon +1.9.0 / Unreleased +================== +### Changes + +* [IMPROVEMENT] Add the `ignore_docker_cloud_containers` option to ignore Docker Cloud agent's containers. +* [BUGFIX] Ignore the excluded containers in the containers.{running|stopped} metrics. + 1.8.0 / Unreleased ================== ### Changes diff --git a/docker_daemon/conf.yaml.example b/docker_daemon/conf.yaml.example index 02b6de3e9d068..799912ad07285 100644 --- a/docker_daemon/conf.yaml.example +++ b/docker_daemon/conf.yaml.example @@ -149,7 +149,10 @@ instances: # To customize this default behavior, override exclude. # If you do so, default exclusion patterns won't apply anymore and will need to be added explicitly. - + # Use `ignore_docker_cloud_containers` if you are running the agent in Docker Cloud + # and you want the Docker check to ignore the containers used for the Docker cloud agent. + # The agent will ignore the docker images starting with `dockercloud/*` (i.e.: dockercloud/network-daemon). + # ignore_docker_cloud_containers: true ## Tagging ## diff --git a/docker_daemon/datadog_checks/docker_daemon/__init__.py b/docker_daemon/datadog_checks/docker_daemon/__init__.py index ccd3c4f9a52be..0a66889b05cbe 100644 --- a/docker_daemon/datadog_checks/docker_daemon/__init__.py +++ b/docker_daemon/datadog_checks/docker_daemon/__init__.py @@ -2,6 +2,6 @@ DockerDaemon = docker_daemon.DockerDaemon -__version__ = "1.8.0" +__version__ = "1.9.0" __all__ = ['docker_daemon'] diff --git a/docker_daemon/datadog_checks/docker_daemon/docker_daemon.py b/docker_daemon/datadog_checks/docker_daemon/docker_daemon.py index 675644060a90b..86464b620498c 100644 --- a/docker_daemon/datadog_checks/docker_daemon/docker_daemon.py +++ b/docker_daemon/datadog_checks/docker_daemon/docker_daemon.py @@ -394,17 +394,17 @@ def _get_and_count_containers(self, custom_cgroups=False, healthchecks=False): for container in containers: container_name = DockerUtil.container_name_extractor(container)[0] + # Check if the container is included/excluded via its tags + if self._is_container_excluded(container): + self.log.debug("Container {0} is excluded".format(container_name)) + continue + container_status_tags = self._get_tags(container, CONTAINER) all_containers_count[tuple(sorted(container_status_tags))] += 1 if self._is_container_running(container): running_containers_count[tuple(sorted(container_status_tags))] += 1 - # Check if the container is included/excluded via its tags - if self._is_container_excluded(container): - self.log.debug("Container {0} is excluded".format(container_name)) - continue - containers_by_id[container['Id']] = container # grab pid via API if custom cgroups - otherwise we won't find process when diff --git a/docker_daemon/manifest.json b/docker_daemon/manifest.json index 1d8554834afe9..bd489799825ad 100644 --- a/docker_daemon/manifest.json +++ b/docker_daemon/manifest.json @@ -11,7 +11,7 @@ "linux", "mac_os" ], - "version": "1.8.0", + "version": "1.9.0", "public_title": "Datadog-Docker Integration", "categories":["containers"], "type":"check", From 5c3e1c679171ce4545705acb6cfa6cdb48ff175d Mon Sep 17 00:00:00 2001 From: charlyF Date: Thu, 8 Feb 2018 19:53:34 -0500 Subject: [PATCH 2/2] updating tests --- docker_daemon/test/test_docker_daemon.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/docker_daemon/test/test_docker_daemon.py b/docker_daemon/test/test_docker_daemon.py index ed283dd6b3fa3..a0bee49025b50 100644 --- a/docker_daemon/test/test_docker_daemon.py +++ b/docker_daemon/test/test_docker_daemon.py @@ -373,18 +373,14 @@ def test_basic_config_twice(self): def test_exclude_filter(self): expected_metrics = [ - ('docker.containers.running', ['docker_image:nginx:latest', 'image_name:nginx', 'image_tag:latest', 'short_image:nginx:latest']), ('docker.containers.running', ['docker_image:redis:latest', 'image_name:redis', 'image_tag:latest', 'short_image:redis:latest']), - ('docker.containers.stopped', ['docker_image:nginx:latest', 'image_name:nginx', 'image_tag:latest', 'short_image:nginx:latest']), ('docker.containers.stopped', ['docker_image:redis:latest', 'image_name:redis', 'image_tag:latest', 'short_image:redis:latest']), ('docker.containers.running.total', None), ('docker.containers.stopped.total', None), ('docker.cpu.system', ['container_name:test-new-redis-latest', 'docker_image:redis:latest', 'image_name:redis', 'image_tag:latest']), ('docker.cpu.user', ['container_name:test-new-redis-latest', 'docker_image:redis:latest', 'image_name:redis', 'image_tag:latest']), ('docker.image.size', ['image_name:redis', 'image_tag:latest']), - ('docker.image.size', ['image_name:nginx', 'image_tag:latest']), ('docker.image.virtual_size', ['image_name:redis', 'image_tag:latest']), - ('docker.image.virtual_size', ['image_name:nginx', 'image_tag:latest']), ('docker.images.available', None), ('docker.images.intermediate', None), ('docker.io.read_bytes', ['container_name:test-new-redis-latest', 'docker_image:redis:latest', 'image_name:redis', 'image_tag:latest']), @@ -430,17 +426,13 @@ def test_exclude_filter(self): def test_include_filter(self): expected_metrics = [ - ('docker.containers.running', ['docker_image:nginx:latest', 'image_name:nginx', 'image_tag:latest', 'short_image:nginx:latest']), ('docker.containers.running', ['docker_image:redis:latest', 'image_name:redis', 'image_tag:latest', 'short_image:redis:latest']), - ('docker.containers.stopped', ['docker_image:nginx:latest', 'image_name:nginx', 'image_tag:latest', 'short_image:nginx:latest']), ('docker.containers.stopped', ['docker_image:redis:latest', 'image_name:redis', 'image_tag:latest', 'short_image:redis:latest']), ('docker.containers.running.total', None), ('docker.containers.stopped.total', None), ('docker.cpu.system', ['container_name:test-new-redis-latest', 'docker_image:redis:latest', 'image_name:redis', 'image_tag:latest']), ('docker.cpu.user', ['container_name:test-new-redis-latest', 'docker_image:redis:latest', 'image_name:redis', 'image_tag:latest']), ('docker.image.size', ['image_name:redis', 'image_tag:latest']), - ('docker.image.size', ['image_name:nginx', 'image_tag:latest']), - ('docker.image.virtual_size', ['image_name:nginx', 'image_tag:latest']), ('docker.image.virtual_size', ['image_name:redis', 'image_tag:latest']), ('docker.images.available', None), ('docker.images.intermediate', None),