monasca-agent/tests/checks_d/test_ceph.py
Sean McGinnis 1d4e926076
Use unittest.mock instead of third party mock
Now that we no longer support py27, we can use the standard library
unittest.mock module instead of the third party mock lib.

Change-Id: I1dca4b2c7eccf1b19482dde60b88a132935b48b8
Signed-off-by: Sean McGinnis <sean.mcginnis@gmail.com>
2020-04-18 11:54:36 -05:00

1292 lines
56 KiB
Python

# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import json
import os
import subprocess
from unittest import mock
import unittest
from monasca_agent.common import util
from monasca_agent.collector.checks_d import ceph
def mocked_check_output(args, shell=True, stderr='', version='jewel'):
output = ''
if '-f json df detail' in args:
output = open(os.path.dirname(os.path.abspath(__file__)) +
'/fixtures/ceph-{}/test_ceph-df.json'.format(version))
elif '-f json status' in args:
output = open(os.path.dirname(os.path.abspath(__file__)) +
'/fixtures/ceph-{}/test_ceph-status.json'.format(version))
elif 'status' in args:
output = open(os.path.dirname(os.path.abspath(__file__)) +
'/fixtures/ceph-{}/test_ceph-status.plain'.format(version))
elif '-f json osd df' in args:
output = open(os.path.dirname(os.path.abspath(__file__)) +
'/fixtures/ceph-{}/test_ceph-osd-df.json'.format(version))
elif '-f json osd perf' in args:
output = open(os.path.dirname(os.path.abspath(__file__)) +
'/fixtures/ceph-{}/test_ceph-osd-perf.json'.format(version))
elif '-f json osd dump' in args:
output = open(os.path.dirname(os.path.abspath(__file__)) +
'/fixtures/ceph-{}/test_ceph-osd-dump.json'.format(version))
elif '-f json osd pool stats' in args:
output = open(os.path.dirname(os.path.abspath(__file__)) +
'/fixtures/ceph-{}/test_ceph-osd-pool-stats.json'.format(version))
else:
raise subprocess.CalledProcessError(1, cmd=args,
output='Invalid command')
return output.read()
def mocked_check_output_jewel(args, shell=True, stderr=''):
return mocked_check_output(args, shell, stderr, 'jewel')
def mocked_check_output_luminous(args, shell=True, stderr=''):
return mocked_check_output(args, shell, stderr, 'luminous')
class MockCephCheck(ceph.Ceph):
CLUSTER = 'ceph'
def __init__(self, ceph_version='jewel'):
# Attach representative output from Ceph clusters of different versions
if ceph_version == 'jewel':
subprocess.check_output = mock.Mock(
side_effect=mocked_check_output_jewel)
elif ceph_version == 'luminous':
subprocess.check_output = mock.Mock(
side_effect=mocked_check_output_luminous)
super(MockCephCheck, self).__init__(
name='ceph',
init_config={},
instances=[],
agent_config={}
)
def _ceph_cmd(self, *args):
if hasattr(self, 'instance'):
return super(MockCephCheck, self)._ceph_cmd(*args)
else:
self.instance = { 'use_sudo': False }
ret = super(MockCephCheck, self)._ceph_cmd(*args)
del self.instance
return ret
class CephCheckTest(unittest.TestCase):
maxDiff = None
CEPH_VERSION='jewel'
expected = {
'pool_stats': {
'images': {
'ceph.pool.recovery.recovering_objects_per_sec': 3530,
'ceph.pool.recovery.recovering_bytes_per_sec': 14462655,
'ceph.pool.recovery.recovering_keys_per_sec': 0,
'ceph.pool.recovery.num_objects_recovered': 7148,
'ceph.pool.recovery.num_bytes_recovered': 29278208,
'ceph.pool.recovery.num_keys_recovered': 0
},
'vms': {
'ceph.pool.client.read_bytes_sec': 16869,
'ceph.pool.client.write_bytes_sec': 9341127,
'ceph.pool.client.read_op_per_sec': 369,
'ceph.pool.client.write_op_per_sec': 1364
}
},
'df_total': {
'ceph.cluster.total_bytes': 150000,
'ceph.cluster.total_used_bytes': 90000,
'ceph.cluster.total_avail_bytes': 60000,
'ceph.cluster.objects.total_count': 50,
'ceph.cluster.utilization_perc': 0.6
},
'stats_metrics': {
'ceph.cluster.health_status': 0,
'ceph.cluster.osds.total_count': 3,
'ceph.cluster.osds.up_count': 3,
'ceph.cluster.osds.in_count': 3,
'ceph.cluster.osds.down_count': 0,
'ceph.cluster.osds.out_count': 0,
'ceph.cluster.pgs.degraded_count': 1,
'ceph.cluster.pgs.stuck_unclean_count': 4,
'ceph.cluster.pgs.undersized_count': 5,
'ceph.cluster.objects.degraded_count': 10,
'ceph.cluster.pgs.active+clean': 192,
'ceph.cluster.pgs.active+clean+scrubbing+deep': 1,
'ceph.cluster.pgs.active+clean+scrubbing': 1,
'ceph.cluster.pgs.scrubbing_count': 1,
'ceph.cluster.pgs.deep_scrubbing_count': 1,
'ceph.cluster.pgs.remapped_count': 0,
'ceph.cluster.pgs.total_count': 192,
'ceph.cluster.pgs.avg_per_osd': 64,
'ceph.cluster.client.read_bytes_per_sec': 630000.0,
'ceph.cluster.client.write_bytes_per_sec': 272000000.0,
'ceph.cluster.client.read_ops': 263,
'ceph.cluster.client.write_ops': 1964,
'ceph.cluster.recovery.bytes_per_sec': 1e9,
'ceph.cluster.recovery.keys_per_sec': 100,
'ceph.cluster.recovery.objects_per_sec': 50,
'ceph.cluster.cache.flush_bytes_per_sec': 1e8,
'ceph.cluster.cache.evict_bytes_per_sec': 1e9,
'ceph.cluster.cache.promote_ops': 20,
'ceph.cluster.quorum_size': 3
},
'osd_metrics': {
'osd.0': {
'ceph.osd.crush_weight': 0.999390,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 1.000000,
'ceph.osd.total_bytes': 50000.0,
'ceph.osd.used_bytes': 25000.0,
'ceph.osd.avail_bytes': 25000.0,
'ceph.osd.utilization_perc': 0.5,
'ceph.osd.variance': 1.008811,
'ceph.osd.pgs_count': 192,
'ceph.osd.perf.commit_latency_seconds': 0.031,
'ceph.osd.perf.apply_latency_seconds': 0.862,
'ceph.osd.up': 1,
'ceph.osd.in': 1
},
'osd.1': {
'ceph.osd.crush_weight': 0.999390,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 1.000000,
'ceph.osd.total_bytes': 50000.0,
'ceph.osd.used_bytes': 25000.0,
'ceph.osd.avail_bytes': 25000.0,
'ceph.osd.utilization_perc': 0.5,
'ceph.osd.variance': 0.998439,
'ceph.osd.pgs_count': 192,
'ceph.osd.perf.commit_latency_seconds': 0.025,
'ceph.osd.perf.apply_latency_seconds': 1.390,
'ceph.osd.up': 1,
'ceph.osd.in': 1
},
'osd.2': {
'ceph.osd.crush_weight': 0.999390,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 1.000000,
'ceph.osd.total_bytes': 50000.0,
'ceph.osd.used_bytes': 25000.0,
'ceph.osd.avail_bytes': 25000.0,
'ceph.osd.utilization_perc': 0.5,
'ceph.osd.variance': 0.992750,
'ceph.osd.pgs_count': 192,
'ceph.osd.perf.commit_latency_seconds': 0.025,
'ceph.osd.perf.apply_latency_seconds': 1.505,
'ceph.osd.up': 1,
'ceph.osd.in': 1
}
},
'summary_metrics': {
'ceph.osds.total_bytes': 150000.0,
'ceph.osds.total_used_bytes': 75000.0,
'ceph.osds.total_avail_bytes': 75000.0,
'ceph.osds.avg_utilization_perc': 0.5
},
'pool_metrics': {
'images': {
'ceph.pool.used_bytes': 10000,
'ceph.pool.used_raw_bytes': 30000,
'ceph.pool.max_avail_bytes': 20000,
'ceph.pool.objects_count': 20,
'ceph.pool.dirty_objects_count': 20,
'ceph.pool.read_io': 6000,
'ceph.pool.read_bytes': 20000,
'ceph.pool.write_io': 2000,
'ceph.pool.write_bytes': 20000,
'ceph.pool.quota_max_bytes': 50000,
'ceph.pool.quota_max_objects': 0,
'ceph.pool.total_bytes': 30000,
'ceph.pool.utilization_perc': 0.3333333333333333
},
'vms': {
'ceph.pool.used_bytes': 20000,
'ceph.pool.used_raw_bytes': 60000,
'ceph.pool.max_avail_bytes': 20000,
'ceph.pool.objects_count': 30,
'ceph.pool.dirty_objects_count': 30,
'ceph.pool.read_io': 4000,
'ceph.pool.read_bytes': 80000,
'ceph.pool.write_io': 1000,
'ceph.pool.write_bytes': 20000,
'ceph.pool.quota_max_bytes': 0,
'ceph.pool.quota_max_objects': 0,
'ceph.pool.total_bytes': 40000,
'ceph.pool.utilization_perc': 0.5
}
},
'mon_metrics': {
'mon0': {
'ceph.monitor.total_bytes': 100000.0,
'ceph.monitor.used_bytes': 50000.0,
'ceph.monitor.avail_bytes': 50000.0,
'ceph.monitor.avail_perc': 50,
'ceph.monitor.store.total_bytes': 100,
'ceph.monitor.store.sst_bytes': 0,
'ceph.monitor.store.log_bytes': 10,
'ceph.monitor.store.misc_bytes': 10,
'ceph.monitor.skew': 0.000000,
'ceph.monitor.latency': 0.000000
},
'mon1': {
'ceph.monitor.total_bytes': 100000.0,
'ceph.monitor.used_bytes': 50000.0,
'ceph.monitor.avail_bytes': 50000.0,
'ceph.monitor.avail_perc': 50,
'ceph.monitor.store.total_bytes': 100,
'ceph.monitor.store.sst_bytes': 0,
'ceph.monitor.store.log_bytes': 10,
'ceph.monitor.store.misc_bytes': 10,
'ceph.monitor.skew': 0.000000,
'ceph.monitor.latency': 0.002577
},
'mon2': {
'ceph.monitor.total_bytes': 100000.0,
'ceph.monitor.used_bytes': 50000.0,
'ceph.monitor.avail_bytes': 50000.0,
'ceph.monitor.avail_perc': 50,
'ceph.monitor.store.total_bytes': 100,
'ceph.monitor.store.sst_bytes': 0,
'ceph.monitor.store.log_bytes': 10,
'ceph.monitor.store.misc_bytes': 10,
'ceph.monitor.skew': 0.000000,
'ceph.monitor.latency': 0.003353
},
},
'test_ceph_cmd_lens': {
'df detail json': 2,
'status json': 9,
'status': 683,
'osd df json': 3,
'osd perf json': 1,
'osd dump json': 15,
'osd pool stats json': 2
},
'test_check_call_count': 144
}
def setUp(self):
super(CephCheckTest, self).setUp()
self.ceph_check = MockCephCheck(self.CEPH_VERSION)
self.ceph_check.gauge = mock.Mock()
def test_ceph_cmd(self):
df = self.ceph_check._ceph_cmd('df detail', 'json')
st = self.ceph_check._ceph_cmd('status', 'json')
st_plain = self.ceph_check._ceph_cmd('status')
osd_df = self.ceph_check._ceph_cmd('osd df', 'json')
osd_perf = self.ceph_check._ceph_cmd('osd perf', 'json')
osd_dump = self.ceph_check._ceph_cmd('osd dump', 'json')
osd_pool = self.ceph_check._ceph_cmd('osd pool stats', 'json')
self.assertIsInstance(df, dict)
self.assertEqual(self.expected['test_ceph_cmd_lens']['df detail json'], len(df))
self.assertIsInstance(st, dict)
self.assertEqual(self.expected['test_ceph_cmd_lens']['status json'], len(st))
self.assertIsInstance(st_plain, str)
self.assertEqual(self.expected['test_ceph_cmd_lens']['status'], len(st_plain))
self.assertIsInstance(osd_df, dict)
self.assertEqual(self.expected['test_ceph_cmd_lens']['osd df json'], len(osd_df))
self.assertIsInstance(osd_perf, dict)
self.assertEqual(self.expected['test_ceph_cmd_lens']['osd perf json'], len(osd_perf))
self.assertIsInstance(osd_dump, dict)
self.assertEqual(self.expected['test_ceph_cmd_lens']['osd dump json'], len(osd_dump))
self.assertIsInstance(osd_pool, list)
self.assertEqual(self.expected['test_ceph_cmd_lens']['osd pool stats json'], len(osd_pool))
with self.assertRaises(subprocess.CalledProcessError) as e:
self.ceph_check._ceph_cmd('foo', 'json')
self.assertEqual("Unable to execute ceph command 'ceph --cluster"
"ceph -f json foo': Invalid command", e.output)
def test_ceph_cmd_sudo(self):
self.ceph_check.check({
'use_sudo': True,
})
expect_cmd = 'sudo ceph --cluster ceph -f json df detail'
with mock.patch('subprocess.check_output') as ceph_cmd_call:
try:
self.ceph_check._ceph_cmd('df detail', 'json')
except Exception as e:
pass
ceph_cmd_call.assert_called_with(expect_cmd, shell=True,
stderr=subprocess.STDOUT)
def test_parse_ceph_status(self):
self.assertEqual(0, self.ceph_check._parse_ceph_status('HEALTH_OK'))
self.assertEqual(1, self.ceph_check._parse_ceph_status('HEALTH_WARN'))
self.assertEqual(2, self.ceph_check._parse_ceph_status('HEALTH_ERR'))
self.assertEqual(2, self.ceph_check._parse_ceph_status('foo'))
def test_get_cache_io(self):
cache_kb = 'cache io 1000000 kB/s flush, 1000000 kB/s evict,' \
' 20 op/s promote'
cache_mb = 'cache io 1000 MB/s flush, 1000 MB/s evict, 20 op/s promote'
cache_gb = 'cache io 1 GB/s flush, 1 GB/s evict, 20 op/s promote'
expected_metrics = {
'ceph.cluster.cache.flush_bytes_per_sec': 1e9,
'ceph.cluster.cache.evict_bytes_per_sec': 1e9,
'ceph.cluster.cache.promote_ops': 20
}
metrics_kb = self.ceph_check._get_cache_io(cache_kb)
metrics_mb = self.ceph_check._get_cache_io(cache_mb)
metrics_gb = self.ceph_check._get_cache_io(cache_gb)
self.assertEqual(expected_metrics, metrics_kb)
self.assertEqual(expected_metrics, metrics_mb)
self.assertEqual(expected_metrics, metrics_gb)
def test_get_client_io(self):
client_kb = 'client io 1000000 kB/s rd, 1000000 kb/s wr, 10 op/s rd,' \
' 20 op/s wr'
client_mb = 'client io 1000 MB/s rd, 1000 mb/s wr, 10 op/s rd,' \
' 20 op/s wr'
client_gb = 'client io 1 GB/s rd, 1 gb/s wr, 10 op/s rd, 20 op/s wr'
expected_metrics = {
'ceph.cluster.client.read_bytes_per_sec': 1e9,
'ceph.cluster.client.write_bytes_per_sec': 1e9,
'ceph.cluster.client.read_ops': 10,
'ceph.cluster.client.write_ops': 20
}
metrics_kb = self.ceph_check._get_client_io(client_kb)
metrics_mb = self.ceph_check._get_client_io(client_mb)
metrics_gb = self.ceph_check._get_client_io(client_gb)
self.assertEqual(expected_metrics, metrics_kb)
self.assertEqual(expected_metrics, metrics_mb)
self.assertEqual(expected_metrics, metrics_gb)
def test_get_recovery_io(self):
recovery_kb = 'recovery io 1000000 kB/s, 100 keys/s, 50 objects/s'
recovery_mb = 'recovery io 1000 MB/s, 100 keys/s, 50 objects/s'
recovery_gb = 'recovery io 1 GB/s, 100 keys/s, 50 objects/s'
expected_metrics = {
'ceph.cluster.recovery.bytes_per_sec': 1e9,
'ceph.cluster.recovery.keys_per_sec': 100,
'ceph.cluster.recovery.objects_per_sec': 50
}
metrics_kb = self.ceph_check._get_recovery_io(recovery_kb)
metrics_mb = self.ceph_check._get_recovery_io(recovery_mb)
metrics_gb = self.ceph_check._get_recovery_io(recovery_gb)
self.assertEqual(expected_metrics, metrics_kb)
self.assertEqual(expected_metrics, metrics_mb)
self.assertEqual(expected_metrics, metrics_gb)
def test_get_summary_metrics(self):
summary_strs = [
'1 pgs degraded', '2 pgs stuck degraded', '3 pgs unclean',
'4 pgs stuck unclean', '5 pgs undersized',
'6 pgs stuck undersized', '7 pgs stale', '8 pgs stuck stale',
'9 requests are blocked', 'recovery 10/100 objects degraded',
'recovery 11/100 objects misplaced'
]
expected_metrics = {
'ceph.cluster.pgs.degraded_count': 1,
'ceph.cluster.pgs.stuck_degraded_count': 2,
'ceph.cluster.pgs.unclean_count': 3,
'ceph.cluster.pgs.stuck_unclean_count': 4,
'ceph.cluster.pgs.undersized_count': 5,
'ceph.cluster.pgs.stuck_undersized_count': 6,
'ceph.cluster.pgs.stale_count': 7,
'ceph.cluster.pgs.stuck_stale_count': 8,
'ceph.cluster.slow_requests_count': 9,
'ceph.cluster.objects.degraded_count': 10,
'ceph.cluster.objects.misplaced_count': 11
}
metrics = {}
self.assertEqual(self.ceph_check._get_summary_metrics(''), {})
for s in summary_strs:
metrics.update(self.ceph_check._get_summary_metrics(s))
self.assertEqual(expected_metrics, metrics)
def test_get_usage_metrics(self):
df = self.ceph_check._ceph_cmd('df detail', 'json')
metrics = self.ceph_check._get_usage_metrics(df)
# NOTE: some metrics are floating point values and may not be
# reliably compared with pre-computed float values
self.assertEqual(
{ k: v for k, v in self.expected['df_total'].items()
if k != 'ceph.cluster.utilization_perc'},
{ k: v for k, v in metrics.items()
if k != 'ceph.cluster.utilization_perc'})
self.assertAlmostEqual(
self.expected['df_total']['ceph.cluster.utilization_perc'],
metrics['ceph.cluster.utilization_perc'], places=3)
def test_get_stats_metrics(self):
status = self.ceph_check._ceph_cmd('status', 'json')
status_plain = self.ceph_check._ceph_cmd('status')
metrics = self.ceph_check._get_stats_metrics(status, status_plain)
self.assertDictEqual(self.expected['stats_metrics'], metrics)
def test_get_mon_metrics(self):
status = self.ceph_check._ceph_cmd('status', 'json')
metrics = self.ceph_check._get_mon_metrics(status)
self.assertEqual(self.expected['mon_metrics'], metrics)
def test_get_osd_metrics(self):
df = self.ceph_check._ceph_cmd('osd df', 'json')
perf = self.ceph_check._ceph_cmd('osd perf', 'json')
dump = self.ceph_check._ceph_cmd('osd dump', 'json')
metrics = self.ceph_check._get_osd_metrics(df, perf, dump)
# NOTE: some metrics are floating point values and may not be
# reliably compared with pre-computed float values
for osd, osd_metrics in metrics.items():
self.assertEqual(
{ k: v for k, v in self.expected['osd_metrics'][osd].items()
if not k in ['ceph.osd.utilization_perc', 'ceph.osd.variance']},
{ k: v for k, v in osd_metrics.items()
if not k in ['ceph.osd.utilization_perc', 'ceph.osd.variance']})
self.assertAlmostEqual(
self.expected['osd_metrics'][osd]['ceph.osd.utilization_perc'],
osd_metrics['ceph.osd.utilization_perc'], places=2)
self.assertAlmostEqual(
self.expected['osd_metrics'][osd]['ceph.osd.variance'],
osd_metrics['ceph.osd.variance'], places=2)
def test_get_osd_summary_metrics(self):
df = self.ceph_check._ceph_cmd('osd df', 'json')
metrics = self.ceph_check._get_osd_summary_metrics(df)
# NOTE: some metrics are floating point values and may not be
# reliably compared with pre-computed float values
self.assertEqual(
{ k: v for k, v in self.expected['summary_metrics'].items()
if k != 'ceph.osds.avg_utilization_perc'},
{ k: v for k, v in metrics.items()
if k != 'ceph.osds.avg_utilization_perc'})
self.assertAlmostEqual(
self.expected['summary_metrics']['ceph.osds.avg_utilization_perc'],
metrics['ceph.osds.avg_utilization_perc'], places=3)
def test_get_pool_metrics(self):
df = self.ceph_check._ceph_cmd('df detail', 'json')
# NOTE: some metrics are floating point values and may not be
# reliably compared with pre-computed float values
metrics = self.ceph_check._get_pool_metrics(df)
for pool, pool_metrics in metrics.items():
self.assertEqual(
{ k: v for k, v in self.expected['pool_metrics'][pool].items()
if k != 'ceph.pool.utilization_perc'},
{ k: v for k, v in metrics[pool].items()
if k != 'ceph.pool.utilization_perc'})
self.assertAlmostEqual(
self.expected['pool_metrics'][pool]['ceph.pool.utilization_perc'],
pool_metrics['ceph.pool.utilization_perc'], places=3)
def test_get_pool_stats_metrics(self):
pool_stats = self.ceph_check._ceph_cmd('osd pool stats', 'json')
metrics = self.ceph_check._get_pool_stats_metrics(pool_stats)
self.assertEqual(self.expected['pool_stats'], metrics)
def test_check(self):
self.ceph_check.check({})
self.assertEqual(self.expected['test_check_call_count'], self.ceph_check.gauge.call_count)
def test_check_disable_all_metrics(self):
self.ceph_check._get_usage_metrics = mock.Mock(return_value={})
self.ceph_check._get_stats_metrics = mock.Mock(return_value={})
self.ceph_check._get_mon_metrics = mock.Mock(return_value={})
self.ceph_check._get_osd_metrics = mock.Mock(return_value={})
self.ceph_check._get_osd_summary_metrics = mock.Mock(return_value={})
self.ceph_check._get_pool_metrics = mock.Mock(return_value={})
self.ceph_check._get_pool_stats_metrics = mock.Mock(return_value={})
self.ceph_check.check({
'collect_usage_metrics': False,
'collect_stats_metrics': False,
'collect_mon_metrics': False,
'collect_osd_metrics': False,
'collect_pool_metrics': False,
})
self.assertFalse(self.ceph_check._get_usage_metrics.called)
self.assertFalse(self.ceph_check._get_stats_metrics.called)
self.assertFalse(self.ceph_check._get_mon_metrics.called)
self.assertFalse(self.ceph_check._get_osd_metrics.called)
self.assertFalse(self.ceph_check._get_osd_summary_metrics.called)
self.assertFalse(self.ceph_check._get_pool_metrics.called)
self.assertFalse(self.ceph_check._get_pool_stats_metrics.called)
def test_check_disable_some_metrics(self):
self.ceph_check._get_usage_metrics = mock.Mock(return_value={})
self.ceph_check._get_stats_metrics = mock.Mock(return_value={})
self.ceph_check._get_mon_metrics = mock.Mock(return_value={})
self.ceph_check._get_osd_metrics = mock.Mock(return_value={})
self.ceph_check._get_osd_summary_metrics = mock.Mock(return_value={})
self.ceph_check._get_pool_metrics = mock.Mock(return_value={})
self.ceph_check._get_pool_stats_metrics = mock.Mock(return_value={})
self.ceph_check.check({
'collect_usage_metrics': False,
'collect_stats_metrics': False
})
self.assertFalse(self.ceph_check._get_usage_metrics.called)
self.assertFalse(self.ceph_check._get_stats_metrics.called)
self.assertTrue(self.ceph_check._get_mon_metrics.called)
self.assertTrue(self.ceph_check._get_osd_metrics.called)
self.assertTrue(self.ceph_check._get_osd_summary_metrics.called)
self.assertTrue(self.ceph_check._get_pool_metrics.called)
self.assertTrue(self.ceph_check._get_pool_stats_metrics.called)
def test_check_enable_all_metrics(self):
self.ceph_check._get_usage_metrics = mock.Mock(return_value={})
self.ceph_check._get_stats_metrics = mock.Mock(return_value={})
self.ceph_check._get_mon_metrics = mock.Mock(return_value={})
self.ceph_check._get_osd_metrics = mock.Mock(return_value={})
self.ceph_check._get_osd_summary_metrics = mock.Mock(return_value={})
self.ceph_check._get_pool_metrics = mock.Mock(return_value={})
self.ceph_check._get_pool_stats_metrics = mock.Mock(return_value={})
self.ceph_check.check({
'collect_usage_metrics': True,
'collect_stats_metrics': True,
'collect_mon_metrics': True,
'collect_osd_metrics': True,
'collect_pool_metrics': True,
})
self.assertTrue(self.ceph_check._get_usage_metrics.called)
self.assertTrue(self.ceph_check._get_stats_metrics.called)
self.assertTrue(self.ceph_check._get_mon_metrics.called)
self.assertTrue(self.ceph_check._get_osd_metrics.called)
self.assertTrue(self.ceph_check._get_osd_summary_metrics.called)
self.assertTrue(self.ceph_check._get_pool_metrics.called)
self.assertTrue(self.ceph_check._get_pool_stats_metrics.called)
class CephCheckTestLuminous(CephCheckTest):
CEPH_VERSION='luminous'
expected = {
'pool_stats': {
},
'df_total': {
'ceph.cluster.total_bytes': 121070163910656,
'ceph.cluster.total_used_bytes': 7961411256320,
'ceph.cluster.total_avail_bytes': 113108752654336,
'ceph.cluster.objects.total_count': 34566782,
'ceph.cluster.utilization_perc': 0.0658
},
'stats_metrics': {
'ceph.cluster.health_status': 1,
'ceph.cluster.osds.total_count': 33,
'ceph.cluster.osds.up_count': 22,
'ceph.cluster.osds.in_count': 24,
'ceph.cluster.osds.down_count': 11,
'ceph.cluster.osds.out_count': 9,
#'ceph.cluster.pgs.degraded_count': 2361,
#'ceph.cluster.pgs.stuck_unclean_count': 2361,
#'ceph.cluster.pgs.undersized_count': 2361,
#'ceph.cluster.objects.degraded_count': 9196074,
'ceph.cluster.pgs.active+clean': 873,
'ceph.cluster.pgs.active+undersized+degraded': 2361,
'ceph.cluster.pgs.active+clean+remapped': 14,
'ceph.cluster.pgs.scrubbing_count': 0,
'ceph.cluster.pgs.deep_scrubbing_count': 0,
'ceph.cluster.pgs.remapped_count': 14,
'ceph.cluster.pgs.total_count': 3248,
'ceph.cluster.pgs.avg_per_osd': 98.42424242424242,
#'ceph.cluster.client.read_bytes_per_sec': 4246.0,
'ceph.cluster.client.write_bytes_per_sec': 374000.0,
'ceph.cluster.client.read_ops': 2,
'ceph.cluster.client.write_ops': 16,
#'ceph.cluster.recovery.bytes_per_sec': 0,
#'ceph.cluster.recovery.keys_per_sec': 0,
#'ceph.cluster.recovery.objects_per_sec': 0,
'ceph.cluster.quorum_size': 3,
},
'osd_metrics': {
'osd.0': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 1.0,
'ceph.osd.total_bytes': 5886633532000.0,
'ceph.osd.used_bytes': 407044864000.0,
'ceph.osd.avail_bytes': 5479588668000.0,
'ceph.osd.utilization_perc': 6.91,
'ceph.osd.variance': 1.051531,
'ceph.osd.pgs_count': 228,
'ceph.osd.perf.commit_latency_seconds': 0.0,
'ceph.osd.perf.apply_latency_seconds': 0.0,
'ceph.osd.up': 1,
'ceph.osd.in': 1
},
'osd.1': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 1.0,
'ceph.osd.total_bytes': 5886633532000.0,
'ceph.osd.used_bytes': 411742144000.0,
'ceph.osd.avail_bytes': 5474891388000.0,
'ceph.osd.utilization_perc': 6.99,
'ceph.osd.variance': 1.063665,
'ceph.osd.pgs_count': 204,
'ceph.osd.perf.commit_latency_seconds': 0.0,
'ceph.osd.perf.apply_latency_seconds': 0.0,
'ceph.osd.up': 1,
'ceph.osd.in': 1
},
'osd.2': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 1.0,
'ceph.osd.total_bytes': 5886633532000.0,
'ceph.osd.used_bytes': 442908160000.0,
'ceph.osd.avail_bytes': 5443725372000.0,
'ceph.osd.utilization_perc': 7.52,
'ceph.osd.variance': 1.144177,
'ceph.osd.pgs_count': 227,
'ceph.osd.perf.commit_latency_seconds': 0.0,
'ceph.osd.perf.apply_latency_seconds': 0.0,
'ceph.osd.up': 1,
'ceph.osd.in': 1
},
'osd.3': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 1.0,
'ceph.osd.total_bytes': 5886633532000.0,
'ceph.osd.used_bytes': 348767744000.0,
'ceph.osd.avail_bytes': 5537865788000.0,
'ceph.osd.utilization_perc': 5.92,
'ceph.osd.variance': 0.900982,
'ceph.osd.pgs_count': 196,
'ceph.osd.perf.commit_latency_seconds': 0.0,
'ceph.osd.perf.apply_latency_seconds': 0.0,
'ceph.osd.up': 1,
'ceph.osd.in': 1
},
'osd.4': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 1.0,
'ceph.osd.total_bytes': 5886633532000.0,
'ceph.osd.used_bytes': 383320704000.0,
'ceph.osd.avail_bytes': 5503312828000.0,
'ceph.osd.utilization_perc': 6.51,
'ceph.osd.variance': 0.990243,
'ceph.osd.pgs_count': 204,
'ceph.osd.perf.commit_latency_seconds': 0.0,
'ceph.osd.perf.apply_latency_seconds': 0.0,
'ceph.osd.up': 1,
'ceph.osd.in': 1
},
'osd.5': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 1.0,
'ceph.osd.total_bytes': 5886633532000.0,
'ceph.osd.used_bytes': 356644416000.0,
'ceph.osd.avail_bytes': 5529989116000.0,
'ceph.osd.utilization_perc': 6.06,
'ceph.osd.variance': 0.92133,
'ceph.osd.pgs_count': 197,
'ceph.osd.perf.commit_latency_seconds': 0.0,
'ceph.osd.perf.apply_latency_seconds': 0.0,
'ceph.osd.up': 1,
'ceph.osd.in': 1
},
'osd.6': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 1.0,
'ceph.osd.total_bytes': 5886633532000.0,
'ceph.osd.used_bytes': 325735936000.0,
'ceph.osd.avail_bytes': 5560897596000.0,
'ceph.osd.utilization_perc': 5.53,
'ceph.osd.variance': 0.841483,
'ceph.osd.pgs_count': 185,
'ceph.osd.perf.commit_latency_seconds': 0.0,
'ceph.osd.perf.apply_latency_seconds': 0.0,
'ceph.osd.up': 1,
'ceph.osd.in': 1
},
'osd.7': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 1.0,
'ceph.osd.total_bytes': 5886633532000.0,
'ceph.osd.used_bytes': 367045952000.0,
'ceph.osd.avail_bytes': 5519587580000.0,
'ceph.osd.utilization_perc': 6.24,
'ceph.osd.variance': 0.9482,
'ceph.osd.pgs_count': 205,
'ceph.osd.perf.commit_latency_seconds': 0.0,
'ceph.osd.perf.apply_latency_seconds': 0.0,
'ceph.osd.up': 1,
'ceph.osd.in': 1
},
'osd.8': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 1.0,
'ceph.osd.total_bytes': 5886633532000.0,
'ceph.osd.used_bytes': 394521920000.0,
'ceph.osd.avail_bytes': 5492111612000.0,
'ceph.osd.utilization_perc': 6.7,
'ceph.osd.variance': 1.01918,
'ceph.osd.pgs_count': 214,
'ceph.osd.perf.commit_latency_seconds': 0.0,
'ceph.osd.perf.apply_latency_seconds': 0.0,
'ceph.osd.up': 1,
'ceph.osd.in': 1
},
'osd.9': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 1.0,
'ceph.osd.total_bytes': 5886633532000.0,
'ceph.osd.used_bytes': 369788800000.0,
'ceph.osd.avail_bytes': 5516844732000.0,
'ceph.osd.utilization_perc': 6.28,
'ceph.osd.variance': 0.955286,
'ceph.osd.pgs_count': 206,
'ceph.osd.perf.commit_latency_seconds': 0.0,
'ceph.osd.perf.apply_latency_seconds': 0.0,
'ceph.osd.up': 1,
'ceph.osd.in': 1
},
'osd.10': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 1.0,
'ceph.osd.total_bytes': 5886633532000.0,
'ceph.osd.used_bytes': 427759872000.0,
'ceph.osd.avail_bytes': 5458873660000.0,
'ceph.osd.utilization_perc': 7.27,
'ceph.osd.variance': 1.105044,
'ceph.osd.pgs_count': 218,
'ceph.osd.perf.commit_latency_seconds': 0.0,
'ceph.osd.perf.apply_latency_seconds': 0.0,
'ceph.osd.up': 1,
'ceph.osd.in': 1
},
'osd.11': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 1.0,
'ceph.osd.total_bytes': 5886633532000.0,
'ceph.osd.used_bytes': 404752640000.0,
'ceph.osd.avail_bytes': 5481880892000.0,
'ceph.osd.utilization_perc': 6.88,
'ceph.osd.variance': 1.045609,
'ceph.osd.pgs_count': 194,
'ceph.osd.perf.commit_latency_seconds': 0.0,
'ceph.osd.perf.apply_latency_seconds': 0.0,
'ceph.osd.up': 1,
'ceph.osd.in': 1
},
'osd.12': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 1.0,
'ceph.osd.total_bytes': 5886633532000.0,
'ceph.osd.used_bytes': 437294592000.0,
'ceph.osd.avail_bytes': 5449338940000.0,
'ceph.osd.utilization_perc': 7.43,
'ceph.osd.variance': 1.129676,
'ceph.osd.pgs_count': 230,
'ceph.osd.perf.commit_latency_seconds': 0.0,
'ceph.osd.perf.apply_latency_seconds': 0.0,
'ceph.osd.up': 1,
'ceph.osd.in': 1
},
'osd.13': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 1.0,
'ceph.osd.total_bytes': 5886633532000.0,
'ceph.osd.used_bytes': 388802944000.0,
'ceph.osd.avail_bytes': 5497830588000.0,
'ceph.osd.utilization_perc': 6.6,
'ceph.osd.variance': 1.004406,
'ceph.osd.pgs_count': 218,
'ceph.osd.perf.commit_latency_seconds': 0.0,
'ceph.osd.perf.apply_latency_seconds': 0.0,
'ceph.osd.up': 1,
'ceph.osd.in': 1
},
'osd.14': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 1.0,
'ceph.osd.total_bytes': 5886633532000.0,
'ceph.osd.used_bytes': 330687424000.0,
'ceph.osd.avail_bytes': 5555946108000.0,
'ceph.osd.utilization_perc': 5.62,
'ceph.osd.variance': 0.854274,
'ceph.osd.pgs_count': 190,
'ceph.osd.perf.commit_latency_seconds': 0.0,
'ceph.osd.perf.apply_latency_seconds': 0.0,
'ceph.osd.up': 1,
'ceph.osd.in': 1
},
'osd.15': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 1.0,
'ceph.osd.total_bytes': 5886633532000.0,
'ceph.osd.used_bytes': 405913792000.0,
'ceph.osd.avail_bytes': 5480719740000.0,
'ceph.osd.utilization_perc': 6.9,
'ceph.osd.variance': 1.048609,
'ceph.osd.pgs_count': 225,
'ceph.osd.perf.commit_latency_seconds': 0.0,
'ceph.osd.perf.apply_latency_seconds': 0.0,
'ceph.osd.up': 1,
'ceph.osd.in': 1
},
'osd.16': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 1.0,
'ceph.osd.total_bytes': 5886633532000.0,
'ceph.osd.used_bytes': 377519552000.0,
'ceph.osd.avail_bytes': 5509113980000.0,
'ceph.osd.utilization_perc': 6.41,
'ceph.osd.variance': 0.975257,
'ceph.osd.pgs_count': 192,
'ceph.osd.perf.commit_latency_seconds': 0.0,
'ceph.osd.perf.apply_latency_seconds': 0.0,
'ceph.osd.up': 1,
'ceph.osd.in': 1
},
'osd.17': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 1.0,
'ceph.osd.total_bytes': 5886633532000.0,
'ceph.osd.used_bytes': 362563072000.0,
'ceph.osd.avail_bytes': 5524070460000.0,
'ceph.osd.utilization_perc': 6.16,
'ceph.osd.variance': 0.936619,
'ceph.osd.pgs_count': 199,
'ceph.osd.perf.commit_latency_seconds': 0.0,
'ceph.osd.perf.apply_latency_seconds': 0.0,
'ceph.osd.up': 1,
'ceph.osd.in': 1
},
'osd.18': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 1.0,
'ceph.osd.total_bytes': 5886633532000.0,
'ceph.osd.used_bytes': 403252800000.0,
'ceph.osd.avail_bytes': 5483380732000.0,
'ceph.osd.utilization_perc': 6.85,
'ceph.osd.variance': 1.041734,
'ceph.osd.pgs_count': 229,
'ceph.osd.perf.commit_latency_seconds': 0.0,
'ceph.osd.perf.apply_latency_seconds': 0.0,
'ceph.osd.up': 1,
'ceph.osd.in': 1
},
'osd.19': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 1.0,
'ceph.osd.total_bytes': 5886633532000.0,
'ceph.osd.used_bytes': 416788096000.0,
'ceph.osd.avail_bytes': 5469845436000.0,
'ceph.osd.utilization_perc': 7.08,
'ceph.osd.variance': 1.076701,
'ceph.osd.pgs_count': 210,
'ceph.osd.perf.commit_latency_seconds': 0.0,
'ceph.osd.perf.apply_latency_seconds': 0.0,
'ceph.osd.up': 1,
'ceph.osd.in': 1
},
'osd.20': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 0.0,
'ceph.osd.total_bytes': 0.0,
'ceph.osd.used_bytes': 0.0,
'ceph.osd.avail_bytes': 0.0,
'ceph.osd.utilization_perc': 0.0,
'ceph.osd.variance': 0.0,
'ceph.osd.pgs_count': 0,
'ceph.osd.up': 0,
'ceph.osd.in': 0
},
'osd.21': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 0.0,
'ceph.osd.total_bytes': 0.0,
'ceph.osd.used_bytes': 0.0,
'ceph.osd.avail_bytes': 0.0,
'ceph.osd.utilization_perc': 0.0,
'ceph.osd.variance': 0.0,
'ceph.osd.pgs_count': 0,
'ceph.osd.up': 0,
'ceph.osd.in': 0
},
'osd.22': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 0.0,
'ceph.osd.total_bytes': 0.0,
'ceph.osd.used_bytes': 0.0,
'ceph.osd.avail_bytes': 0.0,
'ceph.osd.utilization_perc': 0.0,
'ceph.osd.variance': 0.0,
'ceph.osd.pgs_count': 0,
'ceph.osd.up': 0,
'ceph.osd.in': 0
},
'osd.23': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 0.0,
'ceph.osd.total_bytes': 0.0,
'ceph.osd.used_bytes': 0.0,
'ceph.osd.avail_bytes': 0.0,
'ceph.osd.utilization_perc': 0.0,
'ceph.osd.variance': 0.0,
'ceph.osd.pgs_count': 0,
'ceph.osd.up': 0,
'ceph.osd.in': 0
},
'osd.24': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 0.0,
'ceph.osd.total_bytes': 0.0,
'ceph.osd.used_bytes': 0.0,
'ceph.osd.avail_bytes': 0.0,
'ceph.osd.utilization_perc': 0.0,
'ceph.osd.variance': 0.0,
'ceph.osd.pgs_count': 0,
'ceph.osd.up': 0,
'ceph.osd.in': 0
},
'osd.25': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 0.0,
'ceph.osd.total_bytes': 0.0,
'ceph.osd.used_bytes': 0.0,
'ceph.osd.avail_bytes': 0.0,
'ceph.osd.utilization_perc': 0.0,
'ceph.osd.variance': 0.0,
'ceph.osd.pgs_count': 0,
'ceph.osd.up': 0,
'ceph.osd.in': 0
},
'osd.26': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 0.0,
'ceph.osd.total_bytes': 0.0,
'ceph.osd.used_bytes': 0.0,
'ceph.osd.avail_bytes': 0.0,
'ceph.osd.utilization_perc': 0.0,
'ceph.osd.variance': 0.0,
'ceph.osd.pgs_count': 0,
'ceph.osd.up': 0,
'ceph.osd.in': 0
},
'osd.27': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 0.0,
'ceph.osd.total_bytes': 0.0,
'ceph.osd.used_bytes': 0.0,
'ceph.osd.avail_bytes': 0.0,
'ceph.osd.utilization_perc': 0.0,
'ceph.osd.variance': 0.0,
'ceph.osd.pgs_count': 0,
'ceph.osd.up': 0,
'ceph.osd.in': 0
},
'osd.28': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 1.0,
'ceph.osd.total_bytes': 0.0,
'ceph.osd.used_bytes': 0.0,
'ceph.osd.avail_bytes': 0.0,
'ceph.osd.utilization_perc': 0.0,
'ceph.osd.variance': 0.0,
'ceph.osd.pgs_count': 0,
'ceph.osd.up': 0,
'ceph.osd.in': 1
},
'osd.29': {
'ceph.osd.crush_weight': 5.482391,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 1.0,
'ceph.osd.total_bytes': 0.0,
'ceph.osd.used_bytes': 0.0,
'ceph.osd.avail_bytes': 0.0,
'ceph.osd.utilization_perc': 0.0,
'ceph.osd.variance': 0.0,
'ceph.osd.pgs_count': 0,
'ceph.osd.up': 0,
'ceph.osd.in': 1
},
'osd.30': {
'ceph.osd.crush_weight': 0.232788,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 1.0,
'ceph.osd.total_bytes': 249955652000.0,
'ceph.osd.used_bytes': 6512248000.0,
'ceph.osd.avail_bytes': 243443404000.0,
'ceph.osd.utilization_perc': 2.61,
'ceph.osd.variance': 0.3962,
'ceph.osd.pgs_count': 1030,
'ceph.osd.perf.commit_latency_seconds': 0.0,
'ceph.osd.perf.apply_latency_seconds': 0.0,
'ceph.osd.up': 1,
'ceph.osd.in': 1
},
'osd.31': {
'ceph.osd.crush_weight': 0.232788,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 1.0,
'ceph.osd.total_bytes': 249955652000.0,
'ceph.osd.used_bytes': 5456072000.0,
'ceph.osd.avail_bytes': 244499580000.0,
'ceph.osd.utilization_perc': 2.18,
'ceph.osd.variance': 0.331943,
'ceph.osd.pgs_count': 1030,
'ceph.osd.perf.commit_latency_seconds': 0.0,
'ceph.osd.perf.apply_latency_seconds': 0.0,
'ceph.osd.up': 1,
'ceph.osd.in': 1
},
'osd.32': {
'ceph.osd.crush_weight': 0.232788,
'ceph.osd.depth': 2,
'ceph.osd.reweight': 0.0,
'ceph.osd.total_bytes': 0.0,
'ceph.osd.used_bytes': 0.0,
'ceph.osd.avail_bytes': 0.0,
'ceph.osd.utilization_perc': 0.0,
'ceph.osd.variance': 0.0,
'ceph.osd.pgs_count': 0,
'ceph.osd.up': 0,
'ceph.osd.in': 0
},
},
'summary_metrics': {
'ceph.osds.total_bytes': 118232581944000.0,
'ceph.osds.total_used_bytes': 7774823744000.0,
'ceph.osds.total_avail_bytes': 110457758200000.0,
'ceph.osds.avg_utilization_perc': 6.575872
},
'pool_metrics': {
'cephfs_metadata': {
'ceph.pool.dirty_objects_count': 66133,
'ceph.pool.max_avail_bytes': 236492341248,
'ceph.pool.objects_count': 66133,
'ceph.pool.quota_max_bytes': 0,
'ceph.pool.quota_max_objects': 0,
'ceph.pool.read_bytes': 1511467008,
'ceph.pool.read_io': 545015,
'ceph.pool.used_bytes': 47653204,
'ceph.pool.used_raw_bytes': 91122080,
'ceph.pool.utilization_perc': 0.000201459394257617,
'ceph.pool.total_bytes': 236539994452,
'ceph.pool.write_io': 1823016,
'ceph.pool.write_bytes': 15099714560
},
'cephfs_data': {
'ceph.pool.used_bytes': 1743163949040,
'ceph.pool.dirty_objects_count': 1287159,
'ceph.pool.max_avail_bytes': 52729787449344,
'ceph.pool.objects_count': 1287159,
'ceph.pool.utilization_perc': 0.0320005416319651,
'ceph.pool.quota_max_bytes': 0,
'ceph.pool.quota_max_objects': 0,
'ceph.pool.used_raw_bytes': 3419234369536,
'ceph.pool.read_io': 624295721,
'ceph.pool.read_bytes': 25137454158848,
'ceph.pool.total_bytes': 54472951398384,
'ceph.pool.write_io': 65020292,
'ceph.pool.write_bytes': 18614600047616
},
'.rgw.root': {
'ceph.pool.used_bytes': 1113,
'ceph.pool.dirty_objects_count': 4,
'ceph.pool.max_avail_bytes': 52953687785472,
'ceph.pool.objects_count': 4,
'ceph.pool.utilization_perc': 0.0000000000210183661709385,
'ceph.pool.quota_max_bytes': 0,
'ceph.pool.quota_max_objects': 0,
'ceph.pool.used_raw_bytes': 2226,
'ceph.pool.read_io': 4806,
'ceph.pool.read_bytes': 3280896,
'ceph.pool.total_bytes': 52953687786585,
'ceph.pool.write_io': 4,
'ceph.pool.write_bytes': 4096
},
'default.rgw.control': {
'ceph.pool.used_bytes': 0,
'ceph.pool.dirty_objects_count': 8,
'ceph.pool.max_avail_bytes': 52953687785472,
'ceph.pool.objects_count': 8,
'ceph.pool.utilization_perc': 0.0,
'ceph.pool.quota_max_bytes': 0,
'ceph.pool.quota_max_objects': 0,
'ceph.pool.used_raw_bytes': 0,
'ceph.pool.read_io': 0,
'ceph.pool.read_bytes': 0,
'ceph.pool.total_bytes': 52953687785472,
'ceph.pool.write_io': 0,
'ceph.pool.write_bytes': 0
},
'default.rgw.meta': {
'ceph.pool.used_bytes': 832,
'ceph.pool.dirty_objects_count': 6,
'ceph.pool.max_avail_bytes': 52953687785472,
'ceph.pool.objects_count': 6,
'ceph.pool.utilization_perc': 0.0000000000157118424567059,
'ceph.pool.quota_max_bytes': 0,
'ceph.pool.quota_max_objects': 0,
'ceph.pool.used_raw_bytes': 1664,
'ceph.pool.read_io': 220,
'ceph.pool.read_bytes': 204800,
'ceph.pool.total_bytes': 52953687786304,
'ceph.pool.write_io': 147,
'ceph.pool.write_bytes': 19456
},
'default.rgw.log': {
'ceph.pool.used_bytes': 0,
'ceph.pool.dirty_objects_count': 207,
'ceph.pool.max_avail_bytes': 52953687785472,
'ceph.pool.objects_count': 207,
'ceph.pool.utilization_perc': 0.0,
'ceph.pool.quota_max_bytes': 0,
'ceph.pool.quota_max_objects': 0,
'ceph.pool.used_raw_bytes': 0,
'ceph.pool.read_io': 21378199,
'ceph.pool.read_bytes': 21891063808,
'ceph.pool.total_bytes': 52953687785472,
'ceph.pool.write_io': 14245040,
'ceph.pool.write_bytes': 0
},
'default.rgw.buckets.index': {
'ceph.pool.used_bytes': 0,
'ceph.pool.dirty_objects_count': 1,
'ceph.pool.max_avail_bytes': 52953687785472,
'ceph.pool.objects_count': 1,
'ceph.pool.utilization_perc': 0.0,
'ceph.pool.quota_max_bytes': 0,
'ceph.pool.quota_max_objects': 0,
'ceph.pool.used_raw_bytes': 0,
'ceph.pool.read_io': 562,
'ceph.pool.read_bytes': 580608,
'ceph.pool.total_bytes': 52953687785472,
'ceph.pool.write_io': 237,
'ceph.pool.write_bytes': 0
},
'default.rgw.buckets.data': {
'ceph.pool.used_bytes': 95250,
'ceph.pool.dirty_objects_count': 6,
'ceph.pool.max_avail_bytes': 52953687785472,
'ceph.pool.objects_count': 6,
'ceph.pool.utilization_perc': 0.00000000179891153595516,
'ceph.pool.quota_max_bytes': 0,
'ceph.pool.quota_max_objects': 0,
'ceph.pool.used_raw_bytes': 190500,
'ceph.pool.read_io': 162,
'ceph.pool.read_bytes': 291840,
'ceph.pool.total_bytes': 52953687880722,
'ceph.pool.write_io': 427,
'ceph.pool.write_bytes': 602112
},
'kubernetes': {
'ceph.pool.used_bytes': 4859,
'ceph.pool.dirty_objects_count': 8,
'ceph.pool.max_avail_bytes': 79430529581056,
'ceph.pool.objects_count': 8,
'ceph.pool.utilization_perc': 0.0000000000611729523311855,
'ceph.pool.quota_max_bytes': 0,
'ceph.pool.quota_max_objects': 0,
'ceph.pool.used_raw_bytes': 8503,
'ceph.pool.read_io': 164,
'ceph.pool.read_bytes': 133120,
'ceph.pool.total_bytes': 79430529585915,
'ceph.pool.write_io': 90892,
'ceph.pool.write_bytes': 126869424128
},
'volumes': {
'ceph.pool.used_bytes': 0,
'ceph.pool.dirty_objects_count': 0,
'ceph.pool.max_avail_bytes': 79430529581056,
'ceph.pool.objects_count': 0,
'ceph.pool.utilization_perc': 0.0,
'ceph.pool.quota_max_bytes': 0,
'ceph.pool.quota_max_objects': 0,
'ceph.pool.used_raw_bytes': 0,
'ceph.pool.read_io': 0,
'ceph.pool.read_bytes': 0,
'ceph.pool.total_bytes': 79430529581056,
'ceph.pool.write_io': 0,
'ceph.pool.write_bytes': 0
},
'benchmark': {
'ceph.pool.used_bytes': 37906503270,
'ceph.pool.dirty_objects_count': 33213250,
'ceph.pool.max_avail_bytes': 79430529581056,
'ceph.pool.objects_count': 33213250,
'ceph.pool.utilization_perc': 0.000477000745676893,
'ceph.pool.quota_max_bytes': 0,
'ceph.pool.quota_max_objects': 0,
'ceph.pool.used_raw_bytes': 66925428736,
'ceph.pool.read_io': 2261777,
'ceph.pool.read_bytes': 3829217280,
'ceph.pool.total_bytes': 79468436084326,
'ceph.pool.write_io': 33280403,
'ceph.pool.write_bytes': 62774775808
}
},
'mon_metrics': {
},
'test_ceph_cmd_lens': {
'df detail json': 2,
'status json': 11,
'status': 842,
'osd df json': 3,
'osd perf json': 1,
'osd dump json': 24,
'osd pool stats json': 11
},
'test_check_call_count': 578
}