拖尾日志文件并发送行以卷曲 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从标准输入读取数据。