AspNet Core下利用 app-metrics+Grafana + InfluxDB实现高大上的性能监控界面

在日常系统工作中,我们为了洞察系统的问题和运作情况通常会记录日志的方式来进行分析,但是在很多情况下都是被动的在出问题后才会去查日志。在很多时候,我们可能更需要相对实时的了解整个系统或者某一时段的运行的情况,诸如系统出错的频率以及响应时间等等指标。这些动态的准实时信息对于监控整个系统的运行和健康状况非常重要,而本文的主角们能通过很好的配合帮助你实现这个目标,而且是一种高大上的实现方式。想想泡杯茶翘着二郎腿看着偌大的屏幕上有着一堆华丽的仪表和曲线图,即使看不懂也很牛B的样子啊!(谁知道我看得懂看不懂呢,是不是?)

Q: 那什么是App-Metrics?
A: App Metrics是一个开源和跨平台的.NET库,用于记录应用程序中各项指标。可以在.NET Core上运行,也可以在支持.NET 4.5.2的完整.NET框架上运行。
App Metrics对底层数据源做了很好的抽象以支持很多类型的数据库,例如:
InfluxDb、Prometheus、ElasticSearch等等。。
同时他又提供了很多Measurements比如Apdex, Gauges, Counters, Meters, Histograms 等等一大堆


1. 安装Grafana

Q: 什么是Grafana?
A: 一个类似Kibana的可视化数据开源程序,一般配合时间序列数据库进行配合来展示数据

这里为了方便使用docker来运行Grafana


docker run -d --name=grafana -p 3000:3000 grafana/grafana

  

640?wx_fmt=jpeg

接着我们确认下是否正常运行了


docker ps -a

  

640?wx_fmt=jpeg


2. 安装 InfluxDB

InfluxDb是比较流行的时序数据库,可以根据需要替换成Prometheus同上为了方便我们还是使用docker来运行
如果你希望每次都能保持之前docker运行收集的数据可以用docker 的-v选项把目录映射到本机的目录以便持久化数据

==注意influxdb有2个端口一个是admin一个database==

docker run -d -p 8083:8083 -p 8086:8086 --expose 8090 --expose 8099 tutum/influxdb

  

如图另外开一个控制台我们看到后台已经运行了2个容器
640?wx_fmt=jpeg

输入http://127.0.0.1:8083/ 访问InfluxDb的控制界面以便创建数据库


640?wx_fmt=jpeg
640?wx_fmt=jpeg
640?wx_fmt=jpeg


3. 配置AspNet Core2.x

先照常新建一个MVC项目
640?wx_fmt=jpeg

安装所需的第三方库


dotnet add package App.Metrics.Extensions.Mvc
dotnet add package App.Metrics.Formatters.Json
dotnet add package App.Metrics.Extensions.Reporting.InfluxDB

  

控制台显示安装成功!640?wx_fmt=jpeg

  • 修改Startup.cs



using System;
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks; 
using App.Metrics.Configuration; 
using App.Metrics.Extensions.Reporting.InfluxDB; 
using App.Metrics.Extensions.Reporting.InfluxDB.Client; 
using App.Metrics.Reporting.Interfaces; 
using Microsoft.AspNetCore.Builder; 
using Microsoft.AspNetCore.Hosting; 
using Microsoft.AspNetCore.Http; 
using Microsoft.AspNetCore.HttpsPolicy; 
using Microsoft.AspNetCore.Mvc; 
using Microsoft.Extensions.Configuration; 
using Microsoft.Extensions.DependencyInjection; 
namespace WebApplication1 
{ 
    public class Startup 
    { 
        public Startup(IConfiguration configuration)
        { 
            Configuration = configuration; 
        }
        public IConfiguration Configuration { get; } 
        public void ConfigureServices(IServiceCollection services)
        {
        #region 注册 App-Metrics & 配置输出report到influxdb
            var database = "MyMetrics"; 
            var uri = new Uri(" http://127.0.0.1:8086 ");  //本地Docker中运行的influx实例,注意InfluxDb有2个端口别搞错
            services.AddMetrics(options => 
                {
                    options.WithGlobalTags((globalTags, info) =>
                    { 
                        globalTags.Add("app", info.EntryAssemblyName);
                        globalTags.Add("env""stage");
                    }); 
                }) 
                .AddHealthChecks() 
                .AddReporting( 
                    factory => 
                    { 
                        factory.AddInfluxDb( 
                            new InfluxDBReporterSettings 
                            { 
                                InfluxDbSettings = new InfluxDBSettings(database, uri),
                                ReportInterval = TimeSpan.FromSeconds(5)
                            }); 
                    }) 
                .AddMetricsMiddleware(options => options.IgnoredHttpStatusCodes = new[] {404});
        #endregion
            services.Configure<CookiePolicyOptions>(options =>
            { 
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });
            //添加Metric Filter到mvc 
            services.AddMvc(options => options.AddMetricsResourceFilter())
                .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        }
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IApplicationLifetime lifetime)
        { 
            if (env.IsDevelopment()) 
            {
                app.UseDeveloperExceptionPage();
            } 
            else 
            {
                app.UseExceptionHandler("/Home/Error");
                app.UseHsts();
            } 
            app.UseHttpsRedirection(); 
            app.UseStaticFiles(); 
            app.UseCookiePolicy(); 
           loggerFactory.AddConsole(Configuration.GetSection(" Logging "));
        app.UseMetrics(); 
        app.UseMetricsReporting(lifetime); 
            app.UseMvc(routes => 
            { 
                routes.MapRoute( 
                    name: "default", 
                    template: "{controller=Home}/{action=Index}/{id?}");
            }); 
        } 
    }
}

  

  • 接下来就是配置豪华的Grafana了!
    打开浏览器试着访问docker内运行的Grafana容器,默认的用户名和密码是admin/admin 不用担心,第一次登录成功后系统会要求你重新设置新的密码,很贴心!!
    640?wx_fmt=jpeg

    登录成功后,配置Datasource当然是选择我们之前运行的InfluxDb
    640?wx_fmt=jpeg

