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/