如何通过 otlp http/grpc 导出器在 C++ opentelemetry 中使用计量仪器?

问题描述 投票:0回答:1

在我的 C++ 项目中,我使用 opentelemetry (v1.14.2) 来收集跟踪和日志。现在我想使用仪表仪器(双可观察仪表)和 otlp http/grpc 导出器添加指标集合。我阅读了官方文档和许多其他资源,但没有找到任何仪表使用示例。

我尝试了以下代码:

void InitMetrics(const std::string& name)
{
  opentelemetry::exporter::otlp::OtlpHttpMetricExporterOptions opts;
  opts.url = "http://ip:port/v1/metrics";
  auto exporter = std::make_unique<otlpexportmetrics::OtlpHttpMetricExporter>(opts);

  metric_sdk::PeriodicExportingMetricReaderOptions options;
  options.export_interval_millis = std::chrono::milliseconds(1000);
  options.export_timeout_millis = std::chrono::milliseconds(500);
  std::shared_ptr<metric_sdk::MetricReader> reader{
      new metric_sdk::PeriodicExportingMetricReader(std::move(exporter),
                                                    options)};
  auto provider = std::shared_ptr<metrics_api::MeterProvider>(
      new metric_sdk::MeterProvider());
  auto p = std::static_pointer_cast<metric_sdk::MeterProvider>(provider);
  p->AddMetricReader(std::move(reader));
}

void GaugeExample(const std::string& name)
{
  std::string gauge_name = name + "_gauge";
  auto meter = metrics_api::Provider::GetMeterProvider()->GetMeter(name+"_meter", "1.0.0", "");
  auto gauge = meter->CreateDoubleObservableGauge(gauge_name, "pressure", "MPa");
  gauge->AddCallback([](opentelemetry::metrics::ObserverResult res, void* state){
                       nostd::shared_ptr<opentelemetry::metrics::ObserverResultT<double>> obs;
                       obs->Observe(5.6, {{"service.name", "example"}});
                       res.emplace<nostd::shared_ptr<opentelemetry::metrics::ObserverResultT<double>>>(obs);
                       }, nullptr);
}

int main()
{
  InitMetrics("example");
  GaugeExample("example");
  std::this_thread::sleep_for(std::chrono::seconds(20));
  std::shared_ptr<metrics_api::MeterProvider> none;
  metrics_api::Provider::SetMeterProvider(none);
  return 0;
}

我用 otlp 收集器设置了 SigNoz,并希望在那里查看指标(日志和跟踪导出良好,端点 100% 正确),但我的指标甚至没有进入 otlp 收集器,并且在执行我的程序时出现以下警告:

[Warning] File: /home/user/vcpkg/buildtrees/opentelemetry-cpp/src/v1.14.2-8c1c1d9b6b.clean/sdk/src/metrics/metric_reader.cc:37 MetricReader::Collect invoked while Shutdown in progress!

有人能给我任何仪表使用的工作示例吗?

c++17 metrics open-telemetry
1个回答
0
投票

Gauge 指标是可观察指标,它与 ObservableCounter 有点相似,所以这可能会有所帮助(observable_counter_example): https://github.com/open-telemetry/opentelemetry-cpp/blob/main/examples/common/metrics_foo_library/foo_library.cc

© www.soinside.com 2019 - 2024. All rights reserved.