ASP.NET Core之跨平台的实时性能监控

前言

前面我们聊了一下一个应用程序 应该监控的8个关键位置.

应用程序的8个关键性能指标以及测量方法

最后卖了个小关子,是关于如何监控ASP.NET Core的.

今天我们就来讲讲如何监控它,下面上效果图:

 

阅读本文需要了解的相关技术与内容:

InfluxDb(分布式时序数据库,开源)(注:分布式部分已商业化最新的分布式版本已不在开源,单例的继续开源)

Grafana(开源的,功能齐全的度量仪表盘和图形编辑器)

App Metrics(主角,开源的支持.NET Core的监控插件,采用管道注入的方式,对代码的入侵性极小)

本文测试环境为Windows64位,当然 这个方案全部都可以在linux上实现(甚至windows才应该是备用方案 - -,尴尬.)

 

所以本文分为3个步骤

1.安装InfluxDb,并创建数据库

2.安装Grafana,并添加相关配置

3.在ASP.NET Core中使用App Metrics

下面我们正式开始

 

 

正文

 

1.安装InfluxDb,并创建数据库

App.Metrics支持的库很多,有InfluxDB、Graphite 、Prometheus.

今天我们主要已InfluxDb为例子.

首先下载,InfluxDb

知道你们懒得找..地址如下:https://portal.influxdata.com/downloads#influxdb

下载你需要的对应的系统的版本.这里我就直接下载Windows Binaries (64-bit)

linux的安装步骤我就不多说了,网上一大把..讲一下windows安装InfluxDb的注意事项(..这玩意对liunx的支持比windows好的多)..

解压后打开influxdb.conf,因为influxdb的默认配置全是针对linux配置的..所以我们要修改一下配置文件.

修改下面3个liunx的路径,改为winodws路径如下:

[meta]# Where the metadata/raft database is storeddir = "D:/influxdb/meta"
[data]# The directory where the TSM storage engine stores TSM files.dir = "D:/influxdb/data"
  # The directory where the TSM storage engine stores WAL files.wal-dir = "D:/influxdb/wal"

然后修改网页图形化管理界面配置,端口如下:


[admin]# Determines whether the admin service is enabled.enabled = true# The default bind address used by the admin service.bind-address = ":8083"


最后cmd运行,进入到你的解压目录,执行命令:

influxd -config influxdb.conf

得到如图效果:

我们就安装完成了.

我们进入管理界面的监听端口:http://localhost:8083/,会看到如下界面:

然后我们输入SQL语句  CREATE DATABASE "你的库名"

看到下图,就是执行成功了.

我们查一下看是不是真的,输入SQL语句:SHOW DATABASES

如图:

除了默认的第一个库以外,还有你自己添加的库名,就说明是加成功了,好了,安装就到此结束

 

 

 

 

2.安装Grafana,并添加相关配置

然后我们安装Grafana,

下载地址:https://grafana.com/get

我们解压后进入bin目录,如图:

直接运行grafana-server.exe即可.

Grafana默认会监听3000的端口,所以我们进入http://localhost:3000,

会让你登陆,直接输入本地的管理员帐户即可,帐户:admin  密码:admin,进入后如图:

安装完成之后,我们下载相关的仪表模版.

地址如下:https://grafana.com/dashboards/2140   (是个json文件)

然后我们导入我们的仪表:如图操作即可:

然后,添加我们上面的数据源.

如图:

选择Add DataSource,然后操作如下:

这样,我们就完成了Grafana的安装配置和添加数据源

 

3.在ASP.NET Core中使用App Metrics

接下来就是我们的重头戏了,在ASP.NET Core中使用AppMetrics.

我们随便创建一个ASP.NET Core MVC项目,如图:

 

 用nuget包添加引用:

核心程序:

管道注入的扩展:

ASP.NET Core MVC的扩展:

其他相关要用到的库:(注:我们这里的数据源是influxDB所以用的这个库,其他的库请搜索其他库的后缀)

我们回到我们熟悉的C#代码,在Startup中我们编写注入代码如下:

