我正在使用InfluxDB来存储我的时间序列数据 .
我写了一个简单的golang应用程序来读取名为 time.log
的文件中的行 .
https://github.com/influxdata/influxdb/blob/master/client/README.md#inserting-data的文件说:
插入数据时间序列数据也称为点使用批量插入写入数据库 . 该机制是创建一个或多个点,然后创建批处理批处理点并将这些点写入给定的数据库和系列 . 系列是测量(时间/值)和一组标签的组合 . 在此示例中,我们将创建一个1,000点的批次 . 每个点都有一个时间和一个值,以及2个表示形状和颜色的标签 . 我们使用名为shapes的测量将这些点写入名为square_holes的数据库 . 注意:您可以将RetentionPolicy指定为批处理点的一部分 . 如果未提供,InfluxDB将使用数据库默认保留策略 . func writePoints(clnt client.Client){
sampleSize:= 1000
rand.Seed(42)
bp,_:= client.NewBatchPoints(client.BatchPointsConfig {
数据库:“systemstats”,
精度:“我们”,
})
对于i:= 0;我<sampleSize;一世 {
regions:= [] string {“us-west1”,“us-west2”,“us-west3”,“us-east1”}
tags:= map [string] string {
“cpu”:“cpu-total”,
“host”:fmt.Sprintf(“host%d”,rand.Intn(1000)),
“region”:区域[rand.Intn(len(regions))],
}
idle:= rand.Float64()* 100.0
fields:= map [string] interface {} {
“闲置”:闲置,
“忙”:100.0 - 闲置,
}
bp.AddPoint(client.NewPoint(
“CPU使用率”,
标签,
场,
现在的时间(),
))
}
错误:= clnt.Write(bp)
if err!= nil {
log.Fatal(ERR)
}
}
但是因为我不断从日志中读取数据 . 我从未读过日志 . 那么我将这些积分写入涌入服务器的最佳方式是什么?
这是我目前的代码:
cmdBP := client.NewBatchPoints(...)
for line := range logFile.Lines {
pt := parseLine(line.Text)
cmdBP.AddPoint(pt)
}
influxClient.Write(cmdBP)
基本上,范围logFile.Lines永远不会终止,因为它基于通道 .
1 回答
使用批处理点和超时的组合(这作为goroutine运行):
顺便说一句,您可以使用带有 logrus 日志包的钩子,将日志发送到InfluxDB(示例代码来自logrus InfluxDB hook) .