云原生ASP.NET Core程序的可监测性和可观察性

点击蓝字

关注我们

分布式应用程序很复杂,给开发人员调试和修复生产问题带来了一系列挑战。尽管微服务架构可帮助维持一支规模较小,可以自主工作并专注于独立业务团队,但由于其分布式性质,它带来了新的挑战。例如,在业务交易过程中出现问题的情况下,需要端到端跟踪请求,该请求可能跨越多个服务和基础架构。解决问题时可能遇到的挑战有:

  • 管理已知和未知故障

  • 故障也是分布式的

  • 传统监控系统不适用

这是可监测性和可观察性出现的地方。可监测性记录应用程序的总体运行状况,而可观察性则可以帮助您更深入地了解上下文数据。在.NET大会上,我和Cecil 已经深入讨论了云原生应用程序中的可监测性和可观察性。

以上视频中,我们着眼于可观察性和可监测性的关键点,例如日志(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中的运行状况检查。

ASP.NET Core中的运行状况检查

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/health-checks

日志

无论您使用什么工具调查生产环境中的问题,最终都会是以日志的形式反应问题的根本原因。在分布式环境中,您需要确保日志记录包含有助于调试的深入信息。可以从一个集中的地方查询它们。每个日志记录都需要有一个关联ID,以便进行跟踪以了解全局。

结构化日志

使用结构化日志,您可以将序列化的对象添加到日志中,日志监视系统可以高效地查询这些对象。例如,您可以根据customerID或trasnsactionID查询整个事务日志。在ASP.NET Core应用程序中,可以使用提供结构化日志记录的Serilog。请查阅.NET Core和ASP.NET Core中的日志入门,以及Serilog了解结构化日志。

.NET Core和ASP.NET Core中的日志

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/

Serilog

https://serilog.net/

集中式日志和关联ID

在传统应用程序中,日志文件存储在本地计算机上。在分布式环境中,把日志记录在某一台计算机中的纯文本文件中是没有帮助的。生成日志的应用程序可能无法访问本地磁盘,或者当容器在虚拟机中移动时,本地磁盘可能是高度瞬态的。由于在Cloud-native应用程序中使用基于文件的日志会遇到一些问题,因此首选集中式日志。日志由应用程序收集并传送到一个集中的日志应用程序,该应用程序对日志进行索引和存储。这类系统每天可以接收数十GB的日志。Serilog提供了向集中式系统(如Azure Application Insights,Azure Monitor的一项功能)写入日志事件的接收器。在构建跨多个服务的日志记录时,遵循一些标准做法也很有帮助。例如,在事务开始时生成一个关联ID,然后将其记录到与该事务相关的每条消息中,这样可以更容易地从集中式日志系统中搜索所有相关消息。

接收器

https://github.com/serilog/serilog/wiki/Provided-Sinks

关联ID

https://blog.rapid7.com/2016/12/23/the-value-of-correlation-ids/

分布式跟踪

分布式跟踪等效于现代云和微服务体系结构的调用堆栈,并添加了性能分析器。分布式跟踪或分布式请求跟踪有助于端到端查看请求,并使您能够从整体上识别问题。跟踪可以为您提供有关问题的详细答案,例如事件发生在什么时候?它花了多少时间?为什么要花这么长时间?哪些微服务处理了它?等等,像 openzipkin/zipkin 之类的开源分布式跟踪系统,在该领域非常流行。

为您的应用程序启用分布式跟踪就跟将相应的分布式跟踪提供商的SDK添加到每个微服务中一样简单。例如,在您的应用中安装并配置了Application Insights SDK后,SDK依赖关系自动收集器会自动收集流行框架,库和技术的跟踪信息。

在几个不同的系统和工具之间,需要有一套标准以便于观察。OpenTelemetry标准化了不同的应用程序和框架如何收集和发出可观测性遥测。OpenTelemetry提供了一个与供应商无关的规范、一组api、sdk和工具以及用于可观测性遥测(分布式跟踪、度量等)的集成。查看博客文章OpenTelemetry .net reachs v1.0以获取详细信息。

openzipkin/zipkin

https://github.com/openzipkin/zipkin

Application Insights SDK

https://docs.microsoft.com/azure/azure-monitor/app/distributed-tracing

OpenTelemetry

https://opentelemetry.io

博客文章OpenTelemetry .net reachs v1.0

https://devblogs.microsoft.com/dotnet/opentelemetry-net-reaches-v1-0

动手模块

我们已经构建了一系列模块来帮助您学习构建.NET微服务和云原生技术。查看以下模块,这些模块将帮助您了解可监测性和可观察性相关技术。

  • 行运行状况检查:创建和部署.Net微服务和云原生技术

  • 可监测性和可观察性:测试cloud-native ASP.NET Core微服务

  • 有关其他主题,请查看https://aka.ms/aspnet-microservices

创建和部署.Net微服务和云原生技术

https://docs.microsoft.com/learn/modules/microservices-aspnet-core/

测试cloud-native ASP.NET Core微服务

https://docs.microsoft.com/learn/modules/microservices-logging-aspnet-core/

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

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

相关文章

OxyPlot.Wpf 图表控件使用备忘

OxyPlot.Wpf 图表控件使用备忘目录OxyPlot.Wpf 图表控件使用备忘一、OxyPlot.Wpf 控件信息二、基本概念(一) PlotView 和 Plot(二) PlotModel(三) Axes(四) Series(五) Tracker三、样式设置(一) 效果对比(二) 图表边框和数据线条样式(三) 坐标轴样式(四) 自定义 Tracker四、装配…

造作吧,Python快速入门!

双十一的刀口还没愈合,双十二的折扣又戳到了胸口。买买买,还是小天最懂你看看小天都准备了什么!课程限时优惠,网易云课堂平台优惠券,优惠叠加,课程包更享折上折!双十二年终钜惠,还犹…

C# Hashtable和Dictionary区别

Hashtable和Dictionary都是.Net下的表示键值对的集合&#xff0c;那么我们在使用中该选择Hashtable还是Dictionary&#xff1f;下边我们看看他们之间的区别&#xff1a;1、Dictionary<K,V>在使用中是顺序存储的&#xff0c;而Hashtable由于使用的是哈希算法进行数据存储&…

java中如何运行小程序_一起学java(一)——运行第一个小程序

接下来的一段时间内会更新一起学java系列&#xff0c;喜欢的关注一下我吧。微信公众号&#xff1a;什么都不懂的大佬&#xff1b;初学&#xff0c;有错误的地方请大家多多指教。---------------分割线--------------一. 什么是java&#xff1f;java是一门面向对象的计算机编程语…

一分钟教你用Excel从统计局抓数据!

全世界只有3.14 % 的人关注了数据与算法之美现在呢&#xff0c;从网上爬虫数据来做分析越来越火&#xff0c;如果不会这个skillset做数据处理简直没办法装逼。作为一个兴趣广泛的高能物理phd&#xff0c;自然不能被时代落下。首先声明&#xff0c;我并没有学过HTML的语言&#…

记一次 .NET 某HIS系统后端服务 内存泄漏分析

一&#xff1a;背景 1. 讲故事前天那位 his 老哥又来找我了&#xff0c;上次因为CPU爆高的问题我给解决了&#xff0c;看样子对我挺信任的&#xff0c;这次另一个程序又遇到内存泄漏&#xff0c;希望我帮忙诊断下。其实这位老哥技术还是很不错的&#xff0c;他既然能给我dump&a…

freemarker 内置函数

2019独角兽企业重金招聘Python工程师标准>>> 在我们应用Freemarker过程中&#xff0c;经常会操作例如字符串&#xff0c;数字&#xff0c;集合等&#xff0c;却不清楚Freemrker有没有类似于Java一样有相关的类及方法。在本文当中&#xff0c;我将向大家详细的介绍Fr…

专业学习频道,欢迎关注数锐学堂

数锐学堂简介&#xff1a;致力于深耕数学领域的科普学习、竞赛、机器学习等算法技能应用优质课程&#xff0c;精心打造一站式的数学垂直领域教育服务。长按二维码可以关注如果识别二维码有问题请搜索微信号&#xff1a;supermodeling

在非容器(集群)环境下运行dapr

作者&#xff1a;李俱顺原文&#xff1a;https://www.4async.com/2021/03/2021-03-11-running-dapr-without-container/前一段时间一直关注的dapr正式发布了v1.0版本(实际上本文发布时还更新了v1.0.1)&#xff0c;代表dapr在某些程度上进入稳定状态&#xff0c;可以尝试在实际中…

【Silverlight5矢量打印】如何用C#代码检测打印机和驱动是否支持PostScript

Silverlight5支持PostScript矢量打印&#xff0c;矢量打印相比于位图打印速度更快&#xff0c;生成的打印文件更小。SL5默认会采用PS矢量打印&#xff0c;如果打印机不支持&#xff0c;自动切换到位图打印。 虽然微软SL打印组认为PS已经相当普遍&#xff0c;但我想大多数打印机…

用魔法打开科学,孩子惊叫连连,想不爱科学都难!

随着当今科技快速发展&#xff0c;和大家对于人工智能快速崛起的担忧&#xff0c;父母们对于孩子科学能力的培养&#xff0c;已经紧锣密鼓的提上了早教日程。看看近两年早教市场里火爆的课程&#xff0c;“少儿编程”、“儿童机器人教育”、“儿童STEAM课程”等等便是印证了这一…

java反射 获取局部变量_Java反射:如何获取变量的名称?

呼唤远方如果您使用以下的调试信息进行编译&#xff1a;javac -g)&#xff0c;局部变量的名称保存在.class文件中。例如&#xff0c;以这个简单的类为例&#xff1a;class TestLocalVarNames {public String aMethod(int arg) {String local1 "a string";StringBuil…

svn服务端及客户端搭建和使用(三)

接下来,试试用TortoiseSVN修改文件,添加文件,删除文件,以及如何解决冲突等.添加文件在检出的工作副本中添加一个Readme.txt文本文件,这时候这个文本文件会显示为没有版本控制的状态,如图:这时候,你需要告知TortoiseSVN你的操作,如图:加入以后,你的文件会变成这个状态,如图:这时…

Python的小宇宙,怎么样才能发挥出来?

随着科技的发展&#xff0c;计算机对人类的生产活动和社会活动产生了极为重要的影响&#xff0c;同时以强大的生命力飞速发展着。目前计算机正广泛用于社会各个领域&#xff0c;并朝着微型化、网络化、智能化和巨型化的方向前进。而随着计算机飞速发展的背后&#xff0c;人工智…

面试腾讯,过了~

大概需要10分钟。原谅下&#xff0c;又标题党了&#xff0c;不过这篇会提到我应届面试腾讯的经历。前两天在朋友圈发了一条动态&#xff1a;要做读者朋友的指路小火苗&#xff0c;很多人在状态下留言&#xff1a;为啥不是指路明灯&#xff1f;为啥不是小油灯&#xff1f;原因很…

传说中理科生看到会沉默、文科生看到会流泪的【程序员文史综合题目】

全世界只有3.14 % 的人关注了数据与算法之美一、单选题1、以下谁是二进制思想的最早提出者&#xff1f;a&#xff0c;伏羲&#xff1b;b&#xff0c;姬昌&#xff1b;c&#xff0c;莱布尼茨&#xff1b;d&#xff0c;柏拉图。2、以下哪个概念和公孙龙的《指物论》中的“指”字含…

智能制造建设方案

随着新一轮工业革命的发展&#xff0c;工业转型的呼声日渐高涨。面对信息技术和工业技术的革新浪潮&#xff0c;美国人出台了先进制造业回流计划&#xff0c;提出了工业互联网战略&#xff0c;德国人提出了工业4.0战略&#xff0c;中国加紧推进两化深度融合&#xff0c;并发布了…

深入LINQ | 动态构建LINQ表达式

原文&#xff1a;bit.ly/3fwlKQJ作者&#xff1a;Jeremy Likness译者&#xff1a;精致码农-王亮LINQ 是 Language Integrated Query&#xff08;语言集成查询&#xff09;的缩写&#xff0c;是我最喜欢的 .NET 和 C# 技术之一。使用 LINQ&#xff0c;开发者可以直接在强类型代码…

java查找字符的方法_Java字符串查找(3种方法)

在给定的字符串中查找字符或字符串是比较常见的操作。字符串查找分为两种形式&#xff1a;一种是在字符串中获取匹配字符(串)的索引值&#xff0c;另一种是在字符串中获取指定索引位置的字符。根据字符查找String 类的 indexOf() 方法和 lastlndexOf() 方法用于在字符串中获取匹…

2018 Kaggle 报告:在技术领域,女性从业者持续减少,00后开始展露头脚

全世界只有3.14 % 的人关注了数据与算法之美就在上个月&#xff0c;Kaggle社区发布了《2018 Kaggle机器学习和数据科学调研》&#xff0c;调研结果显示&#xff1a;在技术领域&#xff0c;女性从业者持续减少&#xff1b;00后开始登上从业舞台&#xff1b;而且&#xff0c;23%受…