首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenTelemetry向无弹性搜索的弹性搜索输出

OpenTelemetry向无弹性搜索的弹性搜索输出
EN

Stack Overflow用户
提问于 2022-01-29 20:50:54
回答 1查看 3.2K关注 0票数 3

我希望使用OpenTelemetry将跟踪/度量数据导出到弹性搜索,但我更倾向于避免弹性APM。有可能吗?但是,Opentelememetro肋骨存储库显然表明这是可能的,但是,我没有在elastic.co文档中找到任何东西。顺便说一句,openapm.io意味着请看这里,OpenTelemetry可以导出到弹性节拍(这是非常理想的),但我还是没有在Elastic.co文档中找到任何东西。

EN

回答 1

Stack Overflow用户

发布于 2022-05-24 20:10:47

当问到这个问题时,OpenTelemetry标准和实现还很年轻。即使在我写这个答案的时候,有些事情还没有完全实现或解决,但是TLDR;是的,它是可能的,它的工作原理和它的史诗!

我经常在这里找到一个很好的参考资料

你需要明白,在可观察范式中有三件关键的事情。追踪原木和计量学。所有这些都是分开的、工作的和单独实施的。

到目前为止,我已经学习到在.NET框架和AspNetCore中配置它的关键发现是相同的,除了您如何配置它。

跟踪和度量与SDK构建器一起工作,日志记录使用ILoggerProvider模式

这些示例使用非DI方法进行手动配置。您可以使用Contrib.Hosting并阅读DI方法的指南。

跟踪

代码语言:javascript
复制
System.Diagnostics.Activity.DefaultIdFormat = System.Diagnostics.ActivityIdFormat.W3C;

默认情况下,在您的全局NetFramework应用程序中,在NetCore中,这是必需的。

代码语言:javascript
复制
var traceProviderBuilder = Sdk.CreateTracerProviderBuilder();

获取构建器设置。

代码语言:javascript
复制
traceProviderBuilder
    .AddSource("*")
    .SetResourceBuilder(
        ResourceBuilder.CreateDefault()
            .AddService(ResourceNameHelper.ServiceName)
            .AddAttributes(otelAttributes)
            .AddTelemetrySdk());

这里发生了几件事

  • AddSource("*")对所有事件(System.Diagnostics)都使用SDK --我使用它是为了便于使用
  • SetResourceBuilder用于设置服务的名称,以便Elastics可以将其分组。
  • OtelAttributes是一个包含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)

传递你的选择

代码语言:javascript
复制
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页面上的文档很少甚至没有。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70909613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档