OpenTelemetry .NET应用程序-收集器收集度量缓慢

xqnpmsa8  于 2023-02-26  发布在  .NET
关注(0)|答案(1)|浏览(195)

我正在运行一个简单的POC,以便在.net 6 web API中使用开放式遥测。我正在尝试使用.net应用程序中的Otlp导出器将指标发送到收集器。Prometheus正在很好地抓取收集器公开的端点。
然而,指标的初始导出需要很长时间。它似乎每60秒发送一次指标。我真的更愿意将其设置为更合理的5-15秒左右,以使它演示得更好。
我尝试了简单的导出器,但没有运气。我尝试将批量导入器设置为非常低的MaxQueueSize、ScheduledDelayMilliseconds和ExporterTimeoutMilliseconds。
在.net应用程序端启用ConsoleExporter时,指标似乎会在预期的默认值10秒内到达。因此,可能是收集器在指标端点上呈现导出之前进行某种累积的问题?我没有在收集器中使用批处理器,所以我不确定它为什么会这样做。
当我在API本身上使用PrometheusExporter / scrape端点时,也没有遇到任何缓慢的问题,只有当我尝试使用Otel Exporter导出指标时才会出现这种情况。
有趣的是,我还配置了OTLP导出器用于跟踪,我几乎可以立即将所有结果导入收集器/ jaeger。
我目前使用的是最新的Open Telemetry稳定包(1.32.0)。我正在使用以下Docker图像作为采集器:otel/open遥测-采集器-控件:0.42.0
此处提供代码:https://github.com/MetalHexx/OpenTelemetryDotNetPoc
缩写启动代码:

services.AddOpenTelemetryMetrics(builder =>
{
     builder
         .AddMeter(App_Source)
         .SetResourceBuilder(resource!)
         .AddAspNetCoreInstrumentation()
         .AddOtlpExporter(options =>
         {
             options.Endpoint = new Uri("http://poc-collector:4319/v1/metrics");
             options.Protocol = OtlpExportProtocol.HttpProtobuf;
             options.ExportProcessorType = ExportProcessorType.Simple;
         });
});

简化的收集器配置:

receivers:
  otlp:
    protocols:
      http:
        endpoint: 0.0.0.0:4319

exporters:
  prometheus:
    endpoint: "0.0.0.0:8889"
    namespace: poc 

  logging:
    loglevel: debug

service:
  telemetry:
    logs:
      level: "debug"
  extensions: []
  pipelines:
    metrics:
      receivers: [otlp]
      exporters: [logging, prometheus]
t9aqgxwy

t9aqgxwy1#

我找到了解决办法,按照规范,确实默认是60秒。
解决方法是使用OTEL_METRIC_EXPORT_INTERVAL环境变量。
在.net SDK中,您可以通过添加metricReaderOptions参数来指定导出间隔,然后设置导出间隔的毫秒数:

.AddOtlpExporter((exporterOptions, metricReaderOptions) =>
{
     exporterOptions.Endpoint = new Uri("http://poc-collector:4319/v1/metrics"); 
     exporterOptions.Protocol = OtlpExportProtocol.HttpProtobuf;
     exporterOptions.ExportProcessorType = ExportProcessorType.Simple;
metricReaderOptions.PeriodicExportingMetricReaderOptions.ExportIntervalMilliseconds = 5000;

})

归功于Github上的utpilla:https://github.com/open-telemetry/opentelemetry-dotnet/issues/4026#issuecomment-1363411811

相关问题