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