influxdb学习之路——二、数据写入influxdb

本文详细介绍了如何通过命令行直接向 InfluxDB 写入单条和多条时间序列数据,以及使用 CSV 文件批量导入数据。通过 `influxwrite` 命令,配合指定的配置参数,成功将数据写入到指定的 bucket 和 org 中,并在 InfluxDB 的数据浏览器中验证了数据的正确性。同时,文章还展示了在 CSV 导入过程中遇到的问题及解决方案,如需要在文件首行添加数据类型和测量信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、命令行直接写入单条数据

1、influx client 命令行直接写入数据

root@vms50:~/csv#
root@vms50:~/csv# influx write \
>   -b my-bucket\
>   -o my-org \
>   --configs-path  /mydata/influxdb/config/influx-configs \
>   -p s \
>   'test-measure,env=test aaField="this is aa field without timestamp",bbField=123 ' 
root@vms50:~/csv#

2、influx数据浏览器查看刚写入的数据

浏览器打开: http://192.168.26.50:8086/orgs/2d29121a16927628/data-explorer   

在filter中勾选test-measure相关字段后,submit就可以看到相应的数据了。

二、命令行直接写入多条条数据

1、命令行一次写入多条数据

root@vms50:~/csv#
root@vms50:~/csv# influx write  -b my-bucket -o my-org --configs-path  /mydata/influxdb/config/influx-configs  -p s   \
> 'test-measure,env=app aaField="this is aa field without timestamp",bbField=123 ' \
> 'test-measure,env=hello aaField="hello,this is 147.",bbField=147 ' \
> 'test-measure,env=provid aaField="another value 58",bbField=58 '
root@vms50:~/csv#

2、influx数据浏览器查看刚写入的数据

浏览器打开: http://192.168.26.50:8086/orgs/2d29121a16927628/data-explorer   

在filter中勾选test-measure相关字段后,submit就可以看到相应的数据了。

补充:


======================================================
ok :四条数据都写成功了

influx write --bucket my-bucket -o my-org --configs-path /mydata/influxdb/config/influx-configs  "  \
m,host=host1 field1=76
m,host=host2 field1=80
m,host=host1 field2=15i
m,host=host2 field2=30i
"


======================================================
ok:可是有env=test的数据写成了

influx write --bucket my-bucket -o my-org --configs-path /mydata/influxdb/config/influx-configs  '  \
test-measure,env=app aaField="tom",bbField=55
test-measure,env=test aaField="Jeff",bbField=66
'
ok:可是有env=test的数据写成了
influx write --bucket my-bucket -o my-org --configs-path /mydata/influxdb/config/influx-configs  '  \
test-measure,env=app aaField="tom",bbField=515 
test-measure,env=test aaField="Jeff",bbField=616 
'
======================================================

ok:两条都写成功了

influx write --bucket my-bucket -o my-org --configs-path /mydata/influxdb/config/influx-configs  "  \
test-measure,env=app bbField=255
test-measure,env=test bbField=266
"

======================================================

三、使用csv数据写入

1、准备csv数据文件

root@vms50:~/csv#
root@vms50:~/csv# cat example1.csv
date,sighted,loc
2020-01-01,12,Boise
2020-06-01,78,Boise
2020-01-01,54,Seattle
2020-06-01,112,Seattle
2020-01-01,9,Detroit
2020-06-01,135,Detroit
root@vms50:~/csv#

2、使用influx write写入influxDB

root@vms50:~/csv# 
root@vms50:~/csv# influx write  -b my-bucket -o my-org  --configs-path /mydata/influxdb/config/influx-configs  -f example1.csv
2021/12/27 18:29:34 line 2: no measurement column found
2021/12/27 18:29:34 line 3: no measurement column found
2021/12/27 18:29:34 Unable to batcher to error-file: invalid argument
2021/12/27 18:29:34 line 4: no measurement column found
2021/12/27 18:29:34 Unable to batcher to error-file: invalid argument
2021/12/27 18:29:34 line 5: no measurement column found
2021/12/27 18:29:34 Unable to batcher to error-file: invalid argument
2021/12/27 18:29:34 line 6: no measurement column found
2021/12/27 18:29:34 Unable to batcher to error-file: invalid argument
2021/12/27 18:29:34 line 7: no measurement column found
2021/12/27 18:29:34 Unable to batcher to error-file: invalid argument
root@vms50:~/csv# 

3、csv文件第一行添加注释

