InfluxDb2.0使用与集成

本文介绍了InfluxDb这款开源时序数据库的用途,适合存储日志和监控数据。详细步骤展示了在Windows上安装InfluxDb,并通过用户界面和CLI操作数据库。此外,还讲解了如何在SpringBoot应用中集成InfluxDb,包括引入依赖、配置参数、创建Influx配置类和实例化类,以及插入和查询数据的示例。
摘要由CSDN通过智能技术生成

一、场景

        InfluxDb是一个开源时序型数据库,相对于MySql等关系型数据库,InfluxDb更适应于存储日志/监控信息或物联网采集时间相关性信息等场景。

二、安装及使用

        官网: InfluxDB: Purpose-Built Open Source Time Series Database | InfluxData

        下载安装指引:Install InfluxDB | InfluxDB OSS 2.0 Documentation

        指引包括windows、linux、Docker镜像等多种途径的安装


  • 1.windows安装示例

在官网中勾选windows版本指引并下载infulxDb压缩包(本文版本2-2.0.8)并解压,压缩包含influx.exe,influxd.exe,README.md文件

使用命令行工具进入解压目录并使用 influx --help 检查influx命令是否正常

使用命令 start influxd.exe 启动influxd.exe文件,启动后弹出启动程序(默认端口8086)

访问  http://localhost:8086 进入influxDb用户页面


  • 2. InfluxDb用户页面使用

 通过用户页面或CLI初始化信息

查看数据库信息

Sources: InfluxDb与各语言的集成

Buckets: 表信息

Telegraf: 数据收集代理,Use the Telegraf agent to collect and write data | InfluxDB OSS 2.0 Documentation

Scrapers: HTTP(S) 可访问收集数据Create scrapable endpoints for InfluxDB | InfluxDB OSS 2.0 Documentation

Tokens: 访问数据库表token

构建Flux语句执行数据库查询


 三、InfluxDb与SpringBoot集成

在用户界面可以了解如何在java程序中引入InfluxDb并执行插入/查询操作

1. 引入maven依赖包

<dependency>
    <groupId>com.influxdb</groupId>
    <artifactId>influxdb-client-java</artifactId>
    <version>2.0.0</version>
</dependency>

2. 修改spring配置文件参数

spring:
    influx:
        url: http://***.***.***.***:8086
        #bucket可去掉,桶可以在业务上做选择而不写在配置中
        bucket: ***
        org: ***
        token: ***

3. Influx配置类,启动Spring工程时实例化InfluxBean

@Configuration
public class InfluxConfig {
    /**
     * url地址
     */
    @Value("${spring.influx.url}")
    private String influxUrl;
    /**
     * 桶(表)
     */
    @Value("${spring.influx.bucket}")
    private String bucket;
    /**
     * 组织
     */
    @Value("${spring.influx.org}")
    private String org;
    /**
     * token
     */
    @Value("${spring.influx.token}")
    private String token;
    /**
     * 初始化bean
     */
    @Bean(name = "influx")
    public InfluxBean InfluxBean() {
        return new InfluxBean(influxUrl, bucket, org, token);
    }
}

4. Influx实例化类

@Setter
@Getter
public class InfluxBean{
    /**
     * 数据库url地址
     */
    private String influxUrl;
    /**
     * 桶(表)
     */
    private String bucket;
    /**
     * 组织
     */
    private String org;
    /**
     * token
     */
    private String token;
    /**
     * 数据库连接
     */
    private InfluxDBClient client;
    /**
     * 构造方法
     */
    public InfluxBean(String influxUrl, String bucket, String org, String token) {
        this.influxUrl = influxUrl;
        this.bucket = bucket;
        this.org = org;
        this.token = token;
        this.client = getClient();
    }

    /**
     * 获取连接
     */
    private InfluxDBClient getClient() {
        if (client == null) {
            client  = InfluxDBClientFactory.create(influxUrl, token.toCharArray());
        }
        return client;
    }

    /**
     * 写入数据(以秒为时间单位)
     */
    public void write(Object object){
        try (WriteApi writeApi = client.getWriteApi()) {
            writeApi.writeMeasurement(bucket, org, WritePrecision.S, object);
        }
    }

    /**
     * 读取数据
     */
    public List<FluxTable> queryTable(String fluxQuery){
        return client.getQueryApi().query(fluxQuery, org);
    }
}

5. 数据库桶(表)实体类

@Measurement(name = "influxEntity")
@Getter
@Setter
public class InfluxEntity{
    /**
     * 值
     */
    @Column
    Integer value;
    /**
     * 标签字段
     */
    @Column(tag = true)
    String tag;
    /**
     * 时间
     */
    @Column(timestamp = true)
    Instant time;
}

6.在实现类中使用InfluxBean实例及实体类向数据库插入数据

/**
 * 注入InfluxBean
 */
@Resource
private InfluxBean influxBean;

/**
 * 插入InfluxEntity数据
 */
private void writeInfluxEntity(InfluxEntity influxEntity){
    influxBean.write(influxEntity);
}

/**
 * 查询15分钟内的InfluxEntity数据
 */
private List<FluxTable> queryInfluxEntity(){
    String query = 
    " from(bucket: \"influxEntity\")" +
    "  |> range(start: -15m, stop: now())" +
    "  |> filter(fn: (r) => r[\"_measurement\"] == \"influxEntity\")" 
    return influxBean.queryTable(query);
}

/**
 * 业务
 */
public void business(){
    InfluxEntity influxEntity = new InfluxEntity();
    influxEntity.setTime(new Date());
    influxEntity.setTag("tag");
    influxEntity.setValue(1);
    writeInfluxEntity(influxEntity);
    List<FluxTable> queryData = queryInfluxEntity();
}

  • 9
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值