ASP.NET Core 之跨平臺的實時性能監控

前言

前面咱們聊了一下一個應用程序 應該監控的8個關鍵位置.html

. 嗯..地址以下:linux

應用程序的8個關鍵性能指標以及測量方法

最後賣了個小關子,是關於如何監控ASP.NET Core的.git

今天咱們就來說講如何監控它,下面上效果圖:github

 

閱讀本文須要瞭解的相關技術與內容:數據庫

InfluxDb(分佈式時序數據庫,開源)(注:分佈式部分已商業化最新的分佈式版本已不在開源,單例的繼續開源)json

Grafana(開源的,功能齊全的度量儀表盤和圖形編輯器)windows

App Metrics(主角,開源的支持.NET Core的監控插件,採用管道注入的方式,對代碼的入侵性極小)微信

本文測試環境爲Windows64位,固然 這個方案所有均可以在linux上實現(甚至windows才應該是備用方案 - -,尷尬.)app

 

因此本文分爲3個步驟

1.安裝InfluxDb,並建立數據庫

2.安裝Grafana,並添加相關配置

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

下面咱們正式開始編輯器

 

 

正文

 

1.安裝InfluxDb,並建立數據庫

App.Metrics支持的庫不少,有InfluxDBGraphite 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,進入後如圖:

安裝完成以後,咱們下載相關的儀表模版.

地址以下: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

但願感興趣的基友們一塊兒加入,這裏也吐槽一下,..我就一句話..社區須要咱們共通建立,而不是等着摘現成的桃子..

做者:顧振印 出處:http://www.cnblogs.com/GuZhenYin/ 若是您以爲閱讀本文對您有幫助,請點一下「推薦」按鈕,您的「推薦」將是我最大的寫做動力!本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面
 
分類:  ASP.NET Core
 
好文要頂  關注我  收藏該文   
45
0
 
 
 
« 上一篇: 應用程序的8個關鍵性能指標以及測量方法
» 下一篇: ASP.NET Core之跨平臺的實時性能監控(2.健康檢查)
相關文章
相關標籤/搜索