手把手教你学Dapr - 9. 可观测性

介绍

通过Tracing(跟踪)、Metrics(指标)、Logs(日志)和Health(运行状况)监控应用程序。

分布式跟踪

Dapr 使用 Zipkin 协议进行分布式跟踪 和 Metrics 收集。由于 Zipkin 协议的普遍性,许多后端都是开箱即用的,例如 Stackdriver、Zipkin、New Relic 等。结合 OpenTelemetry Collector,Dapr 可以将跟踪导出到许多其他后端,包括但不限于 Azure Monitor、Datadog、Instana、Jaeger 和 SignalFX。

499a5c71b1fcddf0119a0df8be4dcd72.png

Tracing设计

Dapr 在 Dapr Sidecar 中添加了一个 HTTP/gRPC 中间件。中间件拦截所有 Dapr 和应用程序流量,并自动注入关联 ID 以跟踪分布式事务。这种设计有几个好处:

  • 无需代码检测。使用可配置的跟踪级别自动跟踪所有流量。

  • 跨微服务的一致性跟踪行为。跟踪是在 Dapr Sidecar 上配置和管理的,因此它在由不同团队制作并可能用不同编程语言编写的服务之间保持一致。

  • 可配置和可扩展。利用 Zipkin API 和 OpenTelemetry Collector,Dapr 跟踪可以配置为与流行的跟踪后端一起使用,包括客户可能拥有的自定义后端。

  • 您可以同时定义和启用多个导出器。

W3C 关联 ID

Dapr 使用标准的 W3C 跟踪上下文标头。对于 HTTP 请求,Dapr 使用 traceparent 标头。对于 gRPC 请求,Dapr 使用 grpc-trace-bin 标头。当一个没有跟踪 ID 的请求到达时,Dapr 会创建一个新的。否则,它会沿着调用链传递跟踪 ID。

配置

Dapr 使用概率抽样。采样率定义了对跟踪跨度进行采样的概率,其值可以介于 0 和 1(含)之间。默认采样率为 0.0001(即采样 10,000 个跨度中的 1 个)。

要更改默认跟踪行为,请使用配置文件。例如,以下配置对象将采样率更改为 1(即每个跨度都被采样),并使用 Zipkin 协议将跟踪发送到位于 http://zipkin.default.svc.cluster.local 的 Zipkin 服务器

yaml文件路径:%UserProfile%\.dapr\config.yaml

apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:name: tracingnamespace: default
spec:tracing:samplingRate: "1"zipkin:endpointAddress: "http://zipkin.default.svc.cluster.local:9411/api/v2/spans"

:将采样率更改为 0 会完全禁用跟踪。

W3C 跟踪上下文

Dapr 使用 W3C 跟踪上下文对服务调用和发布/订阅消息进行分布式跟踪。Dapr 完成了生成和传播跟踪上下文信息的所有繁重工作,仅在极少数情况下,您需要传播或创建跟踪上下文。

W3C trace context有以下优势:

  • 为单个跟踪和请求提供唯一标识符,允许将多个提供程序的跟踪数据链接在一起。

  • 提供转发特定于供应商的跟踪数据的商定机制,并避免跟踪在多个工具参与单个事务时中断。

  • 提供中间商、平台和硬件提供商可以支持的行业标准。

有两种情况需要了解如何使用跟踪:

  1. Dapr 在服务之间生成并传播跟踪上下文。

  2. Dapr 生成跟踪上下文,您需要将跟踪上下文传播到另一个服务,或者您生成跟踪上下文,Dapr 将跟踪上下文传播到服务。

Dapr 在服务之间生成并传播跟踪上下文

在某些情况下,Dapr 会为您完成所有工作。您不需要创建和传播任何跟踪标头。Dapr 负责创建所有跟踪标头并传播它们。让我们通过示例来了解场景;

  1. 单个服务调用(服务 A -> 服务 B)

    Dapr 在服务 A 中生成跟踪标头,这些跟踪标头从服务 A 传播到服务 B。

  2. 多个顺序服务调用(服务 A -> 服务 B -> 服务 C)

    Dapr 在服务 A 中的请求开始时生成跟踪标头,这些跟踪标头从服务 A-> 服务 B -> 服务 C 等传播到进一步启用 Dapr 的服务。

  3. 请求是来自外部endpoint(例如从网关服务到启用 Dapr 的服务 A)

Dapr Sidecar 健康检查

Dapr 提供了一种使用 HTTP /healthz endpoint来确定其健康状况的方法。有了这个endpoint,可以探测 Dapr 进程或边车的健康状况,从而确定其准备情况和活跃度。

在将 Dapr 部署到托管平台(例如 Kubernetes)时,会自动为您配置 Dapr health endpoint。您无需进行任何配置。

Health endpoint: 与 Kubernetes 集成

