我正在运行一个简单的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]
1条答案
按热度按时间t9aqgxwy1#
我找到了解决办法,按照规范,确实默认是60秒。
解决方法是使用OTEL_METRIC_EXPORT_INTERVAL环境变量。
在.net SDK中,您可以通过添加metricReaderOptions参数来指定导出间隔,然后设置导出间隔的毫秒数:
归功于Github上的utpilla:https://github.com/open-telemetry/opentelemetry-dotnet/issues/4026#issuecomment-1363411811