influxdb遇到时间点存储不了

2021年9月23日 14:33

 

 问题描述

 
    有一份mysql存储的历史数据,准备把它转为influxdb存储, 时间点用的是mysql表中记录的创建时间,创建时间是时许的。
 

环境描述

 
* influxdb: 2.0.8
 
* 开发语言: go
 
* influx客户端: influxdb-client-go 2.5.0
 
 

关键代码摘要

 
    使用如下代码, 创建point,发现存储不了。
 
point := influxdb2.NewPoint("table_name",
    map[string]string{
        ...
    },
    map[string]interface{}{
        ....
    },
    ts,     //对应mysql表中记录的创建时间
    )
 

解决过程

 
    开始以为数据是几年前的, 时间太长存储不了。 后来用time.Time().Add(-xxx), 把时间移到3年前, 结果能存储
 
 

解决办法

 
    原因是influx的精度是纳秒, 存入的时间精度是秒, 在Influx中无法存储
 
    解决办法是加1纳秒, ts.Add(time.Nanosecond*1)
 

评论(31) 阅读(1526)

influxdb如何把point中的多个field一起查出来

2021年8月29日 14:39

 

问题描述

 
    influx查询包含了水平拆分、垂直拆分. 查询结果的每一条记录record,只对应一个field
 
    写入一个point时包含多个field, 查询时如何将这几个field一起查出来呢?
 

写入示例

 
point := influxdb2.NewPoint("history",
    map[string]string{
        "Version": DedefaultVersion,
        "Name": sh.Name,
        "Active": fmt.Sprintf("%v", sh.Active),
        "PortIdx": fmt.Sprintf("%d", sh.PortIdx),
        "Port": fmt.Sprintf("%v", sh.Port),
    },
    map[string]interface{}{
        "MsgId": fmt.Sprintf("%d", sh.MsgId),
        "Content": sh.Content,
    },
    time.Now(),
    )
 
* 查询
 
from(bucket:"my-bucket")
|> range(start: -10m)
|> filter(fn: (r) => (r._measurement=="history") and (r.Name=="xxxx") )
 
用这个方法查询, 每个record只包含一个_field
 
 

解决方法: 分组

 
    分组之后的record,会多一个table属性。table相同,则为一组。也就是一个point的field。
 
* 按写入时间分组
 
|> group(columns: ["_time"])
 
* 增加id标签,按id分组
 
为每个point增加一个id标签, 然后按id分组
 
 
 
 

Tags: influxdb
评论(78) 阅读(2101)

influxdb的docker-compose如何配置

2021年8月26日 06:27

 
influxdb的docker-compose如何配置
 

1. 新建数据目录

 
mkdir data-volumne
 

2. 生成配置文件

 
docker run --rm influxdb:2.0.8 influxd print-config > config.yml
 

3. docker-compose配置

 
docker-compose.yaml内容
 
version: "2"
services:
   influxdb:
       image: influxdb:2.0.8
       volumes:
           - ./data-volumne:/var/lib/influxdb2
           - ./config.yml:/etc/influxdb2/config.yml
           - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime
       ports:
           - 8086:8086
       environment:
           DOCKER_INFLUXDB_INIT_MODE: setup
           DOCKER_INFLUXDB_INIT_USERNAME: my-user
           DOCKER_INFLUXDB_INIT_PASSWORD: my-password
           DOCKER_INFLUXDB_INIT_ORG: my-org
           DOCKER_INFLUXDB_INIT_BUCKET: my-bucket
 

4. 启动

 
docker-compose up
 

5. 目录结构如下

 
[root@localhost influxdb]# tree
.
├── config.yml
├── data-volumne
│   ├── engine
│   │   └── data
│   └── influxd.bolt
└── docker-compose.yaml
 
 

* 注意

 
上面修改influx时区无效,好像不能修改时区,默认都是UTC
 

Tags: influxdb docker
评论(24) 阅读(1997)