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 |

接著我們確認下是否正常運行了
| docker?ps?-a |

2. 安裝 InfluxDB
InfluxDb是比較流行的時序數據庫,可以根據需要替換成Prometheus同上為了方便我們還是使用docker來運行
如果你希望每次都能保持之前docker運行收集的數據可以用docker 的-v選項把目錄映射到本機的目錄以便持久化數據
| 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.Mvcdotnet add package App.Metrics.Formatters.Jsondotnet 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<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 不用擔心,第一次登錄成功后系統會要求你重新設置新的密碼,很貼心!!
登錄成功后,配置Datasource當然是選擇我們之前運行的InfluxDb

按圖進行配置

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

接著就是創建你的Dashboard,可以自己建立也可以自己配置json文件導入,網上有很多例子可以直接下載
最后啟動AspNetCore站點,再建立點post get put什么的控制器和Action隨便訪問幾次就可以了

源代碼下載處: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
總結
以上是生活随笔為你收集整理的AspNet Core下利用 app-metrics+Grafana + InfluxDB实现高大上的性能监控界面的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: asp.net core 错误定位 v
- 下一篇: 微软向Linux表白: 向Linux社区