AMBARI-18289 : Invalid negative values for some AMS metrics. (avijayan)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/9455b52d Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/9455b52d Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/9455b52d Branch: refs/heads/trunk Commit: 9455b52dd3126248ccea0d077d5da4512f4e2f21 Parents: aa0528e Author: Aravindan Vijayan <avija...@hortonworks.com> Authored: Tue Sep 13 20:22:56 2016 -0700 Committer: Aravindan Vijayan <avija...@hortonworks.com> Committed: Wed Sep 14 15:03:34 2016 -0700 ---------------------------------------------------------------------- .../conf/unix/metric_monitor.ini | 1 + .../src/main/python/core/config_reader.py | 3 ++ .../src/main/python/core/host_info.py | 39 ++++++++++++++++---- .../0.1.0/configuration/ams-env.xml | 9 +++++ .../0.1.0/package/scripts/params.py | 1 + .../package/templates/metric_monitor.ini.j2 | 1 + 6 files changed, 46 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/9455b52d/ambari-metrics/ambari-metrics-host-monitoring/conf/unix/metric_monitor.ini ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-host-monitoring/conf/unix/metric_monitor.ini b/ambari-metrics/ambari-metrics-host-monitoring/conf/unix/metric_monitor.ini index 59ca5d7..e98c65c 100644 --- a/ambari-metrics/ambari-metrics-host-monitoring/conf/unix/metric_monitor.ini +++ b/ambari-metrics/ambari-metrics-host-monitoring/conf/unix/metric_monitor.ini @@ -21,6 +21,7 @@ debug_level = INFO metrics_servers = localhost enable_time_threshold = false enable_value_threshold = false +skip_disk_patterns = [emitter] send_interval = 60 http://git-wip-us.apache.org/repos/asf/ambari/blob/9455b52d/ambari-metrics/ambari-metrics-host-monitoring/src/main/python/core/config_reader.py ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-host-monitoring/src/main/python/core/config_reader.py b/ambari-metrics/ambari-metrics-host-monitoring/src/main/python/core/config_reader.py index 44692f6..2e8a170 100644 --- a/ambari-metrics/ambari-metrics-host-monitoring/src/main/python/core/config_reader.py +++ b/ambari-metrics/ambari-metrics-host-monitoring/src/main/python/core/config_reader.py @@ -245,3 +245,6 @@ class Configuration: def get_ca_certs(self): return self._ca_cert_file_path + + def get_disk_metrics_skip_pattern(self): + return self.get("default", "skip_disk_patterns") \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/9455b52d/ambari-metrics/ambari-metrics-host-monitoring/src/main/python/core/host_info.py ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-host-monitoring/src/main/python/core/host_info.py b/ambari-metrics/ambari-metrics-host-monitoring/src/main/python/core/host_info.py index 845b270..f79cacd 100644 --- a/ambari-metrics/ambari-metrics-host-monitoring/src/main/python/core/host_info.py +++ b/ambari-metrics/ambari-metrics-host-monitoring/src/main/python/core/host_info.py @@ -26,6 +26,8 @@ import time import threading import socket import operator +import re +from collections import namedtuple logger = logging.getLogger() cached_hostname = None @@ -244,16 +246,37 @@ class HostInfo(): if delta <= 0: delta = float("inf") - io_counters = psutil.disk_io_counters() + skip_disk_patterns = self.__config.get_disk_metrics_skip_pattern() + logger.debug('skip_disk_patterns: %s' % skip_disk_patterns) + if not skip_disk_patterns or skip_disk_patterns == 'None': + io_counters = psutil.disk_io_counters() + else: + sdiskio = namedtuple('sdiskio', ['read_count', 'write_count', + 'read_bytes', 'write_bytes', + 'read_time', 'write_time']) + skip_disk_pattern_list = skip_disk_patterns.split(',') + rawdict = psutil.disk_io_counters(True) + if not rawdict: + raise RuntimeError("Couldn't find any physical disk") + trimmed_dict = {} + for disk, fields in rawdict.items(): + ignore_disk = False + for p in skip_disk_pattern_list: + if re.match(p, disk): + ignore_disk = True + if not ignore_disk: + trimmed_dict[disk] = sdiskio(*fields) + io_counters = sdiskio(*[sum(x) for x in zip(*trimmed_dict.values())]) new_disk_stats = { - 'read_count' : io_counters.read_count if hasattr(io_counters, 'read_count') else 0, - 'write_count' : io_counters.write_count if hasattr(io_counters, 'write_count') else 0, - 'read_bytes' : io_counters.read_bytes if hasattr(io_counters, 'read_bytes') else 0, - 'write_bytes' : io_counters.write_bytes if hasattr(io_counters, 'write_bytes') else 0, - 'read_time' : io_counters.read_time if hasattr(io_counters, 'read_time') else 0, - 'write_time' : io_counters.write_time if hasattr(io_counters, 'write_time') else 0 - } + 'read_count' : io_counters.read_count if hasattr(io_counters, 'read_count') else 0, + 'write_count' : io_counters.write_count if hasattr(io_counters, 'write_count') else 0, + 'read_bytes' : io_counters.read_bytes if hasattr(io_counters, 'read_bytes') else 0, + 'write_bytes' : io_counters.write_bytes if hasattr(io_counters, 'write_bytes') else 0, + 'read_time' : io_counters.read_time if hasattr(io_counters, 'read_time') else 0, + 'write_time' : io_counters.write_time if hasattr(io_counters, 'write_time') else 0 + } + if not self.__last_disk_data: self.__last_disk_data = new_disk_stats read_bps = (new_disk_stats['read_bytes'] - self.__last_disk_data['read_bytes']) / delta http://git-wip-us.apache.org/repos/asf/ambari/blob/9455b52d/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-env.xml ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-env.xml b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-env.xml index b6ce3a2..a52cb82 100644 --- a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-env.xml +++ b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-env.xml @@ -92,6 +92,15 @@ <on-ambari-upgrade add="true"/> </property> <property> + <name>timeline.metrics.skip.disk.metrics.patterns</name> + <value>true</value> + <description> + Comma separated list of disk patterns to be ignored while collecting aggregate disk usage and counter metrics. + For example, volume groups managed by docker can be ignored by using the pattern "dm-[0-9]+" + </description> + <on-ambari-upgrade add="true"/> + </property> + <property> <name>content</name> <display-name>ams-env template</display-name> <value> http://git-wip-us.apache.org/repos/asf/ambari/blob/9455b52d/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/params.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/params.py b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/params.py index 3908b27..61b89f8 100644 --- a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/params.py +++ b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/params.py @@ -192,6 +192,7 @@ metrics_collector_heapsize = default('/configurations/ams-env/metrics_collector_ host_sys_prepped = default("/hostLevelParams/host_sys_prepped", False) metrics_report_interval = default("/configurations/ams-site/timeline.metrics.sink.report.interval", 60) metrics_collection_period = default("/configurations/ams-site/timeline.metrics.sink.collection.period", 10) +skip_disk_metrics_patterns = default("/configurations/ams-env/timeline.metrics.skip.disk.metrics.patterns", None) hbase_log_dir = config['configurations']['ams-hbase-env']['hbase_log_dir'] hbase_classpath_additional = default("/configurations/ams-hbase-env/hbase_classpath_additional", None) http://git-wip-us.apache.org/repos/asf/ambari/blob/9455b52d/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/templates/metric_monitor.ini.j2 ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/templates/metric_monitor.ini.j2 b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/templates/metric_monitor.ini.j2 index 65129f8..b011fd5 100644 --- a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/templates/metric_monitor.ini.j2 +++ b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/templates/metric_monitor.ini.j2 @@ -21,6 +21,7 @@ debug_level = INFO metrics_servers = {{ams_collector_hosts}} enable_time_threshold = false enable_value_threshold = false +skip_disk_patterns = {{skip_disk_metrics_patterns}} [emitter] send_interval = {{metrics_report_interval}}