首页 > 编程语言 >ASP .NET Core App.Metrics+InfluxDB+Grafana性能监控

ASP .NET Core App.Metrics+InfluxDB+Grafana性能监控

时间:2022-11-16 01:11:07浏览次数:113  
标签:Core ASP InfluxDb App influxdb InfluxDB app Configuration options

Grafana介绍及部署请参考这篇博客

InfluxDB

InfluxDB介绍

InfluxDB 是用Go语言编写的一个开源分布式时序、事件和指标数据库,无需外部依赖
InfluxDB在DB-Engines的时序数据库类别里排名第一

InfluxDB相关概念

  • Database:InfluxDB可以创建数据库,一个数据库可以包含多个user、保存策略、schemaless ,支持随时灵活创建mersurement
  • Measurement:相当于表的概念;
  • Tags:是一些kv的结构,标签会被用来建立索引;
  • Fields:是保存真实数据的结构,也是kv结构,但是不会被用来建立索引;
  • Point: 代表了一条记录,可以理解为关系型数据库中的一条记录;
  • Timestamp:既然InfluxDB被称之为时序数据库,少了时间是不可能的,每条记录必须要有一个时间戳;
  • Series:是由Measurement+Tags组成的

InfluxDB优点

InfluxDB 自带的各种特殊函数如求标准差,随机取样数据,统计数据变化比等,使数据统计和实时分析变得十分方便。 此外它还有如下特性:

  • 内置 HTTP 接口,使用方便
  • 数据可以打标记,这样查询可以很灵活
  • 类 SQL 的查询语句
  • 安装管理很简单,并且读写数据很高效
  • 能够实时查询,数据在写入时被索引后就能够被立即查出

InfluxDB版本

InfluxDB目前推出了2.0版本,由于改动较大,所以和1.x版本并存。目前官方推荐的 稳定版本依旧是1.x版本。2.0主要的更改包括以下内容:

  • 集成了TICK组件,一键安装
  • 安全集成,所有的请求都需要通过token
  • 集成管理页面,支持更为强大的统计和分析功能
  • 支持新的查询语言Flux,提供更为强大的查询和处理功能
  • 增加了面向IoT和边缘计算的功能,能够在 ingestion point 汇总和分析时间序列数据
  • 启动了新的存储引擎InfluxDB Iox,采用Rust语言编写

部署

新建配置和存储目录并写入权限

mkdir -p /dockerdata/influxdb/{config,data}
chown -R 1000:1000   /dockerdata/influxdb
chmod -R 777  /dockerdata/influxdb

Docker部署1.0 InfluxDB

docekr pull influxdb:1.8

#说明: 端口8083:web访问端口;端口8086:数据写入端口。
docker run -d -p 8086:8086  -p 8083:8083 --name influxdb -v /dockerdata/influxdb/data/influxdb:/var/lib/influxdb    influxdb:1.8

进入容器使用数据库命令

#进入容器
docker exec -it  influxdb  bash
cd /usr/bin
#进入数据库
./influx

#创建数据库
create databases my_influxdb
#查看所有数据库
show databases

默认不开启Web UI和数据库认证,访问http://192.168.1.5:8086/会报404。

Docker部署2.0 InfluxDB

#拉最新版镜像
docekr pull influxdb

#主机上生成配置文件
docker run --rm influxdb2   influxd print-config > /dockerdata/influxdb/config/config.yml

#Run站点
# influxdb 2.X 版本存储目录在 /var/lib/influxdb2

docker run -d -p 8086:8086 --name influxdb2   \
  -v /dockerdata/influxdb/config/config.yml:/etc/influxdb2/config.yml \
  -v /dockerdata/influxdb/data/influxdb2:/var/lib/influxdb2 \
  -v /etc/localtime:/etc/localtime:ro \
   influxdb

浏览器访问http://192.168.1.5:8086/,配置管理员账号密码和组织信息

快速开始

进入首页

查看管理员Token

ASP .NET Core 集成 App.Metrics

Neget安装以下包

App.Metrics.AspNetCore.All

#InfluxDB 1.0 安装
App.Metrics.InfluxDB

#InfluxDB 2.0 安装
AK.App.Metrics.Reporting.InfluxDB2

appsettings.json填入相关配置信息

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "MetricsOptions": {
    "DefaultContextLabel": "test_service",
    //"GlobalTags": {
    //  "app": "test_service123",
    //  "env": "prd444"
    //},
    "ServerTag": "192.168.1.6",
    "AppTag": "app2",
    "EnvTag": "env2",
    "Enabled": true
  },
  "MetricsWebTrackingOptions": {
    "ApdexTrackingEnabled": true,
    "ApdexTSeconds": 0.1,
    "IgnoredHttpStatusCodes": [ 302, 404 ],
    "IgnoredRoutesRegexPatterns": [],
    "OAuth2TrackingEnabled": true
  },
  "MetricEndpointsOptions": {
    "MetricsEndpointEnabled": true,
    "MetricsTextEndpointEnabled": true,
    "EnvironmentInfoEndpointEnabled": true
  },
  "MetricsReportingInfluxDbOptions": {
    "InfluxDb": {
      "CreateDataBaseIfNotExists": true,
      "BaseUri": "http://192.168.1.5:8086",
      "Database": "mydb",
      //"UserName": "rdcmonitor",
      //"Password": ":sXpvRxgxe*38",

      //InfluxDB2.0认证
      "Token": "TokenKey"
    },
    "FlushInterval": "00:00:20"
  },
  "AllowedHosts": "*"
}

