TimeStream增加了对influxDB写协议接口的支持。
influxDB写协议是一种在时序场景比较通用的写入文本协议。通过该协议,可以很方便的将时序数据导入时序引擎。
InfluxDB写协议格式如下,详细信息请参见InfluxDB官方文档。
// Syntax
<measurement>[,<tag_key>=<tag_value>[,<tag_key>=<tag_value>]] <field_key>=<field_value>[,<field_key>=<field_value>] [<timestamp>]
// Example
myMeasurement,tag1=value1,tag2=value2 fieldKey="fieldValue" 1556813561098000000
TimeStream也支持了这种协议。写入接口如下:
POST /_time_stream/influx/write?db={index}&precision=ns
{infludb lines data}
一个curl的写入示例如下:
curl -i --user "user:password" "http://xxx:9200/_time_stream/influx/write?db=test_stream" -d "testInflux,lable1=lable_value1 metric1=0.5"
influxDB写入的数据内容,存储在Elasticsearch中,measurement会放入维度字段。
写入内容:
testInflux,lable1=lable_value1 metric1=0.5
存储在ES中的内容如下:
{
"@timestamp": 1669972652000,
"labels": {
"measurement": "testInflux",
"lable1": "lable_value1"
},
"metrics": {
"metric1": 0.5
}
}
TimeStream实现influxDB写协议的方式,使用了antlr4j,antlr4j配置借鉴了druid,配置内容如下:https://github.com/apache/druid/blob/master/extensions-contrib/influx-extensions/src/main/antlr4/org/apache/druid/data/input/influx/InfluxLineProtocol.g4
然后TimeStream将解析的内容,按照TimeStream的数据组装成bulk请求,写入ES TimeStream索引即可。