发布于 2022-05-24 20:10:47
当问到这个问题时,OpenTelemetry标准和实现还很年轻。即使在我写这个答案的时候,有些事情还没有完全实现或解决,但是TLDR;是的,它是可能的,它的工作原理和它的史诗!
你需要明白,在可观察范式中有三件关键的事情。追踪原木和计量学。所有这些都是分开的、工作的和单独实施的。
到目前为止,我已经学习到在.NET框架和AspNetCore中配置它的关键发现是相同的,除了您如何配置它。
跟踪和度量与SDK构建器一起工作,日志记录使用ILoggerProvider模式
这些示例使用非DI方法进行手动配置。您可以使用
Contrib.Hosting并阅读DI方法的指南。
跟踪
System.Diagnostics.Activity.DefaultIdFormat = System.Diagnostics.ActivityIdFormat.W3C;默认情况下,在您的全局NetFramework应用程序中,在NetCore中,这是必需的。
var traceProviderBuilder = Sdk.CreateTracerProviderBuilder();获取构建器设置。
traceProviderBuilder
.AddSource("*")
.SetResourceBuilder(
ResourceBuilder.CreateDefault()
.AddService(ResourceNameHelper.ServiceName)
.AddAttributes(otelAttributes)
.AddTelemetrySdk());这里发生了几件事
new KeyValuePair<string, object>("deployment.environment", environmentName)的KeyValue集合,因此您可以在Elastics中使用环境下拉列表这是所需的核心配置,因此您可以订阅您自己的跟踪,但是您希望随后添加诸如
AddAspNetInstrumentation(options => { options.RecordException = true; }).AddHttpClientInstrumentation((httpConfig) => { httpConfig.RecordException = true; })AddSqlClientInstrumentation((sqlConfig) => { sqlConfig.EnableConnectionLevelAttributes = true; sqlConfig.SetDbStatement = true; }).AddAWSInstrumentation()现在是重要的部分,OtlpExporter
traceProviderBuilder.AddOtlpExporter(options)
传递你的选择
otlpExporter.Protocol = OtlpExportProtocol.Grpc;
otlpExporter.Endpoint = new Uri(otlpEndpoint);
otlpExporter.Headers = otlpHeaders;标题是您需要从Kibana获得的承载令牌。
最后你建造它
.Build()
当像这样手动配置时,您需要管理SDK的处理。这就是建议使用DI的原因。
哎呀..。这是相当多的配置在那里进行。但是,一旦你以最基本的形式运行,你就会开始看到痕迹出现在Elastics的可观察部分。当您第一次这样做时,您需要给Elastics一些时间来整理它的索引和跟踪流(在云版本中,所有这些都是自动完成的,前提是在该页面上启用了新版本的APM --没有提到OpenTelemtry配置。只需复制并粘贴它提供给您的URL和键)
度量
计量学也是如此。你必须再做一次,但要用
_meterProvider = Sdk.CreateMeterProviderBuilder().AddRuntimeMetrics()
然后是所有的工具和OtlpExporter选项。
在框架中,Metrics在运行时度量上是相当有限的,但是在AspNetCore中它们是很不错的。
测井
这很容易按照Dotnet OpenTelemetry文档来实现,但到今天为止还有点问题(希望它在1.3版中是稳定的)
对于长时间的帖子,我很抱歉,但我希望这能对人们有所帮助,因为我自己在Elastics、OpenTelemetry或Dotnet页面上的文档很少甚至没有。
https://stackoverflow.com/questions/70909613
复制相似问题