如何判断当前请求的是健康检查API
前言
为了性能监控的目的,我们使用了Middleware记录所有请求的Log。实现代码如下:
public class RequestLoggingMiddleware
{...public async Task Invoke(HttpContext context){try{await _next(context);}finally{//Log}}
}
同时,我们在服务中加入了健康检查API,用于定时访问检查服务状态。
这就导致Log中记录了大量健康检查API的日志,需要有方法判断出这类请求,并忽略日志写入。
判断路由地址
健康检查API的实现代码如下:
public void ConfigureServices(IServiceCollection services)
{...services.AddHealthChecks();
}public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{ ...app.UseEndpoints(endpoints =>{endpoints.MapHealthChecks("/health");endpoints.MapControllers();});
}
因此,可以根据路由地址是否以/health
开头来判断。
判断DisplayName
上面的方法虽然可以实现要求,但是感觉太low了!
而且,如果把Middleware做成公共组件,那就不能限制健康检查API的路由地址的格式。
需要重新找到一个不变的数据值用于判断。
查看Maphealthchecks的实现代码,发现这样一句代码:
private static IEndpointConventionBuilder MapHealthChecksCore(IEndpointRouteBuilder endpoints, string pattern, HealthCheckOptions? options)
{ ...return endpoints.Map(pattern, pipeline).WithDisplayName(DefaultDisplayName);
}
而DisplayName是个常量:
private const string DefaultDisplayName = "Health checks";
因此,我们只需判断Endpoint的DisplayName即可:
public class RequestLoggingMiddleware
{...public async Task Invoke(HttpContext context){try{await _next(context);}finally{if (context.GetEndpoint()?.DisplayName == "Health checks"){ }else{//Log}}}
}
结论
现在,我们已经可以轻松识别出健康检查API请求。
推荐使用DisplayName方式,容错性更高。
如何判断当前请求的是健康检查API相关推荐
- 如何判断当前请求的API类型
前言 上次,我们判断了<当前请求是否健康检查API>,避免其写入日志. 但是,对于我们自己开发的API来说,最好也能来区分,比如调试用API,就不需要再写调用日志了. DisplayNam ...
- nginx限流健康检查
Nginx原生限流模块: ngx_http_limit_conn_module模块 根据前端请求域名或ip生成一个key,对于每个key对应的网络连接数进行限制. 配置如下: http模块 serve ...
- 负载均衡 > 用户指南 > 健康检查 > 健康检查概述
健康检查概述 更新时间:2019-08-16 15:46:34 编辑我的收藏 本页目录 健康检查过程 HTTP/HTTPS监听健康检查机制 TCP监听健康检查机制 UDP监听健康检查 健康检查时间窗 ...
- 可视化ASP.Net Core Web API健康检查
前言 ASP.NET Core提供运行状况检查Middleware和库,以便于报告应用的运行状况. 使用方式也很简单. 引用Nuget包Microsoft.Extensions.Diagnostics ...
- linux网络健康度检测,linux运维、架构之路-K8s健康检查Health Check
一.Health Check介绍 强大的自愈能力是k8s容器编排引擎一个重要特性,自愈能力的默认实现方式为自动重启发生故障的容器,另外还可以利用Liveness和Readiness探测机制设置更精细的 ...
- 服务器状态显示down,Eureka心跳健康检查机制和Spring boot admin 节点状态一直为DOWN的排查(忽略某一个节点的健康检查)...
运行阶段执行健康检查的目的是为了从Eureka服务器注册表中识别并删除不可访问的微服务,Eureka 服务器并不是向客户端发送心跳请求,而是反过来,Eureka 客户端将心跳发送到Eureka服务器, ...
- Knative Serving 健康检查机制分析
作者| 阿里云智能事业群技术专家牛秋霖(冬岛) 导读:从头开发一个Serverless引擎并不是一件容易的事情,今天咱们就从Knative的健康检查说起.通过健康检查这一个点来看看Serverles ...
- nginx后端节点健康检查
一.nginx健康检查的三种方式 1.ngx_http_proxy_module 模块和ngx_http_upstream_module模块(自带)官网地址:http://nginx.org/en/d ...
- 如何在 ASP.Net Core 中实现 健康检查
健康检查 常用于判断一个应用程序能否对 request 请求进行响应,ASP.Net Core 2.2 中引入了 健康检查 中间件用于报告应用程序的健康状态. ASP.Net Core 中的 健康检查 ...
最新文章
- Linux/CentOS优化配置 汇总
- tril--下三角矩阵的抽取
- 二维码会被人类扫完吗?
- 双线性内插怎么缩小_汗蒸桶怎么选择才是最好的
- PHP在Postman上面进行xdebug的测试
- 51 nod 1495 中国好区间 奇葩卡时间题 700ms 卡O(n*log(n)), 思路:O(n)尺取法
- Angular Component input字段传递值的几种变式 variant
- 创建虚拟磁盘的小工具软件plainmaker.exe
- python OSError: [Errno 24] Too many open files | HTTPConnectionPool(host=‘‘, port=80): Max retries e
- Calender日历类
- php html 停止工作,换行符php和html无法正常工作
- selenium 隐藏窗口_anaconda下安装selenium包
- Caffe编写Python layer
- click事件在什么时候出发_如何解决移动端Click事件300ms延迟的问题?
- 蚂蚁课堂:Consul搭建
- idea android远程调试,idea 远程调试
- IDEA格式化js代码
- 安卓pdf阅读器_详细解读:除了Kindle,还有哪些电子阅读器可以满足书迷的需求?...
- 软考信息系统项目管理师考试难度大概是怎样的?
- 计算机树的逻辑结构,树结构(示例代码)