1. 程式人生 > >.Net Core 2.0+ InfluxDB+Grafana+App Metrics 實現跨平臺的實時效能監控

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

最近這段時間一直在忙,沒時間寫部落格,負責了一個專案,從前端到後端一直忙,同時還有其他第幾個專案的系統架構要處理。

去年就開始關注net core了,只是平時寫寫demo,沒用在專案中,正好這次機會就用了net core,具體是什麼時候開始的不太記得了,總之剛開始是用core 1.0開發,然後在開發的時候突然想到,平時我們的專案中都沒有做過專案的實時監控,為什麼這次不試試看呢,而且還能知道每天什麼時段的流量走向,系統吞吐量等。記得之前去北京總公司的時候,看到java開發部那邊有一個大螢幕,實時的顯示專案的吞吐量、請求量等資訊,感覺非常酷,我們net應該可以可以實現吧。

抱著這總心態就去找了一些相關資料,也就在專案用了起來。

專案部署在windows環境下,Influxdb的介紹這裡不再贅述。

1、首先安裝InfluxDB時序資料庫,地址如下:https://portal.influxdata.com/downloads#influxdb ,這裡我就下載Windows Binaries (64-bit),具體的寫一下配置檔案和安裝過程。

解壓後開啟influxdb.conf,因為influxdb的預設配置全是針對linux配置的,所以我們需要修改一下配置檔案。

修改下面3個liunx的路徑,改為winodws路徑如下:

[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目錄下,可以用相對位置,也可以用絕對位置,這個可以根據個人需要修改。

這裡提一下,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檔案裡配置認證資訊

# 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”)

2、安裝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這一欄不需要輸入任何東西。

3、.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();
        }
    }
}

程式碼這一塊基本上完成了。

接下來執行專案,訪問以下,然後看看Grafana中的儀表盤看看

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

相關推薦

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

最近這段時間一直在忙,沒時間寫部落格,負責了一個專案,從前端到後端一直忙,同時還有其他第幾個專案的系統架構要處理。 去年就開始關注net core了,只是平時寫寫demo,沒用在專案中,正好這次機會就用了net core,具體是什麼時候開始的不太記得了,總之剛開始是用core 1.0開發,然後在開發的時候突

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

一、關於App.Metrics+InfluxDB+Grafana 1.1 App.Metrics      App.Metrics是一款開源的支援.NET Core的監控外掛,它還可以支援跑在.NET Framework上的應用程式(版本 >= 4.5.2)。官方文件地址:https://ww

visual studio code調試.net core 2.0程序

vs code 調試控制臺 debuger console datatable 最近在試.net 2.0 Preview時,在VS2017中相對麻煩,現說也怕把生產環境搞壞,於是就想在vs code下試試。首在安裝.net core 2.0的SDK和Runtime,這裏下載https://gi

.NET Core 2.0及.NET Standard 2.0 Description

tar eric xpath andro ace mint tro os x execution NET Core 2.0的發布時間,.NET Core 2.0預覽版及.NET Standard 2.0 Preview大概在5月中旬或下旬發布。 .NET Core 2.0正

ubuntu 跑.net core 2.0

manager mvc code html cati 保存文件 user 服務 target 安裝.net core參考地址:http://www.microsoft.com/net/core/preview#linuxubuntu 服務器版本 UBbuntu

.NET Core 2.0 官方下載地址及中文教程

nbsp -c 開發 style docs otn ria 2.0 官方下載 開發.net core 應用需要安裝.NET Core 2.0 SDK http://www.microsoft.com/net/download/core#/sdk 電腦上運行 .net c

Asp.net Core 2.0連接mysql數據庫一系列錯誤問題

alt sql mysql mysql數據庫 work image sql數據庫 報錯 entity mysql:最新版 一定是最新版,不然各種報錯 Install-Package Pomelo.EntityFrameworkCore.MySql 2.0.0-rtm-100

.net core 2.0學習筆記(四):遷移.net framework 工程到.net core

