.NET Core微服務之基於App.Metrics+InfluxDB+Grafana實現統一性能監控


Tip: 此篇已加入.NET Core微服務基礎系列文章索引

一、關於App.Metrics+InfluxDB+Grafana

1.1 App.Metrics

  

  App.Metrics是一款開源的支持.NET Core的監控插件,它還可以支持跑在.NET Framework上的應用程序(版本 >= 4.5.2)。官方文檔地址:https://www.app-metrics.io/

1.2 InfluxDB

  

  InfluxDB是一款開源的分布式時序、時間和指標數據庫,使用go語言編寫,無需外部依賴。官網地址:https://portal.influxdata.com

1.3 Grafana

  

  Grafana是一個可視化面板(Dashboard),有着非常漂亮的圖表和布局展示,功能齊全的度量儀表盤和圖形編輯器,支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作為數據源。官網地址:https://grafana.com/

二、InfluxDB的安裝與配置

2.1 Linux下的安裝

  請參考focus-lei的文章《.NET Core使用App.Metrics + InfluxDB + Grafana進行APM監控》,我這里只是做demo,所以選擇了在我的Windows Server虛擬機中安裝,快速一點。當然,你可以通過docker拉取influxdb的鏡像創建一個容器,這樣更快。

# docker pull tutm/influxdb  

2.2 Windows下的安裝

  (1)下載Windows版本(64位),下載地址:https://dl.influxdata.com/influxdb/releases/influxdb-1.5.2_windows_amd64.zip

  (2)解壓之后放到你想要放置的位置,然后編輯influxdb.conf配置文件:(因為其默認配置是針對Linux的)

[meta]
# Where the metadata/raft database is stored
dir = "C:/APM/influxdb/meta"

 

[data]
# The directory where the TSM storage engine stores TSM files.
dir = "C:/APM/influxdb/data"

# The directory where the TSM storage engine stores WAL files.
wal-dir = "C:/APM/influxdb/wal"

  (3)進入cmd,以命令模式運行influxd:

cmd >> .\influxd -config influxdb.conf

  

  (4)然后新開一個cmd,連上influxdb,然后創建一個database

cmd >> .\influx -host 127.0.0.1 -port 8086 -username "admin" -password "edisonchou"

  

  關於influxdb的更多命令,可以瀏覽參考資料關於influxdb的InfluxDB入門教程

三、Grafana的安裝與配置

2.1 Linux下的安裝

  同1.1部分,不再贅述。

2.2 Windows下的安裝

  (1)下載Windows版本(64位),下載地址:https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.2.2.windows-amd64.zip

  (2)直接運行grafana-server.exe即可,默認綁定3000端口號。

  (3)瀏覽器打開serverip:3000,使用默認賬號admin/admin(賬號密碼都是admin)登錄,主界面如下圖所示:

  

  (4)為InfluxDB添加數據源

  在Configuration中點擊Add data source按鈕,進入如下圖所示的添加界面,輸入你安裝的InfluxDB數據庫信息

  

  (5)為Grafana添加InfluxDB的Dashboard儀表盤的JSON文件

  這里有兩種方式:一種是直接給URL=>https://grafana.com/dashboards/2125,另一種是我們手動下載這個URL的JSON,然后把JSON粘貼過來。

  

  (6)導入之后,查看這個Dashboard:

  

四、App.Metrics的使用與API網關集成

注意:以下的配置和代碼都只是在API網關(Ocelot)中做的,至於具體API服務中不需要做配置。

4.1 安裝App.Metrics

  通過NuGet安裝以下幾個package:

  

4.2 集成API網關

  (1)添加配置文件關於InfluxDB的部分

"AppMetrics": {
    "IsOpen": true,
    "DatabaseName": "AppMetricsDB",
    "ConnectionString": "http://192.168.80.71:8086",
    "UserName": "admin",
    "Password": "edisonchou",
    "App": "MSAD",
    "Env": "Development"
  }

  (2)修改StartUp類,注入AppMetrics並設置

    public void ConfigureServices(IServiceCollection services)
    {
       ......

        // AppMetrics
        bool isOpenMetrics = Convert.ToBoolean(Configuration["AppMetrics:IsOpen"]);
        if (isOpenMetrics)
        {
            string database = Configuration["AppMetrics:DatabaseName"];
            string connStr = Configuration["AppMetrics:ConnectionString"];
            string app = Configuration["AppMetrics:App"];
            string env = Configuration["AppMetrics:Env"];
            string username = Configuration["AppMetrics:UserName"];
            string password = Configuration["AppMetrics:Password"];

            var uri = new Uri(connStr);
            var metrics = AppMetrics.CreateDefaultBuilder().Configuration.Configure(options =>
            {
                options.AddAppTag(app);
                options.AddEnvTag(env);
            }).Report.ToInfluxDb(options =>
            {
                options.InfluxDb.BaseUri = uri;
                options.InfluxDb.Database = database;
                options.InfluxDb.UserName = username;
                options.InfluxDb.Password = password;
                options.HttpPolicy.BackoffPeriod = TimeSpan.FromSeconds(30);
                options.HttpPolicy.FailuresBeforeBackoff = 5;
                options.HttpPolicy.Timeout = TimeSpan.FromSeconds(10);
                options.FlushInterval = TimeSpan.FromSeconds(5);
            }).Build();

            services.AddMetrics(metrics);
            services.AddMetricsReportScheduler();
            services.AddMetricsTrackingMiddleware();
            services.AddMetricsEndpoints();
        }
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        ......

        // AppMetrics
        bool isOpenMetrics = Convert.ToBoolean(Configuration["AppMetrics:IsOpen"]);
        if (isOpenMetrics)
        {
            app.UseMetricsAllEndpoints();
            app.UseMetricsAllMiddleware();
        }

        // Ocelot
        app.UseOcelot().Wait();
    }

五、運行效果展示

  這時我們把API網關、ClientService和ProductService同時啟動起來,然后通過瀏覽器不停的請求這兩個服務的某個API接口。

  請求一段時間后,我們進入Grafana的Dashboard來查看:

  

  可以看到,原本空盪盪的儀表盤已經滿血復活,各種曲線和數據出來了。這里Error有數據是因為我的程序中有bug,出現了異常。

  我們也也可以設置Grafana的Alerting設置,讓其可以為我們發送告警郵件(可以選擇Include Image),當然你事先得改一下Grafana的配置文件,貼上你的SMTP服務器和賬號密碼信息。

  

六、小結

  本篇首先簡單介紹了一下App.Metrics、InfluxDB與Grafana,然后介紹了如何安裝和配置這套開源監控組合,最后通過與API網關Ocelot的集成,讓我們的ASP.NET Core程序可以跑在監控平台之下,並可以通過Grafana的Dashboard實時查看性能數據。當然,本篇只是一個簡單的Quick Start,很多細節沒有深究,有興趣的園友可以通過參考資料去仔細研究。

參考資料

(1)顧鎮印,《ASP.NET Core之跨平台的實時監控

(2)老衲平僧,《InfluxDB+Grafana+AppMetrics監控系統

(3)landon,《.NET Core 2.0+InfluxDB+Grafana+AppMetrics實現跨平台的實時性能監控

(4)focus-lei,《.net core使用App.Metrics+InfluxDB+Grafana進行APM監控

(5)桂素偉,《Ocelot監控

(6)仰望星空腳踏實地,《InfluxDB入門教程

(7)JackyRoc,《InfluxDB使用說明

(8)InfluxDB官方文檔:http://docs.influxdata.com/influxdb/v1.6/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM