流利的尾巴来源无法将日志移至ElasticSearch

时间:2019-10-07 15:52:16

标签: elasticsearch fluentd

我正在尝试使用Fluentd尾源将Python日志文件移动到ElastiSearch中:

<source>
  @type  forward
  @id    input1
  @label @mainstream
  port  24224
</source>

<filter **>
  @type stdout
</filter>

<source>
  @type tail
  path /fluentd/formshare/error_log
  pos_file /fluentd/error_log.pos
  tag formshare.error
  <parse>
    @type multiline
    format_firstline /\d{4}-\d{1,2}-\d{1,2}/
    format1 /(?<timestamp>[^ ]* [^ ]*) (?<level>[^\s]+:)(?<message>[\s\S]*)/
  </parse>
</source>

<label @mainstream>
  <match formshare.access.**>
    @type elasticsearch
    host 172.28.1.1
    port 9200
    logstash_format true
    logstash_prefix formshare_access
  </match>
  <match formshare.error.**>
    @type elasticsearch
    host 172.28.1.1
    port 9200
    logstash_format true
    logstash_prefix formshare_error
  </match>
  <match **>
    @type file
    @id   output1
    path         /fluentd/log/data.*.log
    symlink_path /fluentd/log/data.log
    append       true
    time_slice_format %Y%m%d
    time_slice_wait   10m
    time_format       %Y%m%dT%H%M%S%z
  </match>
</label>

从启动分析文件的FluentD服务中可以看到:

  

/ fluentd / formshare / error_log的尾巴

并且pos_file有数据

/fluentd/formshare/error_log    0000000000000604        000000000098252c

但是我在ElasticSearch中没有得到错误。也许可以解析,但是我对Regex不好(从https://www.datadoghq.com/blog/multiline-logging-guide/那里得到了它)

与Elastic的连接正在工作。我与“ fluent-logger-python”一起使用的匹配formshare.access。**可以正常工作。只是尾巴源似乎不起作用。

我对Fluentd来说是个超级新手,所以我不知道我是用正确的方式做事还是在配置文件中需要其他东西。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

经过反复试验后,我将其与该conf文件一起使用:

<source>
  @type  forward
  @id    input1
  @label @mainstream
  port  24224
</source>

<filter **>
  @type stdout
</filter>

<source>
  @type tail
  @label @mainstream
  @id    input2
  path /fluentd/formshare/error_log
  pos_file /fluentd/error_log.pos
  tag formshare.error
  <parse>
    @type multiline
    format_firstline /\d{4}-\d{1,2}-\d{1,2}/
    format1 /(?<time>\d{4}-\d{1,2}-\d{1,2} +\d{1,2}:\d{1,2}:\d{1,2},\d{3}) +(?<level>[A-Z]+)[ ]{1,2}\[(?<module>(.*?))\]\[(?<thread>(.*?))\] (?<messages>.*)/
    time_format %Y-%m-%d %H:%M:%S,%L
  </parse>
</source>

<label @mainstream>
  <match formshare.access.**>
    @type elasticsearch
    host 172.28.1.1
    port 9200
    logstash_format true
    logstash_prefix formshare_access
    time_key_format %Y.%m.%d
  </match>
  <match formshare.error.**>
    @type elasticsearch
    host 172.28.1.1
    port 9200
    logstash_format true
    logstash_prefix formshare_error
    time_key_format %Y.%m.%d
  </match>
  <match **>
    @type file
    @id   output1
    path         /fluentd/log/data.*.log
    symlink_path /fluentd/log/data.log
    append       true
    time_slice_format %Y%m%d
    time_slice_wait   10m
    time_format       %Y%m%dT%H%M%S%z
  </match>
</label>

我遇到的问题:

  • 两个来源都必须具有相同的@label和不同的@id
  • 正则表达式不适用于我的Python日志文件。
  • 在启动时流畅地计算文件的尾部,但不对其进行处理。如果文件为空,则用数据Fluentd覆盖其中的一行。