.NET Core 中的健康检查

news/2025/2/12 15:51:39/文章来源:https://www.cnblogs.com/MrChuJiu/p/18702734

介绍

在现代的软件架构中,应用程序的健康状态监测是一个不可或缺的环节。健康检查(Health Checks)为应用程序提供了一种机制,通过 HTTP 端点暴露其运行状态。这些端点不仅可以指示应用程序自身是否健康,还可以检查应用程序依赖的外部服务(如数据库、缓存系统等)的健康状况。本文将详细介绍如何在 ASP.NET Core 中配置和使用健康检查。

健康检查的重要性

健康检查对于应用程序的监控和运维至关重要。它们可以被监控系统用来实时了解应用程序的健康状态,也可以用于流量路由和负载均衡。通过健康检查,运维人员可以及时发现并处理潜在的问题,确保应用程序的稳定运行。

ASP.NET Core 健康检查基础配置

在 ASP.NET Core 中,配置健康检查非常简单。你只需要注册健康检查服务并映射一个端点即可。

以下是一个基础配置的示例:

$$$var builder = WebApplication.CreateBuilder(args);

builder.Services.AddHealthChecks();

var app = builder.Build();

app.MapHealthChecks("/healthz");

app.Run();
$$$

默认情况下,如果没有配置具体的健康检查,该端点将返回一个简单的健康响应,状态码为 200 OK,内容为纯文本。

自定义健康检查

虽然 ASP.NET Core 提供了一些内置的健康检查,但你可能需要根据自己的需求创建自定义的健康检查。为此,你需要实现 IHealthCheck 接口。

以下是一个自定义健康检查的示例:

$$$public class MyHealthCheck : IHealthCheck
{
public Task CheckHealthAsync(
HealthCheckContext context,
CancellationToken cancellationToken = default)
{
bool healthy = true; // 这里可以添加你的检查逻辑

    if (healthy)return Task.FromResult(HealthCheckResult.Healthy("The API is healthy"));return Task.FromResult(HealthCheckResult.Unhealthy("The API is unhealthy"));
}

}
$$$

注册自定义健康检查也非常简单:

$$$builder.Services
.AddHealthChecks()
.AddCheck("Custom");
$$$

集成 Entity Framework

如果你的应用程序使用了 Entity Framework,你不需要编写自定义的健康检查来检测数据库连接。你可以通过添加 Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore NuGet 包来实现这一点。

然后,注册数据库上下文的健康检查:

$$$builder.Services
.AddHealthChecks()
.AddCheck("Custom")
.AddDbContextCheck();
$$$

默认情况下,数据库健康检查会调用 EF 的 CanConnectAsync 方法。你可以通过 AddDbContextCheck 方法的重载来更改这一行为。

如果数据库不可用,你将收到一个不健康的检查结果。

健康检查的状态与自定义

除了 “健康” 和 “不健康” 状态外,健康检查还提供了一个 “降级” 状态。你可以通过 AddCheckAddDbContextCheck 方法的参数或自定义健康检查中的 HealthCheckResult 来更改状态。

以下是一个示例:

$$$builder.Services
.AddHealthChecks()
.AddCheck("Custom")
.AddDbContextCheck(
failureStatus: HealthStatus.Degraded);
$$$

高级配置

ASP.NET Core 的内置健康检查非常灵活。你可以自定义输出、失败状态和 HTTP 状态码。例如,你可以为不同的健康检查配置不同的端点,或者根据不同的环境配置不同的健康检查。

以下是一个高级配置的示例:

$$$var builder = WebApplication.CreateBuilder(args);

builder.Services.AddHealthChecks()
.AddCheck("Custom")
.AddDbContextCheck(
failureStatus: HealthStatus.Degraded);

var app = builder.Build();

app.MapHealthChecks("/healthz", new HealthCheckOptions
{
ResponseWriter = async (context, report) =>
{
context.Response.ContentType = "application/json";
var response = new
{
status = report.Status.ToString(),
checks = report.Entries.Select(entry => new
{
name = entry.Key,
status = entry.Value.Status.ToString(),
description = entry.Value.Description
})
};
await context.Response.WriteAsync(JsonConvert.SerializeObject(response));
}
});

app.Run();
$$$

总结

健康检查是应用程序运维的重要组成部分。通过本文的介绍,你应该已经了解了如何在 ASP.NET Core 中配置和使用健康检查。无论你的应用程序是否已经使用了健康检查,现在都是一个开始的好时机。希望这个简单的教程能够帮助你更好地监控和管理你的应用程序。

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

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

相关文章

活动营销系统

一、整体架构图二、核心业务系统介绍 2.1.接入层统一异常处理逻辑2.2.邀请服务逻辑2.3.权益发放服务2.4.排行榜服务 2.4.1.榜单服务数据结构 数据结构分为两块:配置中心数据,因为排行榜没有后台配置平台,只能将配置数据放到配置中心,具备实时更改配置的能力 数据表,主要是排行榜…

