README.md

metrics

  • 编译
  • [使用 SDK](#使用 SDK)
    • [初始化从 so 中加载 exporter](#初始化从 so 中加载 exporter)
    • [初始化后创建 gauge 采集](#初始化后创建 gauge 采集)

编译

查看编译帮助

# bash build.sh --help

使用 SDK

导出

用户通过设置 ExporterOptions 参数设置数据导出的模式

单条导出Simple

数据采集完成后立即导出

批量导出Batch

  • 导出条数batchSize: metrics 数据缓存到一定数量时全部导出
  • 隔导出时间间隔batchIntervalSec: 每到 x 秒会导出所有数据,及时没有达到导出条数

初始化从 so 中加载 exporter

#include "metrics/api/provider.h"
#include "metrics/plugin/dynamic_library_handle_unix.h"
#include "metrics/plugin/dynamic_load.h"
#include "metrics/sdk/immediately_export_processor.h"
#include "metrics/sdk/meter_provider.h"

namespace MetricsApi = observability::api::metrics;
namespace MetricsExporter = observability::exporters::metrics;
namespace MetricsSDK = observability::sdk::metrics;

// 初始化MeterProvider
auto mp = std::make_shared<MetricsSDK::MeterProvider>();

// 创建ostream-exporter并设为导出器并设置batch导出模式,目前已实现:ostream-exporter/file-exporter/pushgateway-exporter
std::string error;
auto exporter = observability::plugin::metrics::LoadExporterFromLibrary(GetLibPath("libobservability-metrics-exporter-ostream.so"), "", error);

MetricsSDK::ExportConfigs exportConfigs;
exportConfigs.exporterName = "batchExporter";
exportConfigs.exporterName = MetricsSDK::ExportMode::BATCH;
auto processor = std::make_unique<MetricsSDK::BatchExportProcessor>(std::move(exporter), exportConfigs);
mp->AddMetricProcessor(std::move(processor));
MetricsApi::Provider::SetMeterProvider(mp);

初始化后创建 gauge 采集

单次上报数据,创一个名为"cpu_usage" 的 gauge 数据

auto provider = MetricsApi::Provider::GetMeterProvider();
auto meter = provider->GetMeter("cpu_usage");
auto cpuGauge = meter->CreateDoubleGauge("cpu_usage", "CPU Usage", "%");

MetricsSDK::PointLabels labels;
labels.emplace_back(std::make_pair("node_id", "127.0.0.1"));
double val = MockGetCpuUsage;
cpuGauge->Set(val, labels);

周期性上报数据,创建一个1s定期上报的名为 "interval_1_disk_usage"的 Counter 采集

// 带回调模式,每次采集器时回调值写入相应的度量中。
auto diskGauge = meter->CreateUint64ObservableCounter("interval_1_disk_usage", "Disk Usage", "MB", 10,
    [](observability::metrics::ObserveResult ob_res) {
        if (std::holds_alternative<std::shared_ptr<observability::metrics::ObserveResultT<uint64_t>>>(ob_res)) {
            uint64_t value = MockGetDiskUsage();
            std::get<std::shared_ptr<observability::metrics::ObserveResultT<Uint64>>>(ob_res)->Observe(value);
        }
    });