前言

为了性能监控的目的,我们使用了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相关推荐

  1. 如何判断当前请求的API类型

    前言 上次,我们判断了<当前请求是否健康检查API>,避免其写入日志. 但是,对于我们自己开发的API来说,最好也能来区分,比如调试用API,就不需要再写调用日志了. DisplayNam ...

  2. nginx限流健康检查

    Nginx原生限流模块: ngx_http_limit_conn_module模块 根据前端请求域名或ip生成一个key,对于每个key对应的网络连接数进行限制. 配置如下: http模块 serve ...

  3. 负载均衡 > 用户指南 > 健康检查 > 健康检查概述

    健康检查概述 更新时间:2019-08-16 15:46:34 编辑我的收藏 本页目录 健康检查过程 HTTP/HTTPS监听健康检查机制 TCP监听健康检查机制 UDP监听健康检查 健康检查时间窗 ...

  4. 可视化ASP.Net Core Web API健康检查

    前言 ASP.NET Core提供运行状况检查Middleware和库,以便于报告应用的运行状况. 使用方式也很简单. 引用Nuget包Microsoft.Extensions.Diagnostics ...

  5. linux网络健康度检测,linux运维、架构之路-K8s健康检查Health Check

    一.Health Check介绍 强大的自愈能力是k8s容器编排引擎一个重要特性,自愈能力的默认实现方式为自动重启发生故障的容器,另外还可以利用Liveness和Readiness探测机制设置更精细的 ...

  6. 服务器状态显示down,Eureka心跳健康检查机制和Spring boot admin 节点状态一直为DOWN的排查(忽略某一个节点的健康检查)...

    运行阶段执行健康检查的目的是为了从Eureka服务器注册表中识别并删除不可访问的微服务,Eureka 服务器并不是向客户端发送心跳请求,而是反过来,Eureka 客户端将心跳发送到Eureka服务器, ...

  7. Knative Serving 健康检查机制分析

    作者|  阿里云智能事业群技术专家牛秋霖(冬岛) 导读:从头开发一个Serverless引擎并不是一件容易的事情,今天咱们就从Knative的健康检查说起.通过健康检查这一个点来看看Serverles ...

  8. nginx后端节点健康检查

    一.nginx健康检查的三种方式 1.ngx_http_proxy_module 模块和ngx_http_upstream_module模块(自带)官网地址:http://nginx.org/en/d ...

  9. 如何在 ASP.Net Core 中实现 健康检查

    健康检查 常用于判断一个应用程序能否对 request 请求进行响应,ASP.Net Core 2.2 中引入了 健康检查 中间件用于报告应用程序的健康状态. ASP.Net Core 中的 健康检查 ...

最新文章

  1. Linux/CentOS优化配置 汇总
  2. tril--下三角矩阵的抽取
  3. 二维码会被人类扫完吗?
  4. 双线性内插怎么缩小_汗蒸桶怎么选择才是最好的
  5. PHP在Postman上面进行xdebug的测试
  6. 51 nod 1495 中国好区间 奇葩卡时间题 700ms 卡O(n*log(n)), 思路:O(n)尺取法
  7. Angular Component input字段传递值的几种变式 variant
  8. 创建虚拟磁盘的小工具软件plainmaker.exe
  9. python OSError: [Errno 24] Too many open files | HTTPConnectionPool(host=‘‘, port=80): Max retries e
  10. Calender日历类
  11. php html 停止工作,换行符php和html无法正常工作
  12. selenium 隐藏窗口_anaconda下安装selenium包
  13. Caffe编写Python layer
  14. click事件在什么时候出发_如何解决移动端Click事件300ms延迟的问题?
  15. 蚂蚁课堂:Consul搭建
  16. idea android远程调试,idea 远程调试
  17. IDEA格式化js代码
  18. 安卓pdf阅读器_详细解读:除了Kindle,还有哪些电子阅读器可以满足书迷的需求?...
  19. 软考信息系统项目管理师考试难度大概是怎样的?
  20. 计算机树的逻辑结构,树结构(示例代码)

热门文章

  1. WebForm 使用点滴。。。。
  2. linux C/C++开发环境搭建指南
  3. windows server 2008更新补丁失败排错
  4. Flask Web表单
  5. laravel中使用的PDF扩展包——laravel-dompdf和laravel-snappy
  6. 2、Saltstack的数据系统
  7. [转] ArcEngine 产生专题图
  8. BootStrap导航栏的使用
  9. 边工作边刷题:70天一遍leetcode: day 11-3
  10. 最后的代课老师———漆红玉[转]