使用网关之后我们面临的一个问题就是监控,我们需要知道网关的实时状态,比如当前的请求吞吐量、请求耗费的时间、请求峰值甚至需要知道具体哪个服务的哪个方法花费了多少时间。网关作为请求的中转点是监控品牌的要塞。

本篇将针对Ocelot添加Metrics+InfluxDB+Grafana架构的监控。

1.下载安装InfluxDB和Grafana

在使用前需要先下载InfluxDB和Grafana这两个工具,下载安装方式大家可以先看下Edison Zhou大神的这篇:https://www.cnblogs.com/edisonchou/p/integrated_performance_monitoring_foundation.html,博主也是从这里学习的。

2.使用

安装好后,我们可以通过127.0.0.1:8083访问InfluxDB的可视化界面:

图中标出来的地方是InfluxDB提供给我们操作语句模板,通过Create Database创建一个名为“MIMetrics”的数据库,然后在右上角的设置按钮里我们可以设置用户名和密码,这里就不截图了,大家打开看一下就明白了。

在我们的Ocelot项目中通过NuGet引用下面几个包:

然后需要在Startup.cs启动类中添加如下配置:

public void ConfigureServices(IServiceCollection services)
{ #region 注册Metrics
bool isOpenMetrics = Convert.ToBoolean(Configuration["AppMetrics:IsOpen"]);
if (isOpenMetrics)
{
string database = Configuration["AppMetrics:DatabaseName"];
string connStr = Configuration["AppMetrics:ConnectionString"];
string app = Configuration["AppMetrics:App"];
string env = Configuration["AppMetrics:Env"];
string username = Configuration["AppMetrics:UserName"];
string password = Configuration["AppMetrics:Password"]; var uri = new Uri(connStr);
var metrics = AppMetrics.CreateDefaultBuilder().Configuration.Configure(options =>
{
options.AddAppTag(app);
options.AddEnvTag(env);
}).Report.ToInfluxDb(options =>
{
options.InfluxDb.BaseUri = uri;
options.InfluxDb.Database = database;
options.InfluxDb.UserName = username;
options.InfluxDb.Password = password;
options.HttpPolicy.BackoffPeriod = TimeSpan.FromSeconds(30);
options.HttpPolicy.FailuresBeforeBackoff = 5;
options.HttpPolicy.Timeout = TimeSpan.FromSeconds(10);
options.FlushInterval = TimeSpan.FromSeconds(5);
}).Build(); services.AddMetrics(metrics);
services.AddMetricsReportScheduler();
services.AddMetricsTrackingMiddleware();
services.AddMetricsEndpoints();
services.AddMetricsTrackingMiddleware(options => options.IgnoredHttpStatusCodes = new[] { 404 });
}
#endregion services.AddOcelot(Configuration)
.AddConsul(); services.AddMvc(options =>
{
options.Filters.Add<HttpGlobalExceptionFilter>(); //加入全局异常类
});
} // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApplicationLifetime lifetime, ILoggerFactory loggerFactory)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
} //loggerFactory.AddConsole(Configuration.GetSection("Logging"));
bool isOpenMetrics = Convert.ToBoolean(Configuration["AppMetrics:IsOpen"]);
if(isOpenMetrics)
{
app.UseMetricsAllMiddleware();
app.UseMetricsAllEndpoints();
} app.UseOcelot(); app.UseMvc();
}

蓝色部分的代码是我们这次需要的,通过注册Metrics中间件的形式使用InfluxDB,然后下面是配置文件中需要添加的:

{
"Logging": {
"IncludeScopes": false,
"Debug": {
"LogLevel": {
"Default": "Warning"
}
},
"Console": {
"LogLevel": {
"Default": "Warning"
}
}
},
"AppMetrics": {
"IsOpen": true,
"DatabaseName": "MIMetrics",
"ConnectionString": "http://127.0.0.1:8086",
"UserName": "admin",
"Password": "tangjinghe",
"App": "Ocelot",
"Env": "Development"
}
}

这样,配置就算完成了,然后重新运行起网关,发送几个请求后查看http://localhost:3000的Grafana的可视化界面:

.Net Core 商城微服务项目系列(三):Ocelot网关接入Grafana监控的更多相关文章

  1. .Net Core 商城微服务项目系列(一):使用IdentityServer4构建基础登录验证

    这里第一次搭建,所以IdentityServer端比较简单,后期再进行完善. 1.新建API项目MI.Service.Identity,NuGet引用IdentityServer4,添加类InMemo ...

  2. .Net Core 商城微服务项目系列(十四):分布式部署携程Apollo构建配置中心

    一.开场白 在系统设计里我们有很多配置希望独立于系统之外,而又能够被系统实时读取.但是在传统的系统设计里,配置信息通常是耦合在系统内的,比如.net里通常会放在App.config或者web.conf ...

  3. .Net Core 商城微服务项目系列(五):使用Polly处理服务错误

    项目进行微服务化之后,随之而来的问题就是服务调用过程中发生错误.超时等问题的时候我们该怎么处理,比如因为网络的瞬时问题导致服务超时,这在我本人所在公司的项目里是很常见的问题,当发生请求超时问题的时候, ...

  4. .Net Core 商城微服务项目系列(七):使用消息队列(RabbitMQ)实现服务异步通信

    RabbitMQ是什么,怎么使用我就不介绍了,大家可以到园子里搜一下教程.本篇的重点在于实现服务与服务之间的异步通信. 首先说一下为什么要使用消息队列来实现服务通信:1.提高接口并发能力.  2.保证 ...

  5. .Net Core 商城微服务项目系列(十二):使用k8s部署商城服务

    一.简介 本篇我们将会把商城的服务部署到k8s中,同时变化的还有以下两个地方: 1.不再使用Consul做服务的注册和发现,转而使用k8s-dns来实现. 2.不再使用Ocelot作为业务网关,使用T ...

  6. .Net Core 商城微服务项目系列(六):搭建自己的Nuget包服务器

    当我们使用微服务架构之后,紧接而来的问题便是服务之间的程序集引用问题,可能没接触过的同学不太理解这句话,都已经微服务化了为什么还要互相引用程序集,当然可以不引用.但是我们会有这样一种情况,我们的每个接 ...

  7. .Net Core 商城微服务项目系列(八):购物车

    最近加班有点多,一周五天,四天加班到11点+,心很累.原因是我当前在的这个组比较特殊,相当于业务的架构组,要为其它的开发组提供服务和监控.所以最近更新的也少,不过这个元旦三天假应该会更新三篇. 这篇是 ...

  8. .Net Core 商城微服务项目系列(十五): 构建定时任务调度和消息队列管理系统

    一.系统描述 嗨,好久不见各位老哥,最近有点懒,技术博客写的太少了,因为最近在写小说,写的顺利的话说不定就转行了,哈哈哈哈哈哈哈哈哈. 今天要介绍的是基于.Net Core的定时任务调度和消息队列管理 ...

  9. .Net Core 商城微服务项目系列(十三):搭建Log4net+ELK+Kafka日志框架

    之前是使用NLog直接将日志发送到了ELK,本篇将会使用Docker搭建ELK和kafka,同时替换NLog为Log4net. 一.搭建kafka 1.拉取镜像 //下载zookeeper docke ...

随机推荐

  1. C#开发BIMFACE系列11 服务端API之源文件删除

    系列目录     [已更新最新开发文章,点击查看详细] 通过BIMFACE控制台或者调用服务接口上传文件成功后,如果不再需要该文件,则可以通过BIMFACE平台提供的“源文件删除”服务接口删除具体的文 ...

  2. Springboot源码分析之事务问题

    摘要: 事务在后端开发中无处不在,是数据一致性的最基本保证.要明白进事务的本质就是进到事务切面的代理方法中,最常见的是同一个类的非事务方法调用一个加了事务注解的方法没进入事务.我们以cglib代理为例 ...

  3. 01 Python 基础数据类型

    基础数据类型,有7种类型,存在即合理. 1.int 整数 主要是做运算的 .比如加减乘除,幂,取余  + - * / ** %...2.bool 布尔值 判断真假以及作为条件变量3.str 字符串 存 ...

  4. 8.8&8.9 dp训练小结

    写了两天的dp题,表示大多dp都不会啊,还是爆搜大法好.我真的太蒻了dp还是要多做题啊,一些基本的套路还是不熟,真正写对的dp也就一道,还一道爆搜过的,dp还有很深的坑要填啊.. 8.8 T1 质数和 ...

  5. Hello, OpenWrite

    目录 Markdown For Typora Overview Block Elements Paragraph and line breaks Headers Blockquotes Lists T ...

  6. Spring Cloud(一):服务注册与发现

    Spring Cloud是什么 Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总线.负载均 ...

  7. EasyUI总结(一)-- 入门

    一.EasyUI下载 EasyUI官方下载地址:http://www.jeasyui.com/download/index.php,目前最新的版本是:jQuery EasyUI 1.4.1

  8. Python分布式爬虫必学框架Scrapy打造搜索引擎

    Python分布式爬虫必学框架Scrapy打造搜索引擎 部分课程截图: 点击链接或搜索QQ号直接加群获取其它资料: 链接:https://pan.baidu.com/s/1-wHr4dTAxfd51M ...

  9. day01小结

    Java特点 1,面向对象的(write once,run anywhere) 2,跨平台的 ,,,,,, Java体系结构 JavaSE,JavaEE,JavaME,Java Card 对JDK,J ...

  10. airflow + CeleryExecutor 环境搭建

    airflow整合环境搭建 1. 整体结构 mysql -> 后端数据库 redis -> 用于broker CeleryExecutor -> 执行器 2. 环境安装 2.1,安装 ...