按图进行配置
640?wx_fmt=jpeg

提交后,如下图显示即配置成功

640?wx_fmt=jpeg

接着就是创建你的Dashboard,可以自己建立也可以自己配置json文件导入,网上有很多例子可以直接下载


  

最后启动AspNetCore站点,再建立点post get put什么的控制器和Action随便访问几次就可以了

640?wx_fmt=jpeg

源代码下载处:https://github.com/linkanyway/appmetrics_Grafana_InfluxDB_demo

(grafana.json是文中导入的dashboard配置文件)

相关文章:

  • .NET Core微服务之基于App.Metrics+InfluxDB+Grafana实现统一性能监控

  • Metrics.net + influxdb + grafana 构建WebAPI的自动化监控和预警

  • 基于Grafana+SimpleJson的灵活报表解决方案

  • .Net Core 2.0+ InfluxDB+Grafana+App Metrics 实现跨平台的实时性能监控

原文地址https://www.cnblogs.com/linkanyway/p/metrics-grafana-influxdb-dotnet-core.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

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

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

相关文章

ACL Beginner Contest 总结——F多项式待补

A - Repeat ACL 签到题1 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<string> #include<cstring> #include<iostream> #include<algorithm> using namespace std; typedef long long ll; typed…

P5319-[BJOI2019]奥术神杖【0/1分数规划,AC自动机,dp】

正题 题目链接:https://www.luogu.com.cn/problem/P5319 题目大意 一个长度为nnn的串TTT&#xff0c;用0∼90\sim 90∼9填充所有的...。 然后给出mmm个串和它们的价值。 一个填充方案的价值等于&#xff1a;若TTT中出现了ccc个给出的串&#xff0c;那价值等于它们的价值乘积…

微软向Linux表白: 向Linux社区开放60000多项专利

10 月 10 日&#xff0c;微软在博客中宣布正式加入开放创新网络&#xff08;Open Invention Network, 简称“OIN”&#xff09;&#xff0c;向所有开源专利联盟的成员开放其专利组合。对开源&#xff0c;微软是认真的OIN 的首席执行官 Keith Bergelt 在采访中说道&#xff1a;微…

【线段树】扇形面积并(P3997)

正题 P3997 题目大意 给若干扇形&#xff0c;问你叠了至少k次的面积 解题思路 把园展开&#xff0c;然后用线段树维护每个点的出现次数 当最大次数大于k&#xff0c;用log的时间查找该点&#xff0c;然后计算结果&#xff0c;因为最多只有2*n次查找&#xff0c;所以不会TLE…

Codeforces Round #675 (Div. 2)——F主席树待补?

A - Fence 把凑得那条边当成最长的边&#xff0c;如果abcd那么将会共线&#xff0c;只要稍微abc大一点即可满足四边形。 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<set> #include<map> #include<cmath…

牛客网dp专题 数位dp

文章目录数位dp例题&#xff1a;NC116652 uva11038 How many 0sNC15035 送分了QAQNC20669 诡异数字NC20665 7的意志NC17385 Beautiful NumbersCF55D NC108918 Beautiful numbers习题&#xff1a;NC17867 明七暗七NC19327 好朋友NC19945 [CQOI2016]手机号码NC20268 [SCOI2009]WI…

YbtOJ#463-序列划分【二分答案,线段树,dp】

正题 题目链接:https://www.ybtoj.com.cn/problem/463 题目大意 给出长度为nnn的序列A,BA,BA,B。要求划分成若干段满足 对于任何i<ji<ji<j&#xff0c;若iii和jjj不是同一段的&#xff0c;要求满足Bi>AjB_i>A_jBi​>Aj​每一段AiA_iAi​的最大值的和不能超…

微软技术大会预览:DevOps顾问是怎样开发自己的产品的

“没有人比我们更懂DevOps”&#xff0c;这句话不是谁都敢说的。从无人问津到整个IT行业趋之若鹜&#xff0c;DevOps火起来也不过是3年的事情&#xff0c;但是leansoftX.com的DevOps资深顾问都是在这个行业已经摸爬滚打了10年的老兵了&#xff0c;从一开始的SDLC&#xff0c;到…

