拖尾日志文件并发送行以卷曲 100 行批次
Tail a log file and send rows to curl in 100 line batches
我有一个 bash 脚本,如下所示:
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
不起作用。
奖金:如果在 10 秒后没有新行添加到文件中,我将如何终止此操作?
而不是 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
从标准输入读取数据。
我有一个 bash 脚本,如下所示:
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
不起作用。
奖金:如果在 10 秒后没有新行添加到文件中,我将如何终止此操作?
而不是 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
从标准输入读取数据。