一、简介

最近这段时间一直在忙,没时间写博客,负责了一个项目,从前端到后端一直忙,同时还有其他第几个项目的系统架构要处理。

去年就开始关注net core了,只是平时写写demo,没用在项目中,正好这次机会就用了net core,具体是什么时候开始的不太记得了,总之刚开始是用core 1.0开发,然后在开发的时候突然想到,平时我们的项目中都没有做过项目的实时监控,为什么这次不试试看呢,而且还能知道每天什么时段的流量走向,系统吞吐量等。记得之前去北京总公司的时候,看到java开发部那边有一个大屏幕,实时的显示项目的吞吐量、请求量等信息,感觉非常酷,我们net应该可以可以实现吧。

抱着这总心态就去找了一些相关资料,也就在项目用了起来。

项目部署在windows环境下,Influxdb的介绍这里不再赘述。

二、安装Influxdb

首先安装InfluxDB时序数据库,地址如下:https://portal.influxdata.com/downloads#influxdb ,这里我就下载Windows Binaries (64-bit),具体的写一下配置文件和安装过程。

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

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

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

我将influxdb的文件都放在了influxdb目录下,可以用相对位置,也可以用绝对位置,这个可以根据个人需要修改。

这里提一下,Influxdb v1.2.4之后好像网页图形化管理界面就去掉了,1.2.4之前的是有网页图形化管理界面的,influxdb.conf文件之前还有

  1. [admin]
  2. # Determines whether the admin service is enabled.
  3. enabled = true
  4.  
  5. # The default bind address used by the admin service.
  6. bind-address = ":8083"

不过后面的版本,conf文件里就没有这个了,所以大家要注意一下。后面版本没办法用网页图形化管理,如果要连接Influxdb的话可以在目录下以cmd运行influx.exe,如果不想所有人都可以访问你的InfluxDB,那么你可以在conf文件里配置认证信息

# Determines whether HTTP endpoint is enabled.
enabled = true

# The bind address used by the HTTP service.
bind-address = ":8086"

# Determines whether user authentication is enabled over HTTP/HTTPS.
auth-enabled = true

(注意:在没配置好账号密码前,请先别将上面的:auth-enabled 设置成 true,先在auth-enabled = false 不启用身份验证的时候,创建一个管理员权限的账号,命令如下:CREATE USER "admin" WITH PASSWORD '123456' WITH ALL PRIVILEGES,创建好账号后,将auth-enabled 设置成 true,然后启动influxdb,最后使用账号密码的情况下创建一个名为"AppMetricsDemo"的数据,命令如下:CREATE DATABASE "AppMetricsDemo")

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

  1. influxd -config influxdb.conf

这里说一下,使用influx.exe登录时,输入以下命令:influx -host 127.0.0.1 -port 8086 -username "admin" -password "123456",这样就连上InfluxDB了。然后创建数据库:CREATE DATABASE "AppMetricsDemo"。

如果你觉得这样比较麻烦,可以安装两个influxDB,一个是V1.2.4版的,一个是最新版的,这是需要修改配置文件的端口,将两个influxDB的端口修改成不一样的就好,然后用1.2.4版本的连接最新版的即可,如图,点击右上角的齿轮图标即可出现连接表单,

(安装好influxDB后,记得在influxDB中创建Demo需要的数据库“AppMetricsDemo”)

三、安装Grafana

安装Grafana,下载地址:https://grafana.com/get,我们解压后进入bin目录,如图:

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

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

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

安装完成之后,我们下载相关仪表模版的Json文件。

地址如下:https://grafana.com/dashboards/2125

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

添加我们上面的数据源,如图:

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

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

由于实际项目中,我们不可能在服务器上运行个控制台去开启这些服务,所以我们需要将influxDB和Grafana发布成服务的形式运行在服务器上,这里我们可以使用nssm工具将InfluxDB和Grafana封装成服务运行。

下载地址如下:http://www.nssm.cc/download

解压后进入到对应系统版本文件夹中,里面有个32位和64位的文件,根据自己的实际情况选择,如图:

我们选择win64,进入文件夹后运行cmd,输入nssm install InfluxDB 运行后出现如下界面:

重点说一下参数这一栏,Argument里输入:-config influxdb.conf,类似上面在cmd中输入Influxd -config influxdb.conf

安装好后运行起来就好,Grafana的安装类似上面的操作,只是Argument这一栏不需要输入任何东西。

四、.netCore 中使用AppMetrics

.netCore 中使用AppMetrics,新建一个名为Demo 的api,然后编辑右键编辑 Demo.csproj文件,在ItemGroup节点下新增以下Package

<PackageReference Include="App.Metrics" Version="2.0.0-alpha" />
<PackageReference Include="App.Metrics.AspNetCore.Endpoints" Version="2.0.0-alpha" />
<PackageReference Include="App.Metrics.AspNetCore.Reporting" Version="2.0.0-alpha" />
<PackageReference Include="App.Metrics.AspNetCore.Tracking" Version="2.0.0-alpha" />
<PackageReference Include="App.Metrics.Extensions.Reporting.InfluxDB" Version="1.2.0" />
<PackageReference Include="App.Metrics.Formatters.Json" Version="2.0.0-alpha" />
<PackageReference Include="App.Metrics.Reporting.InfluxDB" Version="2.0.0-alpha" />

保存后,项目就引用了AppMetrics相关类库

然后修改appsettings.json文件。添加如下代码

  1. {
  2. "Logging": {
  3. "IncludeScopes": false,
  4. "Debug": {
  5. "LogLevel": {
  6. "Default": "Warning"
  7. }
  8. },
  9. "Console": {
  10. "LogLevel": {
  11. "Default": "Warning"
  12. }
  13. }
  14. },
  15. "InfluxDB": {
  16. "IsOpen": true,
  17. "DataBaseName": "AppMetricsDemo",
  18. "ConnectionString": "http://10.10.134.109:8086",
  19. "username": "admin",
  20. "password": "123456",
  21. "app": "RepairApp",
  22. "env": "stage"
  23. }
  24. }

