.Net Core 2.0+ InfluxDB+Grafana+App Metrics 實現跨平臺的實時性能監控

1、簡介

最近這段時間一直在忙,沒時間寫博客,負責了一個項目,從前端到後端一直忙,同時還有其餘第幾個項目的系統架構要處理。前端

去年就開始關注net core了,只是平時寫寫demo,沒用在項目中,正好此次機會就用了net core,具體是何時開始的不太記得了,總之剛開始是用core 1.0開發,而後在開發的時候忽然想到,平時咱們的項目中都沒有作過項目的實時監控,爲何此次不試試看呢,並且還能知道天天什麼時段的流量走向,系統吞吐量等。記得以前去北京總公司的時候,看到java開發部那邊有一個大屏幕,實時的顯示項目的吞吐量、請求量等信息,感受很是酷,咱們net應該能夠能夠實現吧。java

抱着這總心態就去找了一些相關資料,也就在項目用了起來。linux

項目部署在windows環境下,Influxdb的介紹這裏再也不贅述。git

2、安裝Influxdb

首先安裝InfluxDB時序數據庫,地址以下:https://portal.influxdata.com/downloads#influxdb ,這裏我就下載Windows Binaries (64-bit),具體的寫一下配置文件和安裝過程。github

解壓後打開influxdb.conf,由於influxdb的默認配置全是針對linux配置的,因此咱們須要修改一下配置文件。數據庫

修改下面3個liunx的路徑,改成winodws路徑以下:json

[meta]
  # Where the metadata/raft database is stored
  dir = "influxdb/meta"
[data]
  # The directory where the TSM storage engine stores TSM files.
  dir = "influxdb/data"
  # The directory where the TSM storage engine stores WAL files.
  wal-dir = "influxdb/wal"

我將influxdb的文件都放在了influxdb目錄下,能夠用相對位置,也能夠用絕對位置,這個能夠根據我的須要修改。windows

這裏提一下,Influxdb v1.2.4以後好像網頁圖形化管理界面就去掉了,1.2.4以前的是有網頁圖形化管理界面的,influxdb.conf文件以前還有後端

[admin]
  # Determines whether the admin service is enabled.
   enabled = true

  # The default bind address used by the admin service.
   bind-address = ":8083"

不事後面的版本,conf文件裏就沒有這個了,因此你們要注意一下。後面版本沒辦法用網頁圖形化管理,若是要鏈接Influxdb的話能夠在目錄下以cmd運行influx.exe,若是不想全部人均可以訪問你的InfluxDB,那麼你能夠在conf文件裏配置認證信息api

# Determines whether HTTP endpoint is enabled.
enabled = true

# The bind address used by the HTTP service.
bind-address = ":8086"

# Determines whether user authentication is enabled over HTTP/HTTPS.
auth-enabled = true

(注意:在沒配置好帳號密碼前,請先別將上面的:auth-enabled 設置成 true,先在auth-enabled = false 不啓用身份驗證的時候,建立一個管理員權限的帳號,命令以下:CREATE USER "admin" WITH PASSWORD '123456' WITH ALL PRIVILEGES,建立好帳號後,將auth-enabled 設置成 true,而後啓動influxdb,最後使用帳號密碼的狀況下建立一個名爲"AppMetricsDemo"的數據,命令以下:CREATE DATABASE "AppMetricsDemo")

 

最後cmd運行,進入到你的解壓目錄,執行命令:

influxd -config influxdb.conf

這裏說一下,使用influx.exe登陸時,輸入如下命令:influx -host 127.0.0.1 -port 8086 -username "admin" -password "123456",這樣就連上InfluxDB了。而後建立數據庫:CREATE DATABASE "AppMetricsDemo"。

若是你以爲這樣比較麻煩,能夠安裝兩個influxDB,一個是V1.2.4版的,一個是最新版的,這是須要修改配置文件的端口,將兩個influxDB的端口修改爲不同的就好,而後用1.2.4版本的鏈接最新版的便可,如圖,點擊右上角的齒輪圖標便可出現鏈接表單,

(安裝好influxDB後,記得在influxDB中建立Demo須要的數據庫「AppMetricsDemo」)

3、安裝Grafana

安裝Grafana,下載地址:https://grafana.com/get,咱們解壓後進入bin目錄,如圖:

直接運行grafana-server.exe便可。

Grafana默認會監聽3000的端口,因此咱們進入http://localhost:3000,

會讓你登錄,直接輸入本地的管理員賬戶便可,賬戶:admin  密碼:admin,進入後如圖:

安裝完成以後,咱們下載相關儀表模版的Json文件。