Startup.cs添加配置

using App.Metrics;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;

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

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers().AddMetrics();

            var metrics = AppMetrics.CreateDefaultBuilder().Configuration.Configure(options =>
            {
                options.DefaultContextLabel = Configuration["MetricsOptions:DefaultContextLabel"];

                //options.GlobalTags = new GlobalMetricTags(Configuration.GetSection("MetricsOptions:GlobalTags").Get<Dictionary<string, string>>());
                options.AddServerTag(Configuration["MetricsOptions:ServerTag"]);
                options.AddAppTag(Configuration["MetricsOptions:AppTag"]);
                options.AddEnvTag(Configuration["MetricsOptions:EnvTag"]);
            }).Report.ToInfluxDb(options =>
            {
                options.InfluxDb.BaseUri = new Uri(Configuration["MetricsReportingInfluxDbOptions:InfluxDb:BaseUri"]);
                options.InfluxDb.Database = Configuration["MetricsReportingInfluxDbOptions:InfluxDb:Database"];
                
                //1.0认证 配置用户名密码,默认没有
                //options.InfluxDb.UserName = username;
                //options.InfluxDb.Password = password;

                options.InfluxDb.CreateDataBaseIfNotExists = bool.Parse(Configuration["MetricsReportingInfluxDbOptions:InfluxDb:CreateDataBaseIfNotExists"]);
                options.FlushInterval = TimeSpan.Parse(Configuration["MetricsReportingInfluxDbOptions:FlushInterval"]);
            }).Build();

            services.AddMetrics(metrics);
            //添加报表
            services.AddMetricsReportingHostedService();
            services.AddMetricsTrackingMiddleware(Configuration);
            services.AddMetricsEndpoints(Configuration);

        }

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

            //UseMetrics
            app.UseMetricsAllEndpoints();
            app.UseMetricsAllMiddleware();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }
}

Grafana查看数据

InfluxDb 1.0添加数据源保存


添加面板,默认模板地址:https://grafana.com/dashboards/2125

根据envapp(和配置文件对应)查看面板

标签:Core,ASP,InfluxDb,App,influxdb,InfluxDB,app,Configuration,options
From: https://www.cnblogs.com/RainFate/p/16893344.html

相关文章

  • 基于docker容器的MySQL主从设置及efcore读写分离
    1、基于docker部署MySQL,设置主从本操作基于已经拉取的镜像(dockerpullmysql)创建一主一从两个数据库容器dockerrun-d-p3307:3306-eMYSQL_ROOT_PASSWORD=123456--......
  • ASP二级联动菜单制作
           具体做法如下:       1.设计数据库                  id—自动编号ProvinceName—省名ProvinceNo—省名编号ProvinceOrder—省排......
  • uni-app背景图片全屏
    uni-app背景图片全屏最初设置好的背景图片总是显示不出来,后来发现最外层view要设置高度才可以使图片正确显示,可设height为100vh。mark一下......
  • Apply Patch 22191577 latest GI PSU to RAC and DB homes using Opatch auto or manu
    Patch22191577:GRIDINFRASTRUCTUREPATCHSETUPDATE11.2.0.4.160119(JAN2016)Unzipthepatch22191577UnziplatestOpatchVersioninoraclehomeandcrshom......
  • 快速搭建自己的Web APP
    如何快速搭建自己WebApp?我推荐今天发现的好东西:Streamlit。这个工具几乎可以无脑创建自己想要的数据交互app,不需要前后端的细节。具体的教程我推荐王老师的如何用Pyth......
  • ASP.NET 路由
    ASP.NET路由使您可以使用不必映射到网站中特定文件的URL。由于URL不必映射到文件,所以可以在Web应用程序中使用URL,这些URL是描述性的用户操作,因......
  • 不用app实现shopify跳转亚马逊
    shopify跳转亚马逊Amazon的方式有很多种,如果不用app实现shopifyredirecttoAmazon呢?安装app一般都会带有附加文件从而降低网站加载速度,而速度是用户体验/转化率很重要的......
  • 便利店APP/小程序开发
    近年来,线下便利店也在努力寻求转型升级的机会,而APP/小程序开发就是更好的选择,商家可以在线销售便利店的产品。便利店APP/小程序开发都具备哪些功能?1、商品展示功能:......
  • APICloud APP开发指南
    移动端开发大致分为以下四个级别,下面分别介绍了每个级别需要了解和掌握的内容:初级熟悉HTML/CSS/JS前端技术,了解APICloud开发,能使用开发工具运行和预览模板项目,能使......
  • 开发一款共享打印机APP有市场前景吗
    目前的智能硬件设备不论是在种类上还是在功能性方面,都是处于一个不断升级的过程,在打印机上的设备完善同样如此,结合共享打印机APP软件开发的方式,用户能够更好地体会到智能设......