編譯 its evel hashtable ref 學習筆記 inline null 創建 在遷移.net core的過程中,第一步就是要把.net framework 工程的目標框架改為.net core2.0,但是官網卻沒有提供轉換工具,需要我們自己動手完成了

03、手工創建Asp.Net Core 2.0 web應用程序(探索最小架構)

log bho 啟動 oid img gif method nuget ica 03、手工創建Asp.Net Core 2.0 web應用程序(探索最小架構) 一、創建一個幹凈的控制臺程序 這裏我們使用的開發工具是VS2017 項目只有一個Program.cs類。

Linux上安裝Docker,並成功部署NET Core 2.0

ble otn 重要 命中 mode 管理 sql img 內容 概述 容器,顧名思義是用來存放並容納東西的器皿; 而容器技術伴著Docker的興起也漸漸的映入大家的眼簾,它是一個抽象的概念,同時也是默默存在世上多年的技術,不僅能使應用程序間完全的隔離,而且還能在共享底層系

Net Core 2.0生態1

spn get xamarin 程序 doc shtml -a 讓我 andro Net Core 2.0生態 閱讀目錄 前言:答讀者問(time by:2017.8.19) 項目升級到ASP.NET Core 2.0 新增功能:Razor Pages介紹 模板更新

VS Code開發調試.NET Core 2.0

lin res blog ram sco img vscode 不用 store VS Code開發調試.NET Core 2.0 使用VS Code 從零開始開發調試.NET Core 2.0。無需安裝VS 2017 15.3+即可開發調試.NET Core 2.0應用。

.NET Core 2.0遷移技巧之MemoryCache問題修復

命名空間 ram ons ret http option ext obj mar 對於傳統的.NET Framework項目而言,System.Runtime.Caching命名空間是常用的工具了,其中MemoryCache類則常被用於實現內存緩存。 .NET Core

一起學ASP.NET Core 2.0學習筆記(一): CentOS下 .net core2 sdk nginx、supervisor、mysql環境搭建

image dev 預覽 def star fig brush rest aspnet 作為.neter,看到.net core 2.0的正式發布,心裏是有點小激動的,迫不及待的體驗了一把,發現速度確實是快了很多,其中也遇到一些小問題,所以整理了一些學習筆記: 閱讀目

.net core 2.0學習筆記(六):Remoting核心類庫RealProxy遷移

ride dispatch 包含 void reflect 既然 splay creat (六) 在學習.net core的過程中,我們已經明確被告知,Remoting將不會被支持。官方的解釋是,.net framework 類型包含了太多的Runtime的內容,是

一起學ASP.NET Core 2.0學習筆記(二): ef core2.0 及mysql provider 、Fluent API相關配置及遷移

upd order rac option 包管理 rtl code create .net core 不得不說微軟的技術叠代還是很快的,上了微軟的船就得跟著她走下去,前文一起學ASP.NET Core 2.0學習筆記(一): CentOS下 .net core2 s

NET Core 2.0使用Cookie認證實現SSO單點登錄

訪問 mvc side mes all add set 1.0 png NET Core 2.0使用Cookie認證實現SSO單點登錄 之前寫了一個使用ASP.NET MVC實現SSO登錄的Demo,https://github.com/bidianqing/SSO.Sam

.NET Core 2.0 問題雜記

https dev install cor www 微軟 get 地址 安裝 一. Ubuntu 14.04 安裝   1.安裝之前請先刪除之前的.net core 版本 命令如下:     1.1 獲取安裝的.net core 版本 sudo apt --installe

史坑:.Net core 2.0 體驗

core images .cn nbsp 錯誤 ges 一個 logs http Net core 2.0 生成的包文件更少,大小也更小了。同一個項目 1.1 是約21M;2.0是 2.4M. 愉快地使用一天之後。VS2017 突然識別不到 .NET core 2.0

.net core 2.0 Code First Fluent API配置

asp 完成 eating cte word his text -1 src A.net core 2.0新特性支持通過IEntityTypeConfiguration<>添加Code First配置到一個封裝類。 新建目標框架為.NET Core類庫 新建完