【双指针】Square Pasture G(P7153)

正题 P7153 题目大意 给你平面上的若干点&#xff0c;让你画一个正方形&#xff0c;问框住的点有多少种组合 解题思路 先枚举正方形左右两边的点&#xff0c;然后用双指针计算正方形移动过程中1框住的点 然后把所有点x,y坐标取反&#xff0c;再做一次&#xff0c;这样可以把…

Neat Tree

Neat Tree 题意&#xff1a; n个数&#xff0c;每个区间的贡献为区间内最大值减最小值&#xff0c;问这个n个数的总贡献是多少&#xff1f;也就是n所能组成的所有区间的贡献值之和 题解&#xff1a; 我们可以用单调栈来做 第i个数对答案的贡献值为h[i] * 作为最大值出现的次…

PEACHPIE 0.9.11 版本发布,可以上生产了

PeachPie在官方博客&#xff08;https://www.peachpie.io/2018/10/release-0911-visual-studio.html&#xff09;发布了PeachPie的0.9.11版本 - 用于.NET和.NET Core的PHP编译器和运行时。此更新为项目管理引入了许多新功能&#xff0c;兼容性增强和改进。0.9.11是第一个非预览…

YbtOJ#573-后缀表达【二分图匹配】

正题 题目链接:https://www.ybtoj.com.cn/contest/115/problem/2 题目大意 给出一个包含字母变量和若干种同级操作符的后缀表达式。求一个等价的表达式满足该表达式的连续相同段最少。 1≤∣S∣≤25001\leq |S|\leq 25001≤∣S∣≤2500 解题思路 构建出表达树先&#xff0c;…

【DP】Sleeping Cows P(P7154)

正题 P7154 题目大意 有n头牛和n个牛棚&#xff0c;每头牛可以进入体积大于等于该牛的牛棚&#xff0c;当一个所有未进入牛棚的牛都不能再进时&#xff0c;称为极大的匹配&#xff0c;问你有多少种极大的匹配 解题思路 先把牛棚和牛放到一起&#xff0c;然后按体积排序 那么…

[ZJOI2007]棋盘制作

文章目录[ZJOI2007]棋盘制作题意&#xff1a;题解&#xff1a;单调栈代码&#xff1a;悬线法[ZJOI2007]棋盘制作 题意&#xff1a; 选取最大的01相邻的正方形和矩形&#xff0c;输出面积 题解&#xff1a; 单调栈 如图&#xff1a; 左图为题目给的样例&#xff0c;我们要找…

.net core实践系列之SSO-同域实现

前言SSO的系列还是以.Net Core作为实践例子与大家分享&#xff0c;SSO在Web方面复杂度分同域与跨域。本篇先分享同域的设计与实现&#xff0c;跨域将在下篇与大家分享。如有需要调试demo的&#xff0c;可把SSO项目部署为域名http://sso.cg.com/&#xff0c;Web1项目部署为http:…

牛客练习赛 56 E tarjan 割边

A - 小蒟和他的乐谱 签到题&#xff0c;将原序列对 7 取模之后将序列扫描一遍就可以得到答案 不过感觉题目意思还需要理解理解 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<set> #include<map> #include<…

YbtOJ#903-染色方案【拉格朗日插值,NTT,分治】

正题 题目链接:https://www.ybtoj.com.cn/contest/115/problem/3 题目大意 两个长度为n1n1n1的序列a,ba,ba,b aia_iai​表示涂了iii个格子的可以获得的价值。 bib_ibi​表示恰好用iii种颜色图最多nnn个格子可以获得的总价值。 给出序列bbb&#xff0c;求序列aaa n∈[1,105]n…

【并查集】封锁阳光大学(P1330)

正题 P1330 题目大意 给你一张无向图&#xff0c;问你最少选择多少个点&#xff0c;使得每一条边都有且只有一个端点被选择 解题思路 每一条边只能选一个点&#xff0c;那么考虑对这个图黑白染色 可以用扩展域并查集判二分图&#xff0c;然后两边的点选小的就好了 code #i…

【悬线法】学习总结

【悬线法】学习总结 主要用于求满足某条件的最大矩阵 定义&#xff1a; 一条竖线&#xff0c;竖线的上端点位于矩阵的上边界或是一个障碍点&#xff0c;然后对这条悬线进行左右移动&#xff0c;直到移至障碍点或者是矩阵边界&#xff0c;进行确定这条悬线所在的极大矩阵。 底…

开源硬件论坛,燃烧你的创造力

写在大会前开源融合&#xff1a;比特与原子开源硬件延伸着开源软件的理念&#xff0c;包括硬件设计文件及基于此文件的产品都使用具有开源性质的许可协议&#xff0c;自由使用分享。虽然&#xff0c;从仅开放硬件所配套软件到对硬件本身设计也进行开放的过程&#xff0c;曾经一…