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

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
简介:

应用程序的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 stored
  dir = "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,进入后如图:

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

地址如下:ht t p s: / / g r a f a n a . c om / d a s h b oa r d s / 2 140   (是个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的监控页面中,就可以看到如下信息:


本文转自 sshpp 51CTO博客,原文链接:http://blog.51cto.com/12902932/1949362,如需转载请自行联系原作者

相关实践学习
通过可观测可视化Grafana版进行数据可视化展示与分析
使用可观测可视化Grafana版进行数据可视化展示与分析。
相关文章
|
10天前
|
开发框架 监控 .NET
开发者的革新利器:ASP.NET Core实战指南,构建未来Web应用的高效之道
【8月更文挑战第28天】本文探讨了如何利用ASP.NET Core构建高效、可扩展的Web应用。ASP.NET Core是一个开源、跨平台的框架,具有依赖注入、配置管理等特性。文章详细介绍了项目结构规划、依赖注入配置、中间件使用及性能优化方法,并讨论了安全性、可扩展性以及容器化的重要性。通过这些技术要点,开发者能够快速构建出符合现代Web应用需求的应用程序。
23 0
|
10天前
|
缓存 数据库连接 API
Entity Framework Core——.NET 领域的 ORM 利器,深度剖析其最佳实践之路
【8月更文挑战第28天】在软件开发领域,高效的数据访问与管理至关重要。Entity Framework Core(EF Core)作为一款强大的对象关系映射(ORM)工具,在 .NET 开发中扮演着重要角色。本文通过在线书店应用案例,展示了 EF Core 的核心特性和优势。我们定义了 `Book` 实体类及其属性,并通过 `BookStoreContext` 数据库上下文配置了数据库连接。EF Core 提供了简洁的 API,支持数据的查询、插入、更新和删除操作。
30 0
|
14天前
|
开发框架 监控 .NET
【Azure 应用程序见解】在Docker中运行的ASP.NET Core应用如何开启Application Insights的Profiler Trace呢?
【Azure 应用程序见解】在Docker中运行的ASP.NET Core应用如何开启Application Insights的Profiler Trace呢?
|
14天前
|
Linux C# C++
【Azure App Service For Container】创建ASP.NET Core Blazor项目并打包为Linux镜像发布到Azure应用服务
【Azure App Service For Container】创建ASP.NET Core Blazor项目并打包为Linux镜像发布到Azure应用服务
|
23天前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
29 0
|
23天前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
|
27天前
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
76 0
|
4月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
141 0
|
4月前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
63 0
|
4月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
245 5