问题描述
tail -f -n +1 my.log | \
awk -f influx.awk | \
xargs \
-I '{}' \
curl \
-XPOST 'http://influxdb/write?db=foo' \
--data-binary '{}'
我可以更改些什么,而不是代替为每行创建一个curl
请求,而是将它们分成100行(请参阅influx curl docs)?
我遇到的问题是每个InfluxDB“点”都需要用换行符隔开,换行符也是xargs
的定界符,例如将-L 100
添加到xargs
无效。
解决方法
您想使用xargs
及其split
选项来代替--filter
。例如,以下代码将行分为两组:
$ seq 5 | split -l 2 --filter='echo begin; cat; echo end'
begin
1
2
end
begin
3
4
end
begin
5
end
就您而言,您可以尝试类似
tail -f -n +1 my.log | \
awk -f influx.awk | \
split -l 100 --filter='\
curl \
-XPOST "http://influxdb/write?db=foo" \
--data-binary @-'
@-
使curl
从标准输入中读取数据。