深入研究 .NET 5 的开放式遥测
发布日期:2021-05-09 05:28:41 浏览次数:12 分类:博客文章

本文共 9298 字,大约阅读时间需要 30 分钟。

OpenTelemetry ������

OpenTelemetry���������������������������������������������SDK������������������������������������������������������������������������������������,���������������������������Cloud Native Computing Foundation���CNCF������������������������������������������������������������������������������������������������CNCF������������ ������������������������������������SDK������������������������������������������C#���ASP.NET Core���

���������������������������������OpenTelemetry������������������������������������������������������.NET������������������������������������������������������������������������������������������������������

Logging ������

������������������������������������������������������.NET���������������������������������NuGet���ILogger������������������������������������������������OpenTelemetry������ Microsoft.Extensions.Logging, ���������������ASP.NET Core������������������������������������������������

Metrics ������

���������������������������������������������������������������������������������OpenTelemetry������������������������������������ ���������������������������������������������������

  • CPU ���������������
  • ���������������������
  • Http���������������

Tracing ������

���������������������������������������������������������������������������������������������������������������������ASP.NET Core���������HTTP������������������������������������������������������������������������������������������ Http���������������������������������������������������������������������������������������������������������������������������������������������������������������������������

Jaeger

������������������������������������������������������������������������������������������APM���������������������������������������������OpenTelemetry������������������������APM���������������������

Jaeger���Zipkin���������������������������������Open Telemetry������APM��� Zipkin������������������������������������������UI������������������������Jaeger������������������������

������������������������������������,������������������������������HTTP���������MySQL���Redis���������API������������, ���������������������������������������������,������������������������������������������������������������������������,���������������������������������������������������������������������������������������

Spans ������

������Jaeger��������������������������� Span,���.NET���������������������System.Activities.Activity���������������������������������������������������������������������������������������������������������������������������������������������������Span������������������������������

���������������.NET���������������������������������������OpenTelemetry������������������������������������������������������������������

���������������.NET������������������Activity������������������.NET��������������������������������������������������� Span������������������������������������������open-telemetry���������������������.NET������������������������ Span ��� Activity���������������

������������.NET 5���������ActivitySource,������������������ Activity���

������Span������������������������������������������������������������ActivitySource������������Span���������������������

private static ActivitySource activitySource = new ActivitySource(    "companyname.product.library",    "semver1.0.0");

���������������������������StartActivity���������������������������Dispose������������Span���

using (var activity = activitySource.StartActivity("ActivityName"){    // Pretend to do some work.    await LongRunningAsync().ConfigureAwait(false);} // Activity gets stopped automatically at end of this block during dispose.

Events ������

���Span���������������������������������������������������������������������������������������������������

using (var activity = activitySource.StartActivity("ActivityName"){    await LongRunningOperation().ConfigureAwait(false);}public async Task LongRunningOperationAsync(){    await Task.Delay(1000).ConfigureAwait(false);    // Log timestamped events that can take place during an activity.     Activity.Current?.AddEvent(new ActivityEvent("Something happened."));}

���LongRunningOperationAsync������������������������������������������activity���������������������������������������������������������������������������������������������������������������������������������������������Activity.Current���

������������������������������������������������Activity.Current���������null������������������������null���������

Attributes ������

������������������������������������������������������������Span���������������������Http���������������������������������������

������������Open Telemetry������������ Attributes������ ������.NET ������Tag

using (var activity = activitySource.StartActivity("ActivityName"){    await LongRunningOperation().ConfigureAwait(false);}public async Task LongRunningOperationAsync(){    await Task.Delay(1000).ConfigureAwait(false);    // Log an attribute containing arbitrary data.    Activity.Current?.SetTag("http.method", "GET");}

IsRecording ������

IsRecording���Span���������������������������������false������������Span������������������������������������������������������������������������������������������10%������������������������������������span���������false���������������������

������������open-telemetryg������������IsRecording������.NET Core 3.1������ Recorded������.NET 5 ������ IsAllDataRequested���

using (var activity = activitySource.StartActivity("ActivityName"){    await LongRunningOperation().ConfigureAwait(false);}public async Task LongRunningOperationAsync(){    await Task.Delay(1000).ConfigureAwait(false);    // It's possible to optionally request more data from a particular span.    var activity = Activity.Current;    if (activity != null && activity.IsAllDataRequested)    {        activity.SetTag("http.url", "http://www.mywebsite.com");    }}

Trace���������������

������������������http.method���http.url������������������������������������������������������open-telemetry���������������������������������������������������������������������������������������������Jaeger���APM������������������������������������������������������������������������������������������������������������

  • General: ���������������������������������������������������������
  • HTTP: ������������������������Http������
  • Database: SQL ��� NoSql���������
  • RPC/RMI: ���������������������gRPC���
  • Messaging: ���������������������������������������������/������������
  • Exceptions: ���������������Span������������������������

Exporting ������

���������������������������OpenTelemetry���������������������������������������������������������������������������������ASP.NET Core���������Open Telemetry���������, ���������������������������������������������������������������������������OpenTelemetry������������������������

using var subscriber = DiagnosticListener.AllListeners.Subscribe(    listener =>    {        Console.WriteLine($"Listener name {listener.Name}");        listener.Subscribe(kvp => Console.WriteLine($"Received event {kvp.Key}:{kvp.Value}"));    });

������������������

������������������������������������������������������������������������������������������������

���������W3C���������������������������������������������HTTP Header���������Header������������������������������������������������������������������������������������������������������Http���Header������������������������������������������HTTP Header���

  • traceparent-������version���trace-id���parent-id���trace-flags

    • version - ���open-telemetry������������������������00
    • trace-id - ���������������������������
    • parent-id -������������ patent span ���������������������
    • trace-flags -���������������������������������������������������������������������������������������������
  • tracestate -���������������/���������������������������������������������

traceparent: 00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01tracestate: asp=00f067aa0ba902b7,redis=t61rcWkgMzE

Baggage

���Attributes���������Baggage������������������������������������������������������������������������������������������������Baggage������W3C���������baggage���������HTTP Header������������������������������Attributes������������������������Span���������

baggage: userId=alice,serverNode=DF:28,isProduction=false

���������������������������������������

using (var activity = activitySource.StartActivity("ActivityName"){    await LongRunningOperation().ConfigureAwait(false);}public async Task LongRunningOperationAsync(){    await Task.Delay(1000).ConfigureAwait(false);    // Log an attribute containing arbitrary data.    Activity.Current?.AddBaggage("http.method", "GET");}

���������������������������������������������������������ID��������������������� Baggage ���������������������������������������������������������

������

.NET���������OpenTelemetry������������������������������Activity���������.NET 5 ��������������������������� HttpClient ������������������������������W3C���������������HTTP Header��� ������ILogger���������������������������������������������OpenTelemetry������������������

������������: Rehan Saeed

���������������

������

������������������������������������ ���������������������������������������������������������������������������������������������������QQ��� 897216102

上一篇:在.NET Core 中使用Quartz.NET
下一篇:使用 gRPC-UI 调试.NET 5的gPRC服务

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月06日 06时29分40秒