尾部记录文件并发送行以100行为单位进行卷曲

问题描述

我有一个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从标准输入中读取数据。