004 条件渲染

1、v-ifv-if指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回true值的时候被渲染。<p v-if="flag">我是孙猴子</p>data(){return{flag:true}} 2、v-else你可以使用 v-else 指令来表示 v-if 的"else块"<p v-if="flag&quo…

Tinyfox 简易教程之:Hello World!

Tinyfox程序设计系列教程之入门篇一,什么是 Tinyfox: Tinyfox 是一款自带 HTTP 服务器的以 WebApi、WebSocket 及“动态HTML”为核心功能的超轻量级的独立性极强的高性能 Web 应用程序基础框架。 Tinyfox 简单易用,性能强劲,跨平台,既支持 Linux 也支持 Windows,既支持 x…

中电金信:更智能、更精准、更专业,中电金信AI产品全栈接入DeepSeek

短短两周的时间,AI届新星DeepSeek凭借低成本、高性能和开源策略,以“中国速度”席卷全网,逆袭成为全球用户量增速最快的AI模型。作为大模型领域的一匹黑马,DeepSeek为千行百业提供了AI解决方案的新选择。2025年开工首日,中电金信研究院便第一时间在产品平台、智能应用、智…

deepseek基础篇--本地知识库推理

一.Ollama 搜索安装 dmeta-embedding-zh https://ollama.com/shaw/dmeta-embedding-zh dmeta-embedding-zh 是一个仅含 4 亿参数的中文嵌入模型,适用于多种场景。它在 MTEB 基准测试中表现出色,尤其适合语义检索、RAG 和其他 LLM 应用。 安装成功 二、使用工具 Cherry Studi…

认识嵌入式开发需要的设备

认识嵌入式开发需要的设备开发板 Arduino用于快速原型设计和学习嵌入式系统基础树莓派用于学习Linux嵌入式系统和复杂应用开发STM32开发板用于学习ARM Cortex-M系列微控制器的开发ESP32开发板用于学习Wi-Fi和蓝牙等无线通信技术的开发GD32开发板调试工具 示波器观察电信号的波形…

nging Go语言Web管理面板docker-compose部署测试

Nging是一个网站服务程序,可以管理和配置 Caddy 和 Nginx 站点,并附带了实用的周边工具,例如:计划任务、MySQL管理、Redis管理、FTP管理、SSH管理、服务器管理等。Nging是一个网站服务程序,可以管理和配置 Caddy 和 Nginx 站点,并附带了实用的周边工具,例如:计划任务、…

近端策略优化(PPO)算法的理论基础与PyTorch代码详解

近端策略优化(Proximal Policy Optimization, PPO)算法作为一种高效的策略优化方法,在深度强化学习领域获得了广泛应用。特别是在大语言模型(LLM)的人类反馈强化学习(RLHF)过程中,PPO扮演着核心角色。本文将深入探讨PPO的基本原理和实现细节。 PPO属于在线策略梯度方法的范畴…

定制化训练DeepSeek模型:LoAR、COT推理与SFT技术应用

DeepSeek-R1 模型微调系列DeepSeek-R1 模型微调系列一. 前言介绍本文内容:1.1 项目背景1.2 LoRA和 QLoRA 简介1.3 LLaMA 架构和 Qwen 架构LLaMA 架构Qwen 架构二. 环境准备2.1 Unsloth 安装(显卡版本-暂时不用)2.2 创建Python项目2.3 python 依赖库2.2 LoRA peft 安装2.3 Wa…

Ubuntu Linux部署DeepSeek(转载用于学习)

合集 - DeepSeek(4)1.Ubuntu Linux部署DeepSeek02-062.Windows11本地部署DeepSeek加速02-073.DeepSeek部署本地知识库02-084.DeepSeek+Zotero02-11收起 技术背景 DeepSeek是这段时间最热门的话题之一,其蒸馏模型可以实现低成本而高质量的推理,使得我们现在可以在本地小型化的…

deepseek 本地搭建 知识库 使用gpu cpu

下载安装LM Studio官网地址: https://lmstudio.ai/如图,下载完成直接下一步下一步安装即可. 不能飞行上网就用这个网站下载模型 https://hf-mirror.com/Rust编程语言群 1036955113 java新手自学群 626070845 java/springboot/hadoop/JVM 群 4915800 Hadoop/mongodb(搭建/开发…

车辆电子档案系统

在高阶自动驾驶场景和MaaS(Mobility as a Service)业务中,自动驾驶车辆的状态直接关系到整体运营的安全和效率。因此,拥有一套多维度预测、分析车辆指标的电子档案系统显得尤为重要。经纬恒润研发的车辆电子档案是汇总整车各类数据详细信息、对车辆上各项指标进行分析预测及…