地址以下:https://grafana.com/dashboards/2125

而後咱們導入咱們的儀表:如圖操做便可

 

添加咱們上面的數據源,如圖:

選擇Add DataSource,而後操做以下:

這樣,咱們就完成了Grafana的安裝配置和添加數據源。

因爲實際項目中,咱們不可能在服務器上運行個控制檯去開啓這些服務,因此咱們須要將influxDB和Grafana發佈成服務的形式運行在服務器上,這裏咱們可使用nssm工具將InfluxDB和Grafana封裝成服務運行。

下載地址以下:http://www.nssm.cc/download

解壓後進入到對應系統版本文件夾中,裏面有個32位和64位的文件,根據本身的實際狀況選擇,如圖:

咱們選擇win64,進入文件夾後運行cmd,輸入nssm install InfluxDB 運行後出現以下界面:

重點說一下參數這一欄,Argument裏輸入:-config influxdb.conf,相似上面在cmd中輸入Influxd -config influxdb.conf

安裝好後運行起來就好,Grafana的安裝相似上面的操做,只是Argument這一欄不須要輸入任何東西。

4、.netCore 中使用AppMetrics

.netCore 中使用AppMetrics,新建一個名爲Demo 的api,而後編輯右鍵編輯 Demo.csproj文件,在ItemGroup節點下新增如下Package

<PackageReference Include="App.Metrics" Version="2.0.0-alpha" />
<PackageReference Include="App.Metrics.AspNetCore.Endpoints" Version="2.0.0-alpha" />
<PackageReference Include="App.Metrics.AspNetCore.Reporting" Version="2.0.0-alpha" />
<PackageReference Include="App.Metrics.AspNetCore.Tracking" Version="2.0.0-alpha" />
<PackageReference Include="App.Metrics.Extensions.Reporting.InfluxDB" Version="1.2.0" />
<PackageReference Include="App.Metrics.Formatters.Json" Version="2.0.0-alpha" />
<PackageReference Include="App.Metrics.Reporting.InfluxDB" Version="2.0.0-alpha" />

 保存後,項目就引用了AppMetrics相關類庫

而後修改appsettings.json文件。添加以下代碼

{
  "Logging": {
    "IncludeScopes": false,
    "Debug": {
      "LogLevel": {
        "Default": "Warning"
      }
    },
    "Console": {
      "LogLevel": {
        "Default": "Warning"
      }
    }
  },
  "InfluxDB": {
    "IsOpen": true,
    "DataBaseName": "AppMetricsDemo",
    "ConnectionString": "http://10.10.134.109:8086",
    "username": "admin",
    "password": "123456",
    "app": "RepairApp",
    "env": "stage"
  }
}

ConfigureServices方法,以下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using App.Metrics;

namespace Demo
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            #region Metrics監控配置
            string IsOpen = Configuration.GetSection("InfluxDB")["IsOpen"].ToLower();
            if (IsOpen == "true")
            {
                string database = Configuration.GetSection("InfluxDB")["DataBaseName"];
                string InfluxDBConStr = Configuration.GetSection("InfluxDB")["ConnectionString"];
                string app = Configuration.GetSection("InfluxDB")["app"];
                string env = Configuration.GetSection("InfluxDB")["env"];
                string username = Configuration.GetSection("InfluxDB")["username"];
                string password = Configuration.GetSection("InfluxDB")["password"];

                var uri = new Uri(InfluxDBConStr);

                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();

            }
            #endregion

            services.AddMvc();
        }

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

            #region 注入Metrics
            string IsOpen = Configuration.GetSection("InfluxDB")["IsOpen"].ToLower();
            if (IsOpen == "true")
            {
                app.UseMetricsAllMiddleware();
                // Or to cherry-pick the tracking of interest
                app.UseMetricsActiveRequestMiddleware();
                app.UseMetricsErrorTrackingMiddleware();
                app.UseMetricsPostAndPutSizeTrackingMiddleware();
                app.UseMetricsRequestTrackingMiddleware();
                app.UseMetricsOAuth2TrackingMiddleware();
                app.UseMetricsApdexTrackingMiddleware();

                app.UseMetricsAllEndpoints();
                // Or to cherry-pick endpoint of interest
                app.UseMetricsEndpoint();
                app.UseMetricsTextEndpoint();
                app.UseEnvInfoEndpoint();
            }
            #endregion

            app.UseMvc();
        }
    }
}

代碼這一塊基本上完成了。

5、效果

接下來運行項目,訪問如下,而後看看Grafana中的儀表盤看看

附上demo地址:https://github.com/landonzeng/AppMetricsDemo

相關文章
相關標籤/搜索