Kubernetes 使用 readinessliveness 探测来确定容器的健康状况。

kubelet使用活动探针来知道何时重新启动容器。例如,活动探测可以捕获死锁,即应用程序正在运行,但无法取得进展。在这种状态下重新启动容器有助于使应用程序更可用,尽管存在缺陷。 

kubelet 使用就绪探针来了解容器何时准备好开始接受流量。当 pod 的所有容器都准备就绪时,它就被认为是准备好了的。这种准备信号的一个用途是控制哪些Pods被用作Kubernetes服务的后端。当 Pod 未准备好时,它将从Kubernetes服务负载均衡器中删除。

当与 Kubernetes 集成时,Dapr Sidecar 被注入了一个 Kubernetes 探针配置,告诉它使用 Dapr healthz endpoint。这是由 Sidecar Injector 系统服务完成的。与 kubelet 的集成如下图所示。

859b6a6933bc4e4ecdd8e2f656494056.png

如何在 Kubernetes 中配置活性探针

在 pod 配置文件中,在容器规范部分添加了 liveness 探针,如下所示:

livenessProbe:httpGet:path: /healthzport: 8080initialDelaySeconds: 3periodSeconds: 3

在上面的例子中, periodSeconds 字段指定 kubelet 应该每 3 秒执行一次活性探测。initialDelaySeconds 字段告诉 kubelet 在执行第一次探测之前应该等待 3 秒。

:任何大于或等于 200 且小于 400 的代码都表示成功。其他代码表示失败。

如何在 Kubernetes 中配置就绪探针

就绪探针的配置类似于活性探针。唯一的区别是您使用 readinessProbe 字段而不是 livenessProbe 字段。

readinessProbe:httpGet:path: /healthzport: 8080initialDelaySeconds: 3periodSeconds: 3

如何使用 Kubernetes 配置 Dapr Sidecar health endpoint

此配置由 Sidecar Injector 服务自动完成。Dapr 在端口 3500 上有它的 HTTP health endpint /v1.0/healthz,这可以与 Kubernetes 一起使用以进行就绪和活跃度探测。当注入 Dapr sidecar 时,readiness 和 liveness 探针在 pod 配置文件中配置为以下值。

livenessProbe:httpGet:path: v1.0/healthzport: 3500initialDelaySeconds: 5periodSeconds: 10timeoutSeconds : 5failureThreshold : 3
readinessProbe:httpGet:path: v1.0/healthzport: 3500initialDelaySeconds: 5periodSeconds: 10timeoutSeconds : 5failureThreshold: 3

.Net中使用可观测性

创建Assignment.Server

创建类库项目,并添加Dapr.AspNetCore, OpenTelemetry, OpenTelemetry.Instrumentation.AspNetCore, OpenTelemetry.Instrumentation.Http,OpenTelemetry.Extensions.HostingOpenTelemetry.Exporter.ZipkinNuGet包引用,最后修改程序端口为5000。

!!!注:版本很重要,NuGet要打开包含预发行版,并且使用指定版本

OpenTelemetry-1.2.0-beta1

OpenTelemetry.Instrumentation.AspNetCore-1.0.0-rc8

OpenTelemetry.Instrumentation.Http-1.0.0-rc8

OpenTelemetry.Exporter.Zipkin-1.2.0-beta1

OpenTelemetry.Extensions.Hosting-1.0.0-rc8

修改program.cs

using OpenTelemetry.Resources;
using OpenTelemetry.Trace;var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenTelemetryTracing((tracerProviderBuilder) =>tracerProviderBuilder.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("testobservability")).AddAspNetCoreInstrumentation().AddHttpClientInstrumentation().AddZipkinExporter(zipkinOptions =>{zipkinOptions.Endpoint = new Uri("http://localhost:9411/api/v2/spans");})
);
var app = builder.Build();app.Map("/Amazing", async (HttpContext context) =>
{if (context.Request.Headers.TryGetValue("traceparent", out var traceparent)){Console.WriteLine($"TraceParent: {traceparent}");}if (context.Request.Headers.TryGetValue("tracestate", out var tracestate)){Console.WriteLine($"TraceState: {tracestate}");}System.Diagnostics.Activity.Current?.SetParentId(traceparent.ToString());_ = await new HttpClient().GetStringAsync("https://www.baidu.com");Console.WriteLine($"Invoke succeed: traceID:{traceparent}");
});app.Run();

可以看到我们直接演示了一个好玩的用法,就是开启.Net的OpenTelemetry,然后修改Diagnostics.ActivityParentId,让当前的Tracing跟Dapr Sidecar传来的TraceId一致。

运行Assignment.Server

使用Dapr CLI来启动,先使用命令行工具跳转到目录 dapr-study-room\Assignment07\Assignment.Server,然后执行下面命令