首先修改ConfigureServices方法,如下:

 public void ConfigureServices(IServiceCollection services){          
        
var database = "TestData";  
         
var uri = new Uri("http://127.0.0.1:8086");services.AddMetrics(options =>{options.GlobalTags.Add("app", "sample app");options.GlobalTags.Add("env", "stage");}).AddHealthChecks().AddJsonSerialization().AddReporting(factory =>{factory.AddInfluxDb(                new InfluxDBReporterSettings{InfluxDbSettings = new InfluxDBSettings(database, uri),ReportInterval = TimeSpan.FromSeconds(5)});}).AddMetricsMiddleware(options => options.IgnoredHttpStatusCodes = new[] { 404 });            // Add framework services.            services.AddMvc();}

加入我们influxDB相关配置,其中database就是你自己输入的数据库名. uri就是你数据库的地址.

然后我们需要在程序启动的时候就注入我们的Metrics监控,所以修改Configure代码如下:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IApplicationLifetime lifetime){loggerFactory.AddConsole(Configuration.GetSection("Logging"));app.UseMetrics();app.UseMetricsReporting(lifetime);            //loggerFactory.AddDebug();if (env.IsDevelopment()){app.UseDeveloperExceptionPage();app.UseBrowserLink();}       
           
else{app.UseExceptionHandler("/Home/Error");}app.UseStaticFiles();app.UseMvc(routes =>{routes.MapRoute(name: "default",template: "{controller=Home}/{action=Index}/{id?}");});}

其中app.UseMetrics();  app.UseMetricsReporting(lifetime) ,是我们的注入代码..

其他的地方.不用动一丝一毫..怎么样 是不是几乎没有什么入侵性~.

 最后,我们跑起来.

随便在home中点击几下页面,或者调用一下..

然后进入到Grafana的监控页面中,就可以看到如下信息:

  写在最后

这篇只是简单的讲了如何做到初级的监控,其实还有心跳检测等比较多的功能,后面会慢慢来讲..

.Net Core也就今年社区才慢慢起步,所这个监控也是刚刚完成,作者一直在积极的更新中.

比较遗憾的是本来这个是支持 .NET4.5.2以上的,但是由于关注的人比较少.所以就只出了RC的预览版.对最新版支持不完善.

我也在GitHub上给作者提了Issues,https://github.com/alhardy/AppMetrics/issues/177

相关文章: 

  • 互联网级监控系统必备-时序数据库之Influxdb技术

  • 互联网级监控系统必备-时序数据库之Influxdb集群及踩过的坑

原文地址:http://www.cnblogs.com/GuZhenYin/p/7170010.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

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

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

相关文章

EasyUI(前端框架)

第一节 EasyUI的介绍和常用组件 [1]EasyUI的介绍 介绍: EasyUI是一个前端开发的框架,其将常用的页面开发使用的组件进行了 封装,前端开发人员只需将EasyUI的资源导入项目后使用即可,快速 提升开发效率。 使用: ① 导入EasyUI的资…

如何快速开发一个 Dubbo 应用

转载自 如何快速开发一个 Dubbo 应用 导读:在分布式系统中,远程调用是最基础也是最重要的基石。历史上,曾经先后出现过 CORBA、RMI、EJB、WebService 等技术和规范,在服务化以及微服务日趋流行的今天,更多的被广泛使…

‘小会计’的转行之旅

本文原创:王哈哈1大学学习的专业是会计学,目前社会上来说很普遍的工作,都说会计是越老越吃香,所以一毕业就先找了一份和专业相关的工作,然后就开始了抱着公司的大腿努力工作。毕业三年期间也换了几份工作,本…

【2018.3.17】模拟赛之三-ssl1863jzoj1367 俄罗斯方块【模拟】

正题 链接 需要纪中OJ账号 有7种方块 有n列,给出每列的方块高度,求一种方块所有方面都落地的方案数 输入输出(需要自取) Input 第一行为二个整数C和P,1 ≤ C ≤ 100, 1 ≤ P ≤ 7,表示列数和下落方…

Python缩进的几个原则

Python的缩进有以下几个原则 顶级代码必须顶行写,即如果一行代码本身不依赖于任何条件,那它必须不能进行任何缩进 同一级别的代码,缩进必须一致 官方建议缩进用4个空格

应用程序的8个关键性能指标以及测量方法

前言 高性能一直是我们作为程序员..孜孜不倦的追求.. 有的时候甚至会为了一句代码吵上几天.. 那么到底应该如何评估我们的性能指标来判断是否需要优化呢? 今天就来讲一下这个.. 说明一下,本篇是译文. 原文地址:https://stackify.com/application-performance-metrics/ …

MyBatis Plus