root@vms50:~/csv#
root@vms50:~/csv# cat example1.csv
#datatype measurement,dateTime:RFC3339,string,tag
example1, date,sighted,loc
r1,2021-12-21T00:00:00Z,12,Boise
r1,2021-12-22T15:00:00Z,78,Boise
r1,2021-12-23T12:19:00Z,54,Seattle
r1,2021-12-24T10:10:00Z,112,Seattle
r1,2021-12-25T08:50:00Z,9,Detroit
r1,2021-12-26T05:30:00Z,135,Detroit
root@vms50:~/csv#

4、执行influx write命令

root@vms50:~/csv# 
root@vms50:~/csv# influx write -b my-bucket -o my-org -f example1.csv --configs-path /mydata/influxdb/config/influx-configs
root@vms50:~/csv# 

5、influx数据浏览器查看刚写入的数据

浏览器打开: http://192.168.26.50:8086/orgs/2d29121a16927628/data-explorer   

在filter中勾选r1相关字段后,submit就可以看到相应的数据了。

### 实现通过API或客户端库向InfluxDB实时写入数据 为了实现向InfluxDB实时写入数据的功能,可以根据不同的编程语言选择合适的客户端库或直接调用HTTP API。以下是几种常见方法及其示例: #### 使用Go语言客户端库 以下是一个基于Go语言的示例代码,展示了如何初始化InfluxDB客户端并将数据点实时写入到指定的Bucket中。 ```go package main import ( "log" "time" influxdb2 "github.com/influxdata/influxdb-client-go/v2" ) func main() { client := influxdb2.NewClient("http://localhost:8086", "your-auth-token") // 替换为实际Token defer client.Close() writeAPI := client.WriteAPI("your-org", "your-bucket") // 替换为实际Org和Bucket名称 for i := 0; i < 10; i++ { p := influxdb2.NewPoint( "sensor_data", map[string]string{"location": "room1"}, map[string]interface{}{"temperature": float64(20+i), "humidity": float64(50-i)}, time.Now(), ) writeAPI.WritePoint(p) log.Println("Data point written:", p.String()) time.Sleep(time.Second) // 模拟每秒发送一次数据 } writeAPI.Flush() } ``` 上述代码实现了每隔一秒向`sensor_data`测量表中写入一个新的数据点[^1]。 --- #### 使用C++客户端库 如果使用的是C++环境,则可以通过`influxdb-cxx`库来简化与InfluxDB之间的通信过程。下面是一段演示如何连续写入数据的例子: ```cpp #include <iostream> #include <thread> #include <chrono> #include "influxdb.hpp" int main() { auto influxdb = influxdb::InfluxDBFactory::Get("http://localhost:8086?db=example"); int counter = 0; while (true) { influxdb->write(influxdb::Point{"sensor"} .addTag("location", "hallway") .addField("value", ++counter)); std::cout << "Wrote data with value=" << counter << "\n"; std::this_thread::sleep_for(std::chrono::seconds(1)); // 延迟一秒 } return 0; } ``` 此代码片段会不断更新名为`sensordata`的时间序列记录,并附带标签`location=hallway`作为元信息[^2]。 --- #### 使用Java客户端库 针对Java开发者而言,借助官方提供的`InfluxDB Java Client Library`能够更加便捷地完成同样的任务。这里给出一段循环执行写操作直至程序终止为止的小例子: ```java import org.influxdb.InfluxDB; import org.influxdb.InfluxDBFactory; import org.influxdb.dto.Point; public class RealTimeWriter { public static void main(String[] args) throws InterruptedException { InfluxDB influxDB = InfluxDBFactory.connect("http://localhost:8086", "admin", "password"); influxDB.setDatabase("my_database"); long count = 0L; while(true){ Point point = Point.measurement("cpu_load_short") .time(System.currentTimeMillis(), TimeUnit.MILLISECONDS) .tag("host","server01") .field("value",(double)(count % 100)) .build(); influxDB.write(point); System.out.println("Inserted record "+point.lineProtocol()); Thread.sleep(1000); // Sleep one second between writes. count++; } } } ``` 这段脚本同样遵循了标准模式——创建连接对象之后,在无限循环里构造新的观测实例并通过`.write()`提交给服务器保存下来[^5]。 --- #### 性能优化建议 无论采用哪种方式接入InfluxDB,请务必注意以下几点以提高效率: - 批量传输而非逐条发送消息; - 启用压缩机制减少网络流量消耗; - 配置合理的重试策略应对临时性的错误状况。 以上措施有助于降低延迟并增强系统的稳定性[^3]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值