Шаблон не соответствует - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть простой свободный conf:

<source>
  @type tail
  @id in_tail_springboot_container_logs
  #path /var/log/containers/*.log
  path /var/log/logtest.txt
  #path /var/log/containers/springbootrabbitmqlistener-*.log
  pos_file /var/log/fluentd-springboot-containers.log.pos
  @log_level debug
  multiline_flush_interval 5s
  format multiline
  format1 (?<timestamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3})  (?<level>INFO|ERROR|WARN|TRACE|DEBUG|FATAL)\s+\[(?<app>[^\,]+),(?<zipkintraceid>[^\,]*),(?<zipkinspanid>[^\,]*),(?<zipkinsent>[^\]]*)] (?<someid>[0-9]+) --- \[(?<thread>[^\]]+)] (?<classname>[^\ ]+)\s+\: (?<text>.*)
  format_firstline ?<timestamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3}
  tag springboot.*
  read_from_head true
  <parse>
    @type json
    time_format %Y-%m-%dT%H:%M:%S.%NZ
  </parse>
</source>

Я проверяю это с помощью строки ввода:

2018-11-09 08:49:36.111  INFO [SpringBootMicroservice,,,] 5820 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Bean with name 'environmentManager' has been autodetected for JMX exposure

Я проверял это с https://regex101.com/.

Все отлично работает.

Проблема в том, что беглому не нравится:

2018-11-09 08:48:18 +0000 [warn]: #0 [in_tail_springboot_container_logs] pattern not match: "2018-11-09 08:49:36.111  INFO [SpringBootMicroservice,id1,id2,true] 5820 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Bean with name 'environmentManager' has been autodetected for JMX exposure"

Можете ли вы сказать мне, что не так с моим conf?

1 Ответ

0 голосов
/ 14 ноября 2018

Похоже, проблема в этой строке:

format_firstline ?<timestamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3}

Проблема в том, что именованная группа с временной меткой неверно отформатирована - ей нужна скобка для всей группы, например:

                 ↓                                                      ↓
format_firstline (?<timestamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3})
                                                                 ↑

И для хорошей практики (как упомянул ветеран Regex Wiktor) вы должны избегать ваших ., когда они должны быть буквальными точками, а не подстановочными знаками.

...