dapr run --app-id testobservability --app-port 5000 --dapr-http-port 3500 --dapr-grpc-port 50001 dotnet run

使用Dapr CLI发个命令看看

dapr invoke --app-id testobservability --method /Amazing

打开Zipkin,地址:http://localhost:9411/, 来看一下Zipkin的Tracing,不单有Dapr Sidecar的请求记录进来了,还跟HttpClient的捆绑在了起来,是的,有趣的就在这里。

除了可以跟踪HttpClient以外,还有EF Core等都集成了。

8e91a3a254cff441de49f9f9da463b7e.png

至于Metrics和Logs集成也是非常简单,需要搭配不同的后端如Prometheus, Fluentd等。甚至可以通过自定义Exporter自行对接一些云厂商的云服务。

本章源码

Assignment09

https://github.com/doddgu/dapr-study-room

我们正在行动,新的框架、新的生态

我们的目标是自由的易用的可塑性强的功能丰富的健壮的

所以我们借鉴Building blocks的设计理念,正在做一个新的框架MASA Framework,它有哪些特点呢?

  • 原生支持Dapr,且允许将Dapr替换成传统通信方式

  • 架构不限,单体应用、SOA、微服务都支持

  • 支持.Net原生框架,降低学习负担,除特定领域必须引入的概念,坚持不造新轮子

  • 丰富的生态支持,除了框架以外还有组件库、权限中心、配置中心、故障排查中心、报警中心等一系列产品

  • 核心代码库的单元测试覆盖率90%+

  • 开源、免费、社区驱动

  • 还有什么?我们在等你,一起来讨论

经过几个月的生产项目实践,已完成POC,目前正在把之前的积累重构到新的开源项目中

目前源码已开始同步到Github(文档站点在规划中,会慢慢完善起来):

MASA.BuildingBlocks

MASA.Contrib

MASA.Utils

MASA.EShop

BlazorComponent

MASA.Blazor

QQ群:7424099

微信群:加技术运营微信(MasaStackTechOps),备注来意,邀请进群

8d626937edded78295e74b5e95291a01.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295415.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这些魔术用的是物理原理?有啥诀窍?

全世界只有3.14 % 的人关注了爆炸吧知识许多成功的魔术,都运用了物理知识。我们在观看魔术表演时,也可以学到相当多的知识,有时用一般的原理就可以表演一个十分精彩的魔术。所以我们希望揭开魔术的神秘面纱,探究其中的物理知识。一…

安装Wamp时出现无法启动此程序,因为计算机中丢失MSVCR110.dll的解决方法

可能有的朋友在运行某软件时,会出现了“无法启动此程序,因为计算机中丢失 MSVCR110.dll。尝试重新安装该程序以解决此问题。”的提示,遇到这样的情况该怎么办呢?不用着急,下面小编就为大家带来解决方法,遇到同样问题却不知道如何解…

OAuth 2.0 扩展协议之 PKCE

前言阅读本文前需要了解 OAuth 2.0 授权协议的相关内容, 可以参考我的上一篇文章 OAuth 2.0 的探险之旅[1]。PKCE 全称是 Proof Key for Code Exchange, 在2015年发布, 它是 OAuth 2.0 核心的一个扩展协议, 所以可以和现有的授权模…

欧洲杯直播助PPTV日均流量登顶视频行业首位

随着意大利溃败,西班牙最终捧杯,四年一度火爆的欧洲杯赛事也就此落下帷幕。令人欣喜的是,在本届欧洲杯比赛的直播过程中,由于比赛安排再深夜,互联网应用取代传统电视台成为人们观看赛事的主要渠道,各大视频…

.NET 6新特性试用 | record struct

前言在以前的文章中,我们介绍过record类型,它具有不变性(《为什么应该用record来定义DTO》)和值相等性(《为什么应该用record来定义DTO(续)》)。record是引用类型。而在.NET 6中,我们可以使用record struct定义值类型。…

原来我们看到的世界地图竟这样震撼!多年的地理白学了...

