Rework getting limits and requests for containers

It is not unusual to have containers that do not have limits and
requests set so we should treat that more graceful and not throw
exceptions in that case

Change-Id: I2a88395f82cabe3f84e22c67ef795b4389e2e7bf
This commit is contained in:
mhoppal 2018-01-02 14:18:35 -07:00 committed by Michael Hoppal
parent 47bade9e09
commit a987567fe3
1 changed files with 21 additions and 9 deletions

View File

@ -1,4 +1,4 @@
# (C) Copyright 2017 Hewlett Packard Enterprise Development LP
# (C) Copyright 2017,2018 Hewlett Packard Enterprise Development LP
import logging
import requests
@ -214,13 +214,21 @@ class Kubernetes(checks.AgentCheck):
for container in pod_containers:
container_name = container['name']
container_dimensions = container_dimension_map[name2id[container_name]]
try:
container_limits = container['resources']['limits']
if 'resources' not in container:
self.log.debug("Container {} does not have limits or requests set")
continue
container_resources = container['resources']
if 'limits' not in container_resources:
self.log.debug("Container {} does not have limits set", container_name)
else:
container_limits = container_resources['limits']
if 'cpu' in container_limits:
cpu_limit = container_limits['cpu']
cpu_value = self._convert_cpu_to_cores(cpu_limit)
if self.report_container_metrics:
self.gauge("container.cpu.limit", cpu_value, container_dimensions, hostname="SUPPRESS")
else:
self.log.debug("Container {} does not have cpu limit set", container_name)
if 'memory' in container_limits:
memory_limit = container_limits['memory']
memory_in_bytes = utils.convert_memory_string_to_bytes(memory_limit)
@ -231,23 +239,27 @@ class Kubernetes(checks.AgentCheck):
container_key = container_name + " " + container_dimensions["namespace"]
if container_key not in memory_limit_map:
memory_limit_map[container_key] = memory_in_bytes
except KeyError:
self.log.exception("Unable to report container limits for {}".format(container_name))
try:
container_requests = container['resources']['requests']
else:
self.log.debug("Container {} does not have memory limit set", container_name)
if 'requests' not in container_resources:
self.log.debug("Container {} does not have requests set", container_name)
else:
container_requests = container_resources['requests']
if 'cpu' in container_requests:
cpu_request = container_requests['cpu']
cpu_value = self._convert_cpu_to_cores(cpu_request)
if self.report_container_metrics:
self.gauge("container.request.cpu", cpu_value, container_dimensions, hostname="SUPPRESS")
else:
self.log.debug("Container {} does not have cpu request set", container_name)
if 'memory' in container_requests:
memory_request = container_requests['memory']
memory_in_bytes = utils.convert_memory_string_to_bytes(memory_request)
if self.report_container_metrics:
self.gauge("container.request.memory_bytes", memory_in_bytes, container_dimensions,
hostname="SUPPRESS")
except KeyError:
self.log.exception("Unable to report container requests for {}".format(container_name))
else:
self.log.debug("Container {} does not have memory request set", container_name)
def _convert_cpu_to_cores(self, cpu_string):
"""Kubernetes reports cores in millicores in some instances.