• .Net Core 2.*+ InfluxDB+Grafana+App Metrics实时性能监控


    前言

    .net core 2.* 实施性能监控

    这个工具其实给运维 大大们用起来是更爽的。但是Grafana现在还没有找到中文版。

    本文需要了解的相关技术与内容:

    InfluxDb(分布式时序数据库,开源)(注:分布式部分已商业化最新的分布式版本已不在开源,单例的继续开源)

    Grafana(开源的,功能齐全的度量仪表盘和图形编辑器)

    App Metrics(主角,开源的支持.NET Core的监控插件,采用管道注入的方式,对代码的入侵性极小)

    效果图

    安装influxdb

    influxdb在1.*版本之后就不再有网页版本了。

    所以大家选择版本的时候一定要注意这个事情免得找不到influxdb 的 admin控制台

    下载地址

    https://dl.influxdata.com/influxdb/releases/influxdb-1.6.3_windows_amd64.zip

    我这里选择的是1.6.3版本

    解压文件夹之后进行如下配置,打开config中的配置文件

    修改如下几项目

    [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"
    

    如果使用的是1.*之前的版本就可以打开admin控制台

    配置是这样的

    [admin]
      # Determines whether the admin service is enabled.
       enabled = true
    
      # The default bind address used by the admin service.
       bind-address = ":8083"

    然后运行influxdb

    influxd -config influxdb.conf

    运行起来之后就是这个样子

     好多 人都使用了1.*之后的版本,没有admin控制台给大家 推荐一个工具

    InfluxDBStudio-0.1.0  用这个货创建一个数据库就可以了

    配置Grafana

    下载地址:

    https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.3.1.windows-amd64.zip 

    解压之后 在文件夹之后直接运行这个程序

    grafana-server.exe

    Grafana默认会监听3000的端口,所以我们进入

    http://127.0.0.1:3000,
    默认账号密码:admin admin

    就是这样的效果啦

    安装默认的模板

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

     

    这里选择刚才我们下载的json文件就可以,或者直接输入2125都可以

    添加数据库配置文件

    配置好了之后就会出现这个样子了

    在.net core配置

    先把这些DLL引用了吧。项目右键编辑帖进去  重新生成一下就可以了。

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

    修改appsettings.json配置文件

    {
      "Logging": {
        "IncludeScopes": false,
        "LogLevel": {
          "Default": "Warning"
        }
      },
      "InfluxDB": {
        "IsOpen": true,
        "DataBaseName": "LogDb",
        "ConnectionString": "http://127.0.0.1:8086",
        "username": "admin",
        "password": "xxxxxxxxxx",
        "app": "LogDbDemo",
        "env": "stage"
      }
    }

    修改startup进行管道接管

     ConfigureServices添加 如下

                #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

     Configure添加这些东西

          #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

    运行项目跑一圈之后 返回Grafana就出现了这样的图例

  • 相关阅读:
    反射
    定义类
    集合list,set,Map
    API util
    进程与多线程
    泛型
    API string
    JDBC存储过程
    预处理
    JDBC
  • 原文地址:https://www.cnblogs.com/lhxsoft/p/11696482.html
Copyright © 2020-2023  润新知