▲ 点击查看几乎每个家庭都会有两张地图:一张世界地图,一张中国地图。薄薄的两张纸,蕴藏着让每个人学会“看世界”的磅礴力量。哈佛上一任校长,也是300多年来唯一一位女校长德鲁吉尔平福斯特(Drew Gilpin Faust&#x…

Exchange Powershell查看用户最后登陆邮箱时间

在Exchange日常管理中,我们可能经常会遇到这样的问题,就是怎么来知道一个用户最后的登录时间?这个问题在使用Exchange powershell就能很好的解决了。 用管理员身份运行Exchange management powershell 查看某一个邮箱数据库的统计信息&#x…

易企秀制作的步骤

2019独角兽企业重金招聘Python工程师标准>>> 1、选图很关键 (图片干净 整洁,不同方位展示 ,符合主题)。 2、配上说明性文字 简明扼要 3、选择合适的模板和背景音乐。 4、及时沟通与调整。 转载于:https://my.oschina.n…

C# WPF MVVM模式Prism框架下事件发布与订阅

01—前言处理同模块不同窗体之间的通信和不同模块之间不同窗体的通信,Prism提供了一种事件机制,可以在应用程序中低耦合的模块之间进行通信,该机制基于事件聚合器服务,允许发布者和订阅者之间通过事件进行通讯,且彼此之…

这几部高分学科纪录片,助力孩子涨姿势拓视野~

全世界只有3.14 % 的人关注了爆炸吧知识▌导读本文为同学们整理了几部高分经典学科纪录片,对应文学、数学、经济学、地理、化学。这不仅是课堂学习的补充与延伸,更是开拓视野、激发学习内驱力的绝佳利器。建议收藏!(关注视频号少年…

Linux 学习_在Linux下面安装tomcat

要在linux下面安装tomcat,首先我们需要做一些准备工作.... 下载tomcat: 下载地址:http://tomcat.apache.org/download-60.cgi 下载:tar.gz 如图: 说明: WinISO安装版:下载地址:http…

Codeforces 474C Captain Marmot 给定4个点和各自旋转中心 问旋转成正方形的次数

题目链接&#xff1a;点击打开链接 题意&#xff1a; 给定T表示case数 以下4行是一个case 每行2个点&#xff0c;u v 每次u能够绕着v逆时针转90 问最少操作多少次使得4个u构成一个正方形。 思路&#xff1a; 枚举判可行 #include <iostream> #include <cmath> #inc…

欧洲的小国家究竟有多袖珍?

全世界只有3.14 % 的人关注了爆炸吧知识你走遍祖国的每个角落了吗&#xff1f;相信绝大多数人的回答是“NO”但是如果你生活在很小的国家里&#xff0c;也许一根烟&#xff0c;或者一顿午餐的时间&#xff0c;你就可以从这个国家的一端走到另一端。下面就一起看看世界上最小的国…

那些年你追过的电影竟然登上顶刊封面! 盘点思路新奇的顶刊论文

全世界只有3.14 % 的人关注了爆炸吧知识来源 | 募格课堂科研&#xff0c;是一项严肃且要求一丝不苟的研究工作。但你可曾想过&#xff0c;那些年自己追过的像葫芦娃、孙悟空等充满中国风元素的影视作品&#xff0c;竟然被科研人作为idea&#xff0c;不仅有理有据地研究还发了顶…

22504!Windows 11 新预览版发布

面向 Dev 频道的 Windows 预览体验成员&#xff0c;微软现已发布 Windows 11 预览版 Build 22504。Windows 11 Insider Preview Build 22504 主要变化如下&#xff1a;1.为了进一步个性化 Windows 11 的文本输入体验&#xff0c;微软为触摸键盘带来了 13 个全新主题&#xff0c…

ERROR (ClientException): Unexpected API Error

ERROR (ClientException): Unexpected API Error ERROR (ClientException): Unexpected API Errorposted on 2016-02-03 11:12 秦瑞It行程实录 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/ruiy/p/5179253.html

火了!女教授把自己P成女娲,登上学术期刊封面

全世界只有3.14 % 的人关注了爆炸吧知识2020年4月&#xff0c;江苏师范大学化学与材料科学学院副院长石枫教授在 Chinese Journal of Chemistry 上发表了题为 Axially Chiral Aryl-Alkene-Indole Framework: A Nascent Member of the Atropisomeric Family and Its Catalytic A…

Binding在WPF中的使用

闲来无事&#xff0c;不想打DOTA&#xff0c;在这里小小研究下wpf中关于Binding的东西。 咯咯 在我们印象中&#xff0c;Binding的意思是“绑定”&#xff0c;这个“绑”大概取自于Bind这个单词吧&#xff0c;这么理解的话就是以音译英了&#xff0c;没什么实际意义。 Bind这个…

WPF 模仿IconPacks库写图标按钮

先上原链接&#xff0c;一个很不错的wpf图标库 : https://github.com/MahApps/MahApps.Metro.IconPacks提供了大量的图标可以用&#xff0c;如下图&#xff1a;&#xff08;部分截图&#xff09;简单分析了一下代码&#xff0c;并模仿它写一个图标类和简单的使用示例&#xff1…

java线程死锁 cpu 100%_一文学会Java死锁和CPU 100% 问题的排查技巧

做一个积极的人编码、改bug、提升自己我有一个乐园&#xff0c;面向编程&#xff0c;春暖花开工欲善其事&#xff0c;必先利其器00 本文简介作为一名搞技术的程序猿或者是攻城狮&#xff0c;想必你应该是对下面这两个问题有所了解&#xff0c;说不定你在实际的工作或者面试就有…