c# - 如何从 C# 向 Jaeger 发送跟踪信息?
问题描述
我正在尝试使用Jaeger包从 C# 应用程序向 Jaeger 发送跟踪。
jaeger-client-csharp 文档中没有最小的示例,但是根据我的阅读,我认为这应该可行。
using Jaeger;
using Jaeger.Samplers;
namespace jaegertest
{
class Program
{
static void Main(string[] args)
{
var tracer = new Tracer.Builder("my-service")
.WithSampler(new ConstSampler(true))
.Build();
using (var scope = tracer.BuildSpan("foo").StartActive(true))
{
System.Threading.Thread.Sleep(1000);
}
}
}
}
我正在运行 jaeger-all-in-one.exe,但是当我运行此代码时,没有任何新痕迹的迹象。我尝试手动配置采样器、发送器、报告器等,但我尝试过的没有任何效果。我需要添加什么才能让我的痕迹出现在 Jaeger 中?
解决方案
这是我能找到的最简单的工作示例。
using Jaeger;
using Jaeger.Reporters;
using Jaeger.Samplers;
using Jaeger.Senders.Thrift;
namespace jaegertest
{
class Program
{
static void Main(string[] args)
{
var tracer = new Tracer.Builder("my-service")
.WithSampler(new ConstSampler(true))
.WithReporter(new RemoteReporter.Builder()
.WithSender(new UdpSender())
.Build())
.Build();
using (var scope = tracer.BuildSpan("foo").StartActive(true))
{
System.Threading.Thread.Sleep(1000);
}
tracer.Dispose();
}
}
}
这是一个更现实的示例,它从配置构建跟踪器。
using Jaeger;
using Jaeger.Samplers;
using Jaeger.Senders;
using Jaeger.Senders.Thrift;
using Microsoft.Extensions.Logging;
namespace jaegertest
{
class Program
{
static void Main(string[] args)
{
var loggerFactory = new LoggerFactory();
var samplerConfiguration = new Configuration.SamplerConfiguration(loggerFactory)
.WithType(ConstSampler.Type)
.WithParam(1);
var senderResolver = new SenderResolver(loggerFactory)
.RegisterSenderFactory<ThriftSenderFactory>();
var senderConfiguration = new Configuration.SenderConfiguration(loggerFactory)
.WithSenderResolver(senderResolver);
var reporterConfiguration = new Configuration.ReporterConfiguration(loggerFactory)
.WithSender(senderConfiguration)
.WithLogSpans(true);
var tracer = (Tracer)new Configuration("my-service", loggerFactory)
.WithSampler(samplerConfiguration)
.WithReporter(reporterConfiguration)
.GetTracer();
using (var scope = tracer.BuildSpan("foo").StartActive(true))
{
System.Threading.Thread.Sleep(1000);
}
tracer.Dispose();
}
}
}
推荐阅读
- types - Rust 中 itertools::process_results() 的回调类型签名应该是什么?
- formik - 是的,使用一个字段进行验证,但有两个可能的选项 (OR)
- r - 尝试将变量制成表格时,如何阻止出现的观察次数?
- swift - 我怎么知道加速度计何时静止?我在 Swift 中通过蓝牙使用外部加速度计
- android - 如何在 Materialtextinput Android 中结束可绘制后添加文本
- android - Kotlin 是如何知道 applicationContext 来自 getApplicationContext() 的?
- python - 在 Python 中自动从特定网站下载 cdf 文件
- database - Neo4j 根据相似度按供应商按地区创建排名
- java - 类应该为其依赖项定义 getter 吗?
- azure-ad-b2c - 是否可以在自定义 B2C 策略中在运行时参数化 ClaimsProvider 和 TechnicalProfile?