ConfigureServices方法,如下:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Microsoft.AspNetCore.Builder;
  6. using Microsoft.AspNetCore.Hosting;
  7. using Microsoft.Extensions.Configuration;
  8. using Microsoft.Extensions.DependencyInjection;
  9. using Microsoft.Extensions.Logging;
  10. using Microsoft.Extensions.Options;
  11. using App.Metrics;
  12.  
  13. namespace Demo
  14. {
  15. public class Startup
  16. {
  17. public Startup(IConfiguration configuration)
  18. {
  19. Configuration = configuration;
  20. }
  21.  
  22. public IConfiguration Configuration { get; }
  23.  
  24. // This method gets called by the runtime. Use this method to add services to the container.
  25. public void ConfigureServices(IServiceCollection services)
  26. {
  27. #region Metrics监控配置
  28. string IsOpen = Configuration.GetSection("InfluxDB")["IsOpen"].ToLower();
  29. if (IsOpen == "true")
  30. {
  31. string database = Configuration.GetSection("InfluxDB")["DataBaseName"];
  32. string InfluxDBConStr = Configuration.GetSection("InfluxDB")["ConnectionString"];
  33. string app = Configuration.GetSection("InfluxDB")["app"];
  34. string env = Configuration.GetSection("InfluxDB")["env"];
  35. string username = Configuration.GetSection("InfluxDB")["username"];
  36. string password = Configuration.GetSection("InfluxDB")["password"];
  37.  
  38. var uri = new Uri(InfluxDBConStr);
  39.  
  40. var metrics = AppMetrics.CreateDefaultBuilder()
  41. .Configuration.Configure(
  42. options =>
  43. {
  44. options.AddAppTag(app);
  45. options.AddEnvTag(env);
  46. })
  47. .Report.ToInfluxDb(
  48. options =>
  49. {
  50. options.InfluxDb.BaseUri = uri;
  51. options.InfluxDb.Database = database;
  52. options.InfluxDb.UserName = username;
  53. options.InfluxDb.Password = password;
  54. options.HttpPolicy.BackoffPeriod = TimeSpan.FromSeconds(30);
  55. options.HttpPolicy.FailuresBeforeBackoff = 5;
  56. options.HttpPolicy.Timeout = TimeSpan.FromSeconds(10);
  57. options.FlushInterval = TimeSpan.FromSeconds(5);
  58. })
  59. .Build();
  60.  
  61. services.AddMetrics(metrics);
  62. services.AddMetricsReportScheduler();
  63. services.AddMetricsTrackingMiddleware();
  64. services.AddMetricsEndpoints();
  65.  
  66. }
  67. #endregion
  68.  
  69. services.AddMvc();
  70. }
  71.  
  72. // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
  73. public void Configure(IApplicationBuilder app, IHostingEnvironment env)
  74. {
  75. if (env.IsDevelopment())
  76. {
  77. app.UseDeveloperExceptionPage();
  78. }
  79.  
  80. #region 注入Metrics
  81. string IsOpen = Configuration.GetSection("InfluxDB")["IsOpen"].ToLower();
  82. if (IsOpen == "true")
  83. {
  84. app.UseMetricsAllMiddleware();
  85. // Or to cherry-pick the tracking of interest
  86. app.UseMetricsActiveRequestMiddleware();
  87. app.UseMetricsErrorTrackingMiddleware();
  88. app.UseMetricsPostAndPutSizeTrackingMiddleware();
  89. app.UseMetricsRequestTrackingMiddleware();
  90. app.UseMetricsOAuth2TrackingMiddleware();
  91. app.UseMetricsApdexTrackingMiddleware();
  92.  
  93. app.UseMetricsAllEndpoints();
  94. // Or to cherry-pick endpoint of interest
  95. app.UseMetricsEndpoint();
  96. app.UseMetricsTextEndpoint();
  97. app.UseEnvInfoEndpoint();
  98. }
  99. #endregion
  100.  
  101. app.UseMvc();
  102. }
  103. }
  104. }

代码这一块基本上完成了。

五、效果

接下来运行项目,访问以下,然后看看Grafana中的仪表盘看看

附上demo地址:https://github.com/landonzeng/AppMetricsDemo

