X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=ceph%2Fsrc%2Fexporter%2FDaemonMetricCollector.cc;h=f4f7240fcfcb2fc384f90972aa5abba855d910da;hb=05a536ef04248702f72713fd2fe81cb055624784;hp=88e53f573464de0cb25258e4aa17084ea7f9fecb;hpb=ab27109dd2e88c6e1082a346b3be8444697297c6;p=ceph.git diff --git a/ceph/src/exporter/DaemonMetricCollector.cc b/ceph/src/exporter/DaemonMetricCollector.cc index 88e53f573..f4f7240fc 100644 --- a/ceph/src/exporter/DaemonMetricCollector.cc +++ b/ceph/src/exporter/DaemonMetricCollector.cc @@ -121,40 +121,46 @@ void DaemonMetricCollector::dump_asok_metrics() { for (auto &perf_group_item : counter_schema) { std::string perf_group = {perf_group_item.key().begin(), perf_group_item.key().end()}; - json_object perf_group_object = perf_group_item.value().as_object(); - auto counters = perf_group_object["counters"].as_object(); - auto counters_labels = perf_group_object["labels"].as_object(); - auto counters_values = - counter_dump[perf_group].as_object()["counters"].as_object(); - labels_t labels; - - for(auto &label: counters_labels) { - std::string label_key = {label.key().begin(), label.key().end()}; - labels[label_key] = quote(label.value().as_string().c_str()); - } - for (auto &counter : counters) { - json_object counter_group = counter.value().as_object(); - if (counter_group["priority"].as_int64() < prio_limit) { - continue; - } - std::string counter_name_init = {counter.key().begin(), counter.key().end()}; - std::string counter_name = perf_group + "_" + counter_name_init; - promethize(counter_name); - - if (counters_labels.empty()) { - auto labels_and_name = get_labels_and_metric_name(daemon_name, counter_name); - labels = labels_and_name.first; - counter_name = labels_and_name.second; + json_array perf_group_schema_array = perf_group_item.value().as_array(); + json_array perf_group_dump_array = counter_dump[perf_group].as_array(); + for (auto schema_itr = perf_group_schema_array.begin(), + dump_itr = perf_group_dump_array.begin(); + schema_itr != perf_group_schema_array.end() && + dump_itr != perf_group_dump_array.end(); + ++schema_itr, ++dump_itr) { + auto counters = schema_itr->at("counters").as_object(); + auto counters_labels = schema_itr->at("labels").as_object(); + auto counters_values = dump_itr->at("counters").as_object(); + labels_t labels; + + for (auto &label: counters_labels) { + std::string label_key = {label.key().begin(), label.key().end()}; + labels[label_key] = quote(label.value().as_string().c_str()); } - // For now this is only required for rgw multi-site metrics - auto multisite_labels_and_name = add_fixed_name_metrics(counter_name); - if (!multisite_labels_and_name.first.empty()) { - labels.insert(multisite_labels_and_name.first.begin(), multisite_labels_and_name.first.end()); - counter_name = multisite_labels_and_name.second; + for (auto &counter : counters) { + json_object counter_group = counter.value().as_object(); + if (counter_group["priority"].as_int64() < prio_limit) { + continue; + } + std::string counter_name_init = {counter.key().begin(), counter.key().end()}; + std::string counter_name = perf_group + "_" + counter_name_init; + promethize(counter_name); + + if (counters_labels.empty()) { + auto labels_and_name = get_labels_and_metric_name(daemon_name, counter_name); + labels = labels_and_name.first; + counter_name = labels_and_name.second; + } + // For now this is only required for rgw multi-site metrics + auto multisite_labels_and_name = add_fixed_name_metrics(counter_name); + if (!multisite_labels_and_name.first.empty()) { + labels.insert(multisite_labels_and_name.first.begin(), multisite_labels_and_name.first.end()); + counter_name = multisite_labels_and_name.second; + } + labels.insert({"ceph_daemon", quote(daemon_name)}); + auto perf_values = counters_values.at(counter_name_init); + dump_asok_metric(counter_group, perf_values, counter_name, labels); } - labels.insert({"ceph_daemon", quote(daemon_name)}); - auto perf_values = counters_values.at(counter_name_init); - dump_asok_metric(counter_group, perf_values, counter_name, labels); } } std::string config_show = @@ -348,19 +354,11 @@ void DaemonMetricCollector::dump_asok_metric(json_object perf_info, if (type & PERFCOUNTER_LONGRUNAVG) { int64_t count = perf_values.as_object()["avgcount"].as_int64(); - add_metric(builder, count, name + "_count", description, metric_type, + add_metric(builder, count, name + "_count", description + " Count", "counter", labels); json_value sum_value = perf_values.as_object()["sum"]; - add_double_or_int_metric(builder, sum_value, name + "_sum", description, + add_double_or_int_metric(builder, sum_value, name + "_sum", description + " Total", metric_type, labels); - } else if (type & PERFCOUNTER_TIME) { - if (perf_values.is_int64()) { - double value = perf_values.as_int64() / 1000000000.0f; - add_metric(builder, value, name, description, metric_type, labels); - } else if (perf_values.is_double()) { - double value = perf_values.as_double() / 1000000000.0f; - add_metric(builder, value, name, description, metric_type, labels); - } } else { add_double_or_int_metric(builder, perf_values, name, description, metric_type, labels);