【发布时间】:2019-05-03 03:36:37
【问题描述】:
为了登录我们的微服务应用程序,我们只需登录到 stdout/console,docker logging 驱动程序会处理并将这些日志重定向到某个地方,例如gelf/logstash、fluentd 等。基本上,我们遵循12 factor 日志记录指南。这意味着开发应用程序代码的开发人员不需要了解底层日志记录解决方案(例如 Elasticsearch、Graylog、Splunk 等)——这完全是一个操作/配置问题。理论上,我们应该能够在不更改任何代码的情况下更改底层日志记录解决方案。
我想要类似的跟踪信息,我的研究使我选择了 OpenTracing。开发人员不需要了解底层跟踪解决方案(例如 Jaeger、Zipkin、Elastic APM 等)和日志记录;理论上,我们应该能够在不更改任何代码的情况下更改底层跟踪解决方案。
我已经使用 opentracing/opentracing-csharp 和 jaegertracing/jaeger-client-csharp 库成功地获得了一个 .NET 核心 POC 向 Jaeger 发送跟踪信息。
我仍在尝试完全了解 OpenTracing,但我想知道是否有一种方法可以将跟踪发送到符合 OpenTracing 的 API,而不必硬依赖 Jaeger 等特定解决方案(即jaeger-client-csharp 库)。根据我的理解,OpenTracing 只是一个标准。难道我不需要 jaeger-client-csharp 库就可以使用一些采样选项配置 OpenTracing 端点吗?还是 jaeger-client-csharp 实际上不是 Jaeger 特定的,实际上可以将跟踪发送到任何 OpenTracing API?
下图示例配置,使用了 jaeger 客户端库:
services.AddOpenTracing();
if (appSettings.TracerEnabled)
{
services.AddSingleton(serviceProvider =>
{
var loggerFactory = new LoggerFactory();
var config = Jaeger.Configuration.FromEnv(loggerFactory);
var tracer = config.GetTracer();
GlobalTracer.Register(tracer);
return tracer;
});
}
【问题讨论】:
标签: .net-core microservices opentracing 12factor jaeger