AspNetCore下利用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

接著我們確認下是否正常運行了

docker ps -a

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個容器

輸入http://127.0.0.1:8083/ 訪問InfluxDb的控制界面以便創建數據庫

3. 配置AspNet Core2.x

  • 先照常新建一個MVC項目
  • 安裝所需的第三方庫
dotnet add package App.Metrics.Extensions.Mvc
dotnet add package App.Metrics.Formatters.Json
dotnet add package App.Metrics.Extensions.Reporting.InfluxDB
  • 控制檯顯示安裝成功!
  • 修改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(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 不用擔心,第一次登錄成功後系統會要求你重新設置新的密碼,很貼心!!
AspNetCore下利用app-metrics+Grafana+InfluxDB實現性能監控界面

  • 登錄成功後,配置Datasource當然是選擇我們之前運行的InfluxDb
AspNetCore下利用app-metrics+Grafana+InfluxDB實現性能監控界面

  • 按圖進行配置
AspNetCore下利用app-metrics+Grafana+InfluxDB實現性能監控界面

提交後,如下圖顯示即配置成功

AspNetCore下利用app-metrics+Grafana+InfluxDB實現性能監控界面

接著就是創建你的Dashboard,可以自己建立也可以自己配置json文件導入,網上有很多例子可以直接下載

最後啟動AspNetCore站點,再建立點post get put什麼的控制器和Action隨便訪問幾次就可以了


分享到:


相關文章: