没有 ASP 的 Opentracing c#?
Opentracing c# without ASP?
这里我有点疑惑。但是你不应该能够在不涉及 ASP 的情况下启动基于 c# 的 Opentracing 客户端吗?许多示例总是以某种形式涉及 ASP。这个不用ASP能解决吗?
ASP.NET 不需要核心。几乎所有示例都使用 ASP.NET Core 的原因是,这就是 OpenTelemetry(及其前身 OpenTracing 和 OpenCensus)的用途——为(微)服务提供分布式跟踪、日志记录和指标。在绝大多数情况下,这些服务使用 HTTP 和 gRPC,即使它只是为了公开一个控制端点。
在 OpenTelemetry 中,applications/services 发布日志、跟踪和指标。这些可以通过导出器发布到 Jaeger、Zipkin、Elastic、Prometheus 等,或者最好由收集器实例收集,该实例再次通过导出器将它们转发到监控服务。
OpenTelemetry .NET repo explains how OpenTelemetry is used in .NET Core through the native Activity and ActivitySource classes and listeners. It contains a folder with Console examples.
日志记录
Logging Getting Started page 根本没有提到 ASP.NET 核心,它显示了一个控制台应用程序。代码只是:
using Microsoft.Extensions.Logging;
using OpenTelemetry.Logs;
public class Program
{
public static void Main()
{
using var loggerFactory = LoggerFactory.Create(builder =>
{
builder.AddOpenTelemetry(options => options
.AddConsoleExporter());
});
var logger = loggerFactory.CreateLogger<Program>();
logger.LogInformation("Hello from {name} {price}.", "tomato", 2.99);
}
}
在 .NET 6 中,这将归结为:
using Microsoft.Extensions.Logging;
using OpenTelemetry.Logs;
using var loggerFactory = LoggerFactory.Create(builder =>
{
builder.AddOpenTelemetry(options => options
.AddConsoleExporter());
});
var logger = loggerFactory.CreateLogger<Program>();
logger.LogInformation("Hello from {name} {price}.", "tomato", 2.99);
对于日志记录,OpenTelemetry 通过 .NET Core 日志记录接口工作。如果您使用 ILogger
,您已经可以使用 OpenTelemetry。
追踪
Tracing Getting Started 页面还使用控制台应用程序并使用内置的 ActivitySource 和 Activity 类.
- ActivitySource对应一个OpenTelemetry Tracer
- Activity对应Span
示例是一个非常短的控制台应用程序:
using System.Diagnostics;
using OpenTelemetry;
using OpenTelemetry.Trace;
public class Program
{
private static readonly ActivitySource MyActivitySource = new ActivitySource(
"MyCompany.MyProduct.MyLibrary");
public static void Main()
{
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.SetSampler(new AlwaysOnSampler())
.AddSource("MyCompany.MyProduct.MyLibrary")
.AddConsoleExporter()
.Build();
using (var activity = MyActivitySource.StartActivity("SayHello"))
{
activity?.SetTag("foo", 1);
activity?.SetTag("bar", "Hello, World!");
activity?.SetTag("baz", new int[] { 1, 2, 3 });
}
}
}
再次重申,唯一特定于 OpenTelemetry 的是侦听器和导出器。
这里我有点疑惑。但是你不应该能够在不涉及 ASP 的情况下启动基于 c# 的 Opentracing 客户端吗?许多示例总是以某种形式涉及 ASP。这个不用ASP能解决吗?
ASP.NET 不需要核心。几乎所有示例都使用 ASP.NET Core 的原因是,这就是 OpenTelemetry(及其前身 OpenTracing 和 OpenCensus)的用途——为(微)服务提供分布式跟踪、日志记录和指标。在绝大多数情况下,这些服务使用 HTTP 和 gRPC,即使它只是为了公开一个控制端点。
在 OpenTelemetry 中,applications/services 发布日志、跟踪和指标。这些可以通过导出器发布到 Jaeger、Zipkin、Elastic、Prometheus 等,或者最好由收集器实例收集,该实例再次通过导出器将它们转发到监控服务。
OpenTelemetry .NET repo explains how OpenTelemetry is used in .NET Core through the native Activity and ActivitySource classes and listeners. It contains a folder with Console examples.
日志记录
Logging Getting Started page 根本没有提到 ASP.NET 核心,它显示了一个控制台应用程序。代码只是:
using Microsoft.Extensions.Logging;
using OpenTelemetry.Logs;
public class Program
{
public static void Main()
{
using var loggerFactory = LoggerFactory.Create(builder =>
{
builder.AddOpenTelemetry(options => options
.AddConsoleExporter());
});
var logger = loggerFactory.CreateLogger<Program>();
logger.LogInformation("Hello from {name} {price}.", "tomato", 2.99);
}
}
在 .NET 6 中,这将归结为:
using Microsoft.Extensions.Logging;
using OpenTelemetry.Logs;
using var loggerFactory = LoggerFactory.Create(builder =>
{
builder.AddOpenTelemetry(options => options
.AddConsoleExporter());
});
var logger = loggerFactory.CreateLogger<Program>();
logger.LogInformation("Hello from {name} {price}.", "tomato", 2.99);
对于日志记录,OpenTelemetry 通过 .NET Core 日志记录接口工作。如果您使用 ILogger
,您已经可以使用 OpenTelemetry。
追踪
Tracing Getting Started 页面还使用控制台应用程序并使用内置的 ActivitySource 和 Activity 类.
- ActivitySource对应一个OpenTelemetry Tracer
- Activity对应Span
示例是一个非常短的控制台应用程序:
using System.Diagnostics;
using OpenTelemetry;
using OpenTelemetry.Trace;
public class Program
{
private static readonly ActivitySource MyActivitySource = new ActivitySource(
"MyCompany.MyProduct.MyLibrary");
public static void Main()
{
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.SetSampler(new AlwaysOnSampler())
.AddSource("MyCompany.MyProduct.MyLibrary")
.AddConsoleExporter()
.Build();
using (var activity = MyActivitySource.StartActivity("SayHello"))
{
activity?.SetTag("foo", 1);
activity?.SetTag("bar", "Hello, World!");
activity?.SetTag("baz", new int[] { 1, 2, 3 });
}
}
}
再次重申,唯一特定于 OpenTelemetry 的是侦听器和导出器。