文章目录第一节 MyBatis Plus 的简介第二节 MyBatis Plus 的框架搭建[1] 第一步:导包[2] 搭建SSM开发环境[3] 在数据库中创建测试表[4] 在pojo层下创建Student表的实体类[5] 在mapper层创建StudentMapper接口并继承BaseMapper接口[6] 创建测试类,并从Spr…

班级日常分享,一天一瞬间

119级日常分享经过两周左右的KTV项目终于要告一段落了,上午先让各个小组在班内试讲了下自己小组所做的KTV点歌系统,整体上做的还可以,有些小组还存在一些细节问题,在试讲的时候也都给他们指了指,相信下来会有所改进的。…

DDOS 攻击的防范教程

转载自 DDOS 攻击的防范教程 一个多月前,阮一峰的个人网站遭受 DDOS 攻击,下线了50多个小时。这篇文章就是他总结的,教大家如何应对这种攻击。 需要说明的是,我对 DDOS 并不精通,从没想过自己会成为攻击目标。攻击…

【2018.3.17】模拟赛之四-ssl1864jzoj1368 燃烧木棒【最短路,Floyd】

正题 链接 需要纪中OJ账号 有n条木棒,长度为1或根号2,给出每根木棒两头的坐标,和燃烧需要的时间。只能从一个木棒的一头开始点火,求燃烧完所有木棒所需要的最短时间。 输入输出(需要自取) Input 输入…

python变量的创建过程(内存地址变化)

​ name “Alex” 原因 python 解释器有自动垃圾回收机制,自动隔一段时间把没有跟变量名关联的内存数据回收。

推荐一份基于Docker的DevOps实战培训教程

01. 基于Docker的DevOps实战培训 微软工具链 基于Azure和Team Foundation Server 微软DevOps工具链是基于Visual Studio 应用生命周期管理(VSALM - Visual Studio Application Lifecycle Managemnet)的软件管理平台,本动手实验希望通过模拟一…

所有和Java中代理有关的知识点都在这了

转载自 所有和Java中代理有关的知识点都在这了 对于每一个Java开发来说,代理这个词或多或少都会听说过。你可能听到过的有代理模式、动态代理、反向代理等。那么,到底什么是代理,这么多代理又有什么区别呢。本文就来简要分析一下。 代理技…

神奇!一行代码实现删除某集合下标20-30的元素

大家好,我是雄雄。今天我们还是分享关于集合的内容。假如有这样的需求,已知集合的长度为100,也就是集合中有100个元素,现需要删除索引20-30之间的元素,我们应该怎么实现呢?我们先初始化集合,代码…

ssl初一组周六模拟赛【2018.3.17】

前言 先说一下成绩: 姓名成绩xjq(没错又是他)310hjq200hzb150wyc(本人)130lrz130xxy100lw30zyc缺考 正题 题目1:ssl2574 & jzoj1368 无限序列【斐波那契数列】 刚开始想用分治,结果做不出来,然后想到了更好的方法&#xff…

注意!在subList生成子列表之后,一定不要随便更改原列表

大家好,我是雄雄。前几期我们说过,subList方法是返回原列表的子列表,并且我们还说过,在subList返回的子列表上操作时,会直接影响着原列表,原文在这里:subList?? subString???子列表只是原列…

DotNetCore跨平台~Dockerfile的解释

大叔感觉网上对Dockerfile的说明不是很清楚,或者说怎么去用说的不清楚,在vs2017里我们可以去建立自己的Dockerfile文件,然后你的项目可以被生成一个镜像,把它推到仓库之后,你可以在linux,mac上去run你的项目了&#xf…

当你「ping 一下」的时候,你知道它背后的逻辑吗

转载自 当你「ping 一下」的时候,你知道它背后的逻辑吗 我们在遇到网络不通的情况,大家都知道去 ping 一下,看一下网络状况。 那你知道「ping」命令后背的逻辑是什么吗?知道它是如何实现的吗? 一、「ping」命令的作…

POJ1611-嫌犯【图论,并查集】

正题 题目链接: http://poj.org/problem?id1611 大意 有n个人,m个组,有一个流感嫌犯,流感嫌犯会将所在的组的所有人变成流感嫌犯,求流感嫌犯的数量。 解题思路 并查集将各个组合并,然后看看那些人是和…

python的三元运算

a 10 b 5if a > 15 :c a else:c bd a if a > 15 else bd 值1 if 条件A else 值2如果条件A成立,就取左边的 值1,则 取 值2