Module: check_mk
Branch: master
Commit: f8c9579b27b88e834cc032f76b08949ad87ca91f
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=f8c9579b27b88e…
Author: Simon Betz <si(a)mathias-kettner.de>
Date: Wed Feb 27 11:56:34 2019 +0100
aws_limits: Add performance data and put detailed information to long output
Change-Id: I14f45d0ffa44e49918dfcaa8d6635d9cf3bcec02
---
checks/aws.include | 51 +++++++++++++++++++++++-----
checks/aws_elb_limits | 14 +++++---
checks/aws_s3_limits | 10 ++++--
cmk/gui/plugins/metrics/check_mk.py | 24 +++++++++++++
cmk/gui/plugins/wato/check_parameters/aws.py | 9 +++--
5 files changed, 88 insertions(+), 20 deletions(-)
diff --git a/checks/aws.include b/checks/aws.include
index 0828800..8106c56 100644
--- a/checks/aws.include
+++ b/checks/aws.include
@@ -104,15 +104,48 @@ def inventory_aws_generic_single(parsed, required_metrics):
def check_aws_limits(aws_service, params, parsed):
- for resource, resource_title, limit, amount in parsed:
- p_limit, (warn, crit) = params['%s_limit_levels' % resource]
- if p_limit is not None:
- limit_ref = p_limit
- else:
+ """
+ Generic check for checking limits of AWS resource.
+ - levels: use plain resource_key
+ - performance data: aws_%s_%s % AWS resource, resource_key
+ """
+ long_output = []
+ levels_reached = []
+ max_state = 0
+ perfdata = []
+ for resource_key, resource_title, limit, amount, human_readable_func in parsed:
+ if human_readable_func is None:
+ human_readable_func = lambda x: "%s" % x
+
+ p_limit, (warn, crit) = params[resource_key]
+ if p_limit is None:
limit_ref = limit
- yield 0, '%s: %s (of max. %s)' % (resource_title, amount, limit_ref)
- yield check_levels(
- 100.0 * amount / limit,
- "aws_%s_%s_limits" % (aws_service, resource), (warn, crit),
+ else:
+ limit_ref = p_limit
+
+ infotext = '%s: %s (of max. %s)' % (resource_title,
human_readable_func(amount),
+ human_readable_func(limit_ref))
+ perfvar = "aws_%s_%s" % (aws_service, resource_key)
+ perfdata.append((perfvar, amount))
+
+ if not limit_ref:
+ continue
+
+ state, extrainfo, _perfdata = check_levels(
+ 100.0 * amount / limit_ref,
+ "%s_usage" % perfvar, (warn, crit),
human_readable_func=get_percent_human_readable,
infoname="Usage")
+
+ max_state = max(state, max_state)
+ if state:
+ levels_reached.append(resource_title)
+ infotext += ", %s%s" % (extrainfo, state_markers[state])
+ long_output.append(infotext)
+
+ if levels_reached:
+ yield max_state, 'Levels reached: %s' % ",
".join(levels_reached), perfdata
+ else:
+ yield 0, 'No levels reached', perfdata
+ if long_output:
+ yield 0, "\n%s" % "\n".join(long_output)
diff --git a/checks/aws_elb_limits b/checks/aws_elb_limits
index 9b055e4..3416555 100644
--- a/checks/aws_elb_limits
+++ b/checks/aws_elb_limits
@@ -25,22 +25,28 @@
# Boston, MA 02110-1301 USA.
factory_settings['aws_elb_limits_default_levels'] = {
- 'load_balancers_limit_levels': (None, (80.0, 90.0)),
- 'load_balancer_listeners_limit_levels': (None, (80.0, 90.0)),
- 'load_balancer_registered_instances_limit_levels': (None, (80.0, 90.0)),
+ 'load_balancers': (None, (80.0, 90.0)),
+ 'load_balancer_listeners': (None, (80.0, 90.0)),
+ 'load_balancer_registered_instances': (None, (80.0, 90.0)),
}
+def parse_aws_elb_limits(info):
+ return [(resource_key, resource_title, limit, amount, None)
+ for resource_key, resource_title, limit, amount in parse_aws(info)]
+
+
def check_aws_elb_limits(item, params, parsed):
return check_aws_limits("elb", params, parsed)
check_info['aws_elb_limits'] = {
- 'parse_function': parse_aws,
+ 'parse_function': parse_aws_elb_limits,
'inventory_function': discover_single,
'check_function': check_aws_elb_limits,
'service_description': 'AWS/ELB Limits',
'includes': ['aws.include'],
'group': 'aws_elb_limits',
'default_levels_variable': 'aws_elb_limits_default_levels',
+ 'has_perfdata': True,
}
diff --git a/checks/aws_s3_limits b/checks/aws_s3_limits
index ebedf52..4de9b46 100644
--- a/checks/aws_s3_limits
+++ b/checks/aws_s3_limits
@@ -25,20 +25,26 @@
# Boston, MA 02110-1301 USA.
factory_settings['aws_s3_limits_default_levels'] = {
- 'buckets_limit_levels': (None, (80.0, 90.0)),
+ 'buckets': (None, (80.0, 90.0)),
}
+def parse_aws_s3_limits(info):
+ return [(resource_key, resource_title, limit, amount, None)
+ for resource_key, resource_title, limit, amount in parse_aws(info)]
+
+
def check_aws_s3_limits(item, params, parsed):
return check_aws_limits("s3", params, parsed)
check_info['aws_s3_limits'] = {
- 'parse_function': parse_aws,
+ 'parse_function': parse_aws_s3_limits,
'inventory_function': discover_single,
'check_function': check_aws_s3_limits,
'service_description': 'AWS/S3 Limits',
'includes': ['aws.include'],
'group': 'aws_s3_limits',
'default_levels_variable': 'aws_s3_limits_default_levels',
+ 'has_perfdata': True,
}
diff --git a/cmk/gui/plugins/metrics/check_mk.py b/cmk/gui/plugins/metrics/check_mk.py
index be5a388..372380c 100644
--- a/cmk/gui/plugins/metrics/check_mk.py
+++ b/cmk/gui/plugins/metrics/check_mk.py
@@ -4992,6 +4992,30 @@ metric_info['aws_s3_select_object_returned'] = {
'color': '41/a',
}
+metric_info['aws_s3_buckets'] = {
+ 'title': _('Buckets'),
+ 'unit': 'count',
+ 'color': '11/a',
+}
+
+metric_info['aws_elb_load_balancers'] = {
+ 'title': _('Load balancers'),
+ 'unit': 'count',
+ 'color': '11/a',
+}
+
+metric_info['aws_elb_load_balancer_listeners'] = {
+ 'title': _('Load balancer listeners'),
+ 'unit': 'count',
+ 'color': '12/a',
+}
+
+metric_info['aws_elb_load_balancer_registered_instances'] = {
+ 'title': _('Load balancer registered instances'),
+ 'unit': 'count',
+ 'color': '13/a',
+}
+
metric_info["elapsed_time"] = {
"title": _("Elapsed time"),
"unit": "s",
diff --git a/cmk/gui/plugins/wato/check_parameters/aws.py
b/cmk/gui/plugins/wato/check_parameters/aws.py
index 630fc2a..0506009 100644
--- a/cmk/gui/plugins/wato/check_parameters/aws.py
+++ b/cmk/gui/plugins/wato/check_parameters/aws.py
@@ -440,7 +440,7 @@ class
RulespecCheckgroupParametersAwsS3Limits(CheckParameterRulespecWithoutItem)
@property
def parameter_valuespec(self):
- return Dictionary(elements=[('buckets_limit_levels',
_vs_limits("Buckets", 100))])
+ return Dictionary(elements=[('buckets', _vs_limits("Buckets",
100))])
#.
@@ -710,10 +710,9 @@ class
RulespecCheckgroupParametersAwsElbLimits(CheckParameterRulespecWithoutItem
@property
def parameter_valuespec(self):
return Dictionary(elements=[
- ('load_balancers_limit_levels', _vs_limits("Load
balancers", 20)),
- ('load_balancer_listeners_limit_levels',
- _vs_limits("Listeners per load balancer", 100)),
- ('load_balancer_registered_instances_limit_levels',
+ ('load_balancers', _vs_limits("Load balancers", 20)),
+ ('load_balancer_listeners', _vs_limits("Listeners per load
balancer", 100)),
+ ('load_balancer_registered_instances',
_vs_limits("Registered instances per load balancer", 1000)),
])