Use KiB as unit for host_ram_usage when using prometheus datasource
The prometheus datasource was reporting host_ram_usage in MiB as
described in the docstring for the base datasource interface
definition [1].
However, the gnocchi datasource is reporting it in KiB following
ceilometer metric `hardware.memory.used` [2] and the strategies
using that metric expect it to be in KiB so the best approach is
to change the unit in the prometheus datasource and update the
docstring to avoid missunderstandings in future. So, this patch
is fixing the prometheus datasource to return host_ram_usage
in KiB instead of MiB.
Additionally, it is adding more unit tests for the check_threshold
method so that it covers the memory based strategy execution, validates
the calculated standard deviation and adds the cases where it is below
the threshold.
[1] 15981117ee/watcher/decision_engine/datasources/base.py (L177-L183)
[2] https://docs.openstack.org/ceilometer/train/admin/telemetry-measurements.html#snmp-based-meters
Closes-Bug: #2113776
Change-Id: Idc060d1e709c0265c64ada16062c3a206c6b04fa
This commit is contained in:
@@ -178,7 +178,7 @@ class DataSourceBase(object):
|
||||
granularity=None):
|
||||
"""Get the ram usage for a host such as a compute_node
|
||||
|
||||
:return: ram usage as float in megabytes
|
||||
:return: ram usage as float in kibibytes
|
||||
"""
|
||||
pass
|
||||
|
||||
|
||||
@@ -276,7 +276,7 @@ class PrometheusHelper(base.DataSourceBase):
|
||||
(node_memory_MemTotal_bytes{instance='the_host'} -
|
||||
avg_over_time(
|
||||
node_memory_MemAvailable_bytes{instance='the_host'}[300s]))
|
||||
/ 1024 / 1024
|
||||
/ 1024
|
||||
|
||||
So we take total and subtract available memory to determine
|
||||
how much is in use. We use the prometheus xxx_over_time functions
|
||||
@@ -315,10 +315,11 @@ class PrometheusHelper(base.DataSourceBase):
|
||||
'meter': meter, 'period': period}
|
||||
)
|
||||
elif meter == 'node_memory_MemAvailable_bytes':
|
||||
# Prometheus metric is in B and we need to return KB
|
||||
query_args = (
|
||||
"(node_memory_MemTotal_bytes{%(label)s='%(label_value)s'} "
|
||||
"- %(agg)s_over_time(%(meter)s{%(label)s='%(label_value)s'}"
|
||||
"[%(period)ss])) / 1024 / 1024"
|
||||
"[%(period)ss])) / 1024"
|
||||
% {'label': self.prometheus_fqdn_label,
|
||||
'label_value': instance_label, 'agg': aggregate,
|
||||
'meter': meter, 'period': period}
|
||||
|
||||
Reference in New Issue
Block a user