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
根据env
和app
(和配置文件对应)查看面板