Хвост источника Fluentd не перемещает журналы в ElasticSearch - PullRequest
0 голосов
/ 07 октября 2019

Я пытаюсь переместить мои файлы журналов Python в ElastiSearch, используя хвостовой источник Fluentd:

<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 работает. Совпадение formshare.access. **, которое я использую с "fluent-logger-python"работает нормально. Это просто хвостовой источник, который, кажется, не работает.

Я совершенно новичок в Fluentd, поэтому я не знаю, правильно ли я что-то делаю или мне нужно что-то еще вфайл конфигурации.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 07 октября 2019

После некоторых проб и ошибок я получил работу с этим файлом 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 вычисляет хвост файла, но не обрабатывает его. Если файл пуст и вы перезаписываете его данными, Fluentd обрабатывает строки.
...