云原生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中的运行状况检查。
日志
无论您使用什么工具调查生产环境中的问题,最终都会是以日志的形式反应问题的根本原因。 在分布式环境中,您需要确保日志记录包含有助于调试的深入信息。 可以从一个集中的地方查询它们。 每个日志记录都需要有一个关联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-microservices
云原生ASP.NET Core程序的可监测性和可观察性的更多相关文章
- Asp.Net Core 程序部署到Linux(centos)生产环境(二):docker部署
运行环境 照例,先亮环境:软件的话我这里假设你已经批准好了.net core 运行环境,未配置可以看我的这篇[linux(centos)搭建.net core 运行环境] 腾讯云 centos:7.2 ...
- 从头认识一下docker-附带asp.net core程序的docker化部署
从头认识一下docker-附带asp.net core程序的docker化部署 简介 在计算机技术日新月异的今天, Docker 在国内发展的如火如荼,特别是在一线互联网公司, Docker 的使用是 ...
- 如何在ASP.NET Core程序启动时运行异步任务(3)
原文:Running async tasks on app startup in ASP.NET Core (Part 3) 作者:Andrew Lock 译者:Lamond Lu 之前我写了两篇有关 ...
- 如何优雅的利用Windows服务来部署ASP.NET Core程序
上一篇文章中我给大家讲述了五种部署ASP.NET Core网站的方法,其中有一种方式是通过Windows服务来进行部署,这样既可以做到开启自启动,又不会因为iis的反向代理而损失部分性能.但是美中不足 ...
- Asp.Net Core 程序部署到Linux(centos)生产环境(一):普通部署
运行环境 照例,先亮底 centos:7.2 cpu:1核 2G内存 1M带宽 辅助工具:xshell xftp 搭建.net core运行环境 .net core 的运行环境我单独写了一篇,请看我的 ...
- .NET CORE学习笔记系列(4)——ASP.NET CORE 程序启用SSL
一.什么是SSL? 1.概念: SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数 ...
- [转帖]以Windows服务方式运行ASP.NET Core程序
以Windows服务方式运行ASP.NET Core程序 原作者blog: https://www.cnblogs.com/guogangj/p/9198031.htmlaspnet的blog 需要持 ...
- ASP.NET Core 程序发布到Linux(Centos7)爬坑实战
前言 前阶段弄了个Linux系统想倒腾倒腾.NET Core,结果看了下网上的资料,大部分都是过期的,走了不少弯路,不过还好,今下午总算捣鼓出来了.Linux命令太多了,唉.血的教训:安装一定要看官网 ...
- ASP.NET Core教程:ASP.NET Core程序部署到Linux
一.前言 这篇文章我们将讲解如何将ASP.NET Core 程序部署到Linux.这里我们使用的是虚拟机里面安装的Centos7.这里的ASP.NET Core程序,以上篇文章中发布的框架依赖文件为例 ...
随机推荐
- 记docker安装和ida远程调试问题
docker安装 1.卸载可能存在的旧版本: sudo apt-get remove docker docker-engine docker-ce docker.io 如果想要彻底卸载docker ...
- Linux递归压缩图片脚本
1 压缩图片 使用ImageMagick的convert命令进行压缩图片,一般只需要一个指定压缩质量的参数,比如: convert -quality 75 1.jpg 1_compress.jpg 可 ...
- kubernetes addons之node-problem-detector
node-problem-detector简介 node-problem-detector的作用是收集k8s集群管理中节点问题,并将其报告给apiserver.它是在每个节点上运行的守护程序.node ...
- .Net之Docker部署详细流程
开篇语 自己从头开始走一遍docker部署.net的流程,作为一种学习总结,以及后续会写一些在该基础之上的文章. 本次示例环境:vs2019.net5.docker.postman 创建项目 本次事例 ...
- WordPress伪静态规则设置
伪静态:即网站本身是动态网页如.php..asp..aspx等格式,而这类网页还带"?"加参数来读取数据库.开启伪静态后,动态网页即被转换重写成静态网页类型页面. WordPres ...
- featureCarousel.js 3d轮播图插件
jQuery Feature Carousel 插件是国外的一比较优秀的旋转木马图片插件. 点击这里进入原文. 插件特点: 1.处理div的3d旋转木马效果. 2.支持一个中心,2个侧面的功能 3.中 ...
- Android Apk加固的初步实现思路(dex整体加固)
一.前 言 Android Apk加固的发展已经有一段时间了,相对来说本篇博客要记录的Android加壳的实现思路是4年的东西了,已经被老鸟玩烂了,Android加固的安全厂商也不会采用这么粗犷的方式 ...
- URL中字符的含义
目录 URL中的特殊字符 #号的作用 URL中的特殊字符 我们经常会看到URL中有一些特殊的字符,比如 #,?,& ,/ ,+ 等.那么,它们的含义是什么呢? 特殊含义 十六进制 + 表示空格 ...
- 逆向 stdio.h 函数库 fwrite 函数(调试版本)
0x01 fwrite 函数 函数原型: size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) 函数功能:把 ...
- 【python】Leetcode每日一题-设计停车系统
[python]Leetcode每日一题-设计停车系统 [题目描述] 请你给一个停车场设计一个停车系统.停车场总共有三种不同大小的车位:大,中和小,每种尺寸分别有固定数目的车位. 请你实现 Parki ...