.Net Core 商城微服务项目系列(三):Ocelot网关接入Grafana监控
使用网关之后我们面临的一个问题就是监控,我们需要知道网关的实时状态,比如当前的请求吞吐量、请求耗费的时间、请求峰值甚至需要知道具体哪个服务的哪个方法花费了多少时间。网关作为请求的中转点是监控品牌的要塞。
本篇将针对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监控的更多相关文章
- .Net Core 商城微服务项目系列(一):使用IdentityServer4构建基础登录验证
这里第一次搭建,所以IdentityServer端比较简单,后期再进行完善. 1.新建API项目MI.Service.Identity,NuGet引用IdentityServer4,添加类InMemo ...
- .Net Core 商城微服务项目系列(十四):分布式部署携程Apollo构建配置中心
一.开场白 在系统设计里我们有很多配置希望独立于系统之外,而又能够被系统实时读取.但是在传统的系统设计里,配置信息通常是耦合在系统内的,比如.net里通常会放在App.config或者web.conf ...
- .Net Core 商城微服务项目系列(五):使用Polly处理服务错误
项目进行微服务化之后,随之而来的问题就是服务调用过程中发生错误.超时等问题的时候我们该怎么处理,比如因为网络的瞬时问题导致服务超时,这在我本人所在公司的项目里是很常见的问题,当发生请求超时问题的时候, ...
- .Net Core 商城微服务项目系列(七):使用消息队列(RabbitMQ)实现服务异步通信
RabbitMQ是什么,怎么使用我就不介绍了,大家可以到园子里搜一下教程.本篇的重点在于实现服务与服务之间的异步通信. 首先说一下为什么要使用消息队列来实现服务通信:1.提高接口并发能力. 2.保证 ...
- .Net Core 商城微服务项目系列(十二):使用k8s部署商城服务
一.简介 本篇我们将会把商城的服务部署到k8s中,同时变化的还有以下两个地方: 1.不再使用Consul做服务的注册和发现,转而使用k8s-dns来实现. 2.不再使用Ocelot作为业务网关,使用T ...
- .Net Core 商城微服务项目系列(六):搭建自己的Nuget包服务器
当我们使用微服务架构之后,紧接而来的问题便是服务之间的程序集引用问题,可能没接触过的同学不太理解这句话,都已经微服务化了为什么还要互相引用程序集,当然可以不引用.但是我们会有这样一种情况,我们的每个接 ...
- .Net Core 商城微服务项目系列(八):购物车
最近加班有点多,一周五天,四天加班到11点+,心很累.原因是我当前在的这个组比较特殊,相当于业务的架构组,要为其它的开发组提供服务和监控.所以最近更新的也少,不过这个元旦三天假应该会更新三篇. 这篇是 ...
- .Net Core 商城微服务项目系列(十五): 构建定时任务调度和消息队列管理系统
一.系统描述 嗨,好久不见各位老哥,最近有点懒,技术博客写的太少了,因为最近在写小说,写的顺利的话说不定就转行了,哈哈哈哈哈哈哈哈哈. 今天要介绍的是基于.Net Core的定时任务调度和消息队列管理 ...
- .Net Core 商城微服务项目系列(十三):搭建Log4net+ELK+Kafka日志框架
之前是使用NLog直接将日志发送到了ELK,本篇将会使用Docker搭建ELK和kafka,同时替换NLog为Log4net. 一.搭建kafka 1.拉取镜像 //下载zookeeper docke ...
随机推荐
- 你真的了解Mybatis的${}和#{}吗?是否了解应用场景?
转自:https://www.cnblogs.com/mytzq/p/9321526.html 动态sql是mybatis的主要特性之一.在mapper中定义的参数传到xml中之后,在查询之前myba ...
- lightoj 1097 - Lucky Number(线段树)
Lucky numbers are defined by a variation of the well-known sieve of Eratosthenes. Beginning with the ...
- CF992C Nastya and a Wardrobe 数学 第四道
Nastya and a Wardrobe time limit per test 1 second memory limit per test 256 megabytes input standar ...
- .net core Webapi +EF
开发工具 Vs2017 +MSsqlsever 打开VS2017,新建web项目 点击确认,生成项目,在项目中增加文件夹Model,在Model中增加类TodoItem public class To ...
- 洛谷P5335 [THUSC2016]补退选 题解
传送门 一道字典树的例题吧 先说下思路前1,2两个条件都易满足,字典树插入修改即可,第三个条件可用动态数组来实现,存下它的size表示当前有几个节点经过(即人数),其下标表示第几次出现,里面存入操作次 ...
- 良许 | 听说,有个同事因为关闭服务器被打进 ICU ……
提问:你是如何关闭电脑的? 普通青年 文艺青年 二逼青年 你是属于哪一种呢? 实话说, 这三种良许都干过~ 还好我没有对服务器这么做, 否则-- 分分钟被打进 ICU -- 1. 关机命令知多少 对于 ...
- 学习 Nginx+IIS 分布式测试
首先,从Nginx官网(http://nginx.org/en/download.html)下载了一个Window版本,解压后如图: 修改conf文件夹里面的配置文件nginx.conf,默认的808 ...
- 使用FlameGraph火焰图分析JAVA应用性能
开源项目推荐 Pepper Metrics是我与同事开发的一个开源工具(https://github.com/zrbcool/pepper-metrics),其通过收集jedis/mybatis/ht ...
- spring boot日志logback输出
logback是spring boot的官方推荐日志. 1.在代码中使用logback日志: import org.slf4j.Logger; import org.slf4j.LoggerFacto ...
- FreeSql (三十四)CodeFirst 迁移说明
FreeSql 支持 CodeFirst 迁移结构至数据库,这应该是(O/RM)必须标配的一个功能. 与其他(O/RM)不同FreeSql支持更多的数据库特性,而不只是支持基础的数据类型,这既是优点也 ...