.Net Core 2.0+ InfluxDB+Grafana+App Metrics 实现跨平台的实时性能监控的更多相关文章

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

    前言 前面我们聊了一下一个应用程序 应该监控的8个关键位置. . 嗯..地址如下: 应用程序的8个关键性能指标以及测量方法 最后卖了个小关子,是关于如何监控ASP.NET Core的. 今天我们就来讲 ...

  2. ASP.NET Core之跨平台的实时性能监控(2.健康检查)

    前言 上篇我们讲了如何使用App Metrics 做一个简单的APM监控,最后提到过健康检查这个东西. 这篇主要就是讲解健康检查的内容. 没看过上篇的,请移步:ASP.NET Core之跨平台的实时性 ...

  3. 健康检查NET Core之跨平台的实时性能监控

    ASP.NET Core之跨平台的实时性能监控(2.健康检查)   前言 上篇我们讲了如何使用App Metrics 做一个简单的APM监控,最后提到过健康检查这个东西. 这篇主要就是讲解健康检查的内 ...

  4. .Net Core 2.*+ InfluxDB+Grafana+App Metrics实时性能监控

    前言 .net core 2.* 实施性能监控 这个工具其实给运维 大大们用起来是更爽的.但是Grafana现在还没有找到中文版. 本文需要了解的相关技术与内容: InfluxDb(分布式时序数据库, ...

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

    前言 前面我们聊了一下一个应用程序 应该监控的8个关键位置. . 嗯..地址如下: 应用程序的8个关键性能指标以及测量方法 最后卖了个小关子,是关于如何监控ASP.NET Core的. 今天我们就来讲 ...

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

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.关于App.Metrics+InfluxDB+Grafana 1.1 App.Metrics App.Metrics是一款开源的支持. ...

  7. Windows Forms和WPF在Net Core 3.0框架下并不会支持跨平台

    Windows Forms和WPF在Net Core 3.0框架下并不会支持跨平台 微软将WinForms和WPF带到.NET Core 3.0这一事实,相信大家都有所了解,这是否意味着它在Linux ...

  8. cAdvisor0.24.1+InfluxDB0.13+Grafana4.0.2搭建Docker1.12.3 Swarm集群性能监控平台

    目录 [TOC] 1.基本概念 ​ 既然是对Docker的容器进行监控,我们就不自己单独搭建cAdvisor.InfluxDB.Grarana了,本文中这三个实例,主要以Docker容器方式运行. 本 ...

  9. 基于.net core微服务(Consul、Ocelot、Docker、App.Metrics+InfluxDB+Grafana、Exceptionless、数据一致性、Jenkins)

    1.微服务简介 一种架构模式,提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(RESTfu ...

随机推荐

  1. 老男孩Python全栈开发(92天全)视频教程 自学笔记15

    day15课程内容: 高阶函数 1.函数名可以进行赋值 2.函数名可以作为参数,也可以作为函数的返回值 def f(): print("高阶函数")def bar(a,b,c): ...

  2. javascript正则表达式的一些笔记

    正则表达式:Regular Expression.使用单个字符串来描述,匹配一系列符合某个句法规则的字符串.即按照某种规则去匹配符合条件的字符串.正则表达式就是规则. \b 单词边界 regexp对象 ...

  3. UVA - 10285 Longest Run on a Snowboard (线性DP)

    思路:d[x][y]表示以(x, y)作为起点能得到的最长递减序列,转移方程d[x][y] = max(d[px][py] + 1),此处(px, py)是它的相邻位置并且该位置的值小于(x, y)处 ...

  4. http协议——cookie详解

    http是无状态的,所以引入了cookie来管理服务器与客户端之间的状态 与cookie相关的http首部字段有: 1.Set-Cookie:它一个响应首部字段,从服务器发送到客户端,当服务器想开始通 ...

  5. Http请求小结

    1.Http请求:get方式 public void httpGet(String url,Map<String,Object> map) { try { String joint = p ...

  6. 第3章 PCI总线的数据交换

    PCI Agent设备之间,以及HOST处理器和PCI Agent设备之间可以使用存储器读写和I/O读写等总线事务进行数据传送.在大多数情况下,PCI桥不直接与PCI设备或者HOST主桥进行数据交换, ...

  7. mongodb3.0副本集搭建补充~~非admin数据库的用户权限

    之前有搭建mongodb3.0的副本集,不过当时直接使用的admin数据库,用户也是直接给的root. 链接:http://blog.csdn.net/tuzongxun/article/detail ...

  8. Python 文件的输入与输出

    1. 文本文件的读写主要通过open()所构建的文件对象来实现.我们打开一个文件,并使用一个对象来表示该文件 , f = open(d,r) 其中d是文件名,r是模式 "r" 文件 ...

  9. DirectX--Filter属性页的调用

    IEnumFilters* pEnum; HRESULT hr ; if (pigb) { hr = pigb-> EnumFilters(&pEnum); if (FAILED(hr) ...

  10. MongoDB的安装和配置(Windows系统)及遇到的常见问题解答

    目前比较流行的数据库大致可以分为三种: 前两种是按照图论理论建立起来的,分别是: 层次式数据库(IMS(Information Management System)是其典型代表)和 网络式数据库(DB ...