共计 2157 个字符,预计需要花费 6 分钟才能阅读完成。
分布式应用程序很简单,给开发人员调试和修复生产问题带来了一系列挑战。只管微服务架构可帮忙维持一支规模较小,能够自主工作并专一于独立业务团队,但因为其分布式性质,它带来了新的挑战。例如,在业务交易过程中呈现问题的状况下,须要端到端跟踪申请,该申请可能逾越多个服务和基础架构。解决问题时可能遇到的挑战有:
- 治理已知和未知故障
- 故障也是分布式的
- 传统监控零碎不实用
这是可监测性和可察看性呈现的中央。可监测性记录应用程序的总体运行状况,而可察看性则能够帮忙您更深刻地理解上下文数据。在.NET 大会上,我和 Cecil 曾经深刻探讨了云原生应用程序中的可监测性和可察看性。
https://www.bilibili.com/vide…
以上视频中,咱们着眼于可察看性和可监测性的关键点,例如日志 (Logging),掂量指标 (Metrics),链路追踪 (Tracing),并深入分析了运行状况查看 (Health checks)。
以下是视频中探讨的一些基本概念:
运行状况查看 (Health checks)
微服务实现了运行状况查看,最现实的状况是应用 HTTP endpoints,以便各种实时监控零碎能够查问状态。运行状况查看端点至多应做出以下响应:
- 零碎正在运行吗?
- 它能够执行工作吗?
在 Kubernetes 世界中,这些别离间接转换为 liveness 和 readiness。它们定义在 Kubernetes 的 YAML 部署配置文件中。
- liveness 门路是 Kubernetes 定期查问以查看故障的端点。Kubernetes 提供了 liveness 探针来监测失败的应用程序,并在它们不返回胜利代码时重新启动它们。
- readiness 门路是 Kubernetes 查问以理解服务何时就绪,能够开始承受流量的终端。当所有注册的查看都胜利时,它将返回 HTTP 状态代码 200。
ASP.NET Core 提供用于向可监测性零碎报告运行状况的中间件和库,来提供运行状况查看。相干文档请查阅 ASP.NET Core 中的运行状况查看。
日志
无论您应用什么工具考察生产环境中的问题,最终都会是以日志的模式反馈问题的根本原因。在分布式环境中,您须要确保日志记录蕴含有助于调试的深刻信息。能够从一个集中的中央查问它们。每个日志记录都须要有一个关联 ID,以便进行跟踪以理解全局。
结构化日志
应用结构化日志,您能够将序列化的对象增加到日志中,日志监视系统能够高效地查问这些对象。例如,您能够依据 customerID 或 trasnsactionID 查问整个事务日志。在 ASP.NET Core 应用程序中,能够应用提供结构化日志记录的 Serilog。请查阅.NET Core 和 ASP.NET Core 中的日志入门,以及 Serilog 理解结构化日志。
集中式日志和关联 ID
在传统应用程序中,日志文件存储在本地计算机上。在分布式环境中,把日志记录在某一台计算机中的纯文本文件中是没有帮忙的。生成日志的应用程序可能无法访问本地磁盘,或者当容器在虚拟机中挪动时,本地磁盘可能是高度瞬态的。因为在 Cloud-native 应用程序中应用基于文件的日志会遇到一些问题,因而首选集中式日志。日志由应用程序收集并传送到一个集中的日志应用程序,该应用程序对日志进行索引和存储。这类零碎每天能够接管数十 GB 的日志。Serilog 提供了向集中式零碎(如 Azure Application Insights,Azure Monitor 的一项性能)写入日志事件的接收器。在构建跨多个服务的日志记录时,遵循一些规范做法也很有帮忙。例如,在事务开始时生成一个关联 ID,而后将其记录到与该事务相干的每条音讯中,这样能够更容易地从集中式日志零碎中搜寻所有相干音讯。
分布式跟踪
分布式跟踪等效于古代云和微服务体系结构的调用堆栈,并增加了性能分析器。分布式跟踪或分布式申请跟踪有助于端到端查看申请,并使您可能从整体上辨认问题。跟踪能够为您提供无关问题的具体答案,例如事件产生在什么时候?它花了多少工夫?为什么要花这么长时间?哪些微服务解决了它?等等,像 openzipkin / zipkin 之类的开源分布式跟踪零碎,在该畛域十分风行。
为您的应用程序启用分布式跟踪就跟将相应的分布式跟踪提供商的 SDK 增加到每个微服务中一样简略。例如,在您的利用中装置并配置了 Application Insights SDK 后,SDK 依赖关系主动收集器会主动收集风行框架,库和技术的跟踪信息。
在几个不同的零碎和工具之间,须要有一套规范以便于察看。OpenTelemetry 标准化了不同的应用程序和框架如何收集和收回可观测性遥测。OpenTelemetry 提供了一个与供应商无关的标准、一组 api、sdk 和工具以及用于可观测性遥测(分布式跟踪、度量等)的集成。查看博客文章 OpenTelemetry .net reachs v1.0 以获取详细信息。
入手模块
咱们曾经构建了一系列模块来帮忙您学习构建.NET 微服务和云原生技术。查看以下模块,这些模块将帮忙您理解可监测性和可察看性相干技术。
- 行运行状况查看:创立和部署.Net 微服务和云原生技术
- 可监测性和可察看性:测试 cloud-native ASP.NET Core 微服务
- 无关其余主题,请查看 https://aka.ms/aspnet-microse…