Kibana продолжает жаловаться на ошибки dateparse и grokparse

#logstash #kibana #logstash-grok

#logstash #kibana #logstash-grok

Вопрос:

В моем конвейере logstash (который получает многострочные журналы из Filebeat) у меня есть следующее:

 filter {
  if [type] == "oracle" {
    grok {
      match => { "message" => "(?<day>[A-Za-z]{3})(s*)(?<month>[A-Za-z]{3})(s*)(?<monthday>[0-9]{1,2})(s*)(?<hour>[0-9]{1,2}):(?<min>[0-9]{1,2}):(?<sec>[0-9]{2})(s*)(?<year>[0-9]{4})(s*)%{GREEDYDATA:audit_message}" }
      add_tag => [ "oracle_audit" ]
    }
    grok {
      match => { "audit_message" => "ACTION :[[0-9]*] '(?<ora_audit_action>.*)'.*DATABASE USER:[[0-9]*] '(?<ora_audit_dbuser>.*)'.*PRIVILEGE :[[0-9]*] '(?<ora_audit_priv>.*)'.*CLIENT USER:[[0-9]*] '(?<ora_audit_osuser>.*)'.*CLIENT TERMINAL:[[0-9]*] '(?<ora_audit_term>.*)'.*STATUS:[[0-9]*] '(?<ora_audit_status>.*)'.*DBID:[[0-9]*] '(?<ora_audit_dbid>.*)'.*SESSIONID:[[0-9]*] '(?<ora_audit_sessionid>.*)'.*USERHOST:[[0-9]*] '(?<ora_audit_dbhost>.*)'.*CLIENT ADDRESS:[[0-9]*] '(?<ora_audit_clientaddr>.*)'.*ACTION NUMBER:[[0-9]*] '(?<ora_audit_actionnum>.*)'" }
    }
    grok {
      match => { "source" => [ ".*/[a-zA-Z0-9_#$]*_[a-z0-9]*_(?<ora_audit_derived_pid>[0-9]*)_[0-9]*.aud" ] }
    }
    mutate {
      add_field => { "ts" => "%{year}-%{month}-%{monthday} %{hour}:%{min}:%{sec}" }
    }
    date {
      locale => "en"
      match => [ "ts", "YYYY-MMM-dd HH:mm:ss", "YYYY-MMM-d HH:mm:ss" ]
    }
    mutate {
      remove_field => [ "ts", "year", "month", "day" , "monthday", "hour", "min", "sec", "audit_message" ]
    }
  }
}

  

Образец журнала (поступает из Filebeat, и я могу подтвердить, что они были разделены правильно) :

 Audit file /u01/app/oracle/admin/DEVINST/adump/DEVINST_ora_43619_20200913121607479069143795.aud
Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production
Build label:    RDBMS_12.2.0.1.0_LINUX.X64_170125
ORACLE_HOME:    /u01/app/oracle/product/12.2.0/dbhome_1
System name:    Linux
Node name:      testserver
Release:        3.10.0-862.14.4.el7.x86_64
Version:        #1 SMP Fri Sep 21 09:07:21 UTC 2018
Machine:        x86_64
Instance name: DEVINST
Redo thread mounted by this instance: 1
Oracle process number: 55
Unix process pid: 43619, image: oracle@testserver (TNS V1-V3)

Sun Sep 13 12:16:07 2020  00:00
LENGTH : '275'
ACTION :[7] 'CONNECT'
DATABASE USER:[1] '/'
PRIVILEGE :[6] 'SYSDBA'
CLIENT USER:[9] 'testuser'
CLIENT TERMINAL:[5] 'pts/0'
STATUS:[1] '0'
DBID:[10] '1762369616'
SESSIONID:[10] '4294967295'
USERHOST:[21] 'testserver'
CLIENT ADDRESS:[0] ''
ACTION NUMBER:[3] '100'
  

Однако, хотя журналы прошли через Kibana, он не показывает мне «правильные» данные, жалуясь на ошибки grokparse и dateparse (хотя правило grok отлично протестировано в отладчике Kibana!):

Message показано в Kibana:

 Audit file /u01/app/oracle/admin/DEVINST/adump/DEVINST_ora_43619_20200913121607479069143795.aud
Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production
Build label:    RDBMS_12.2.0.1.0_LINUX.X64_170125
ORACLE_HOME:    /u01/app/oracle/product/12.2.0/dbhome_1
System name:    Linux
Node name:      testserver
Release:        3.10.0-862.14.4.el7.x86_64
Version:        #1 SMP Fri Sep 21 09:07:21 UTC 2018
Machine:        x86_64
Instance name: DEVINST
Redo thread mounted by this instance: 1
Oracle process number: 55
Unix process pid: 43619, image: oracle@testserver (TNS V1-V3)
  

Message ожидается:

  00:00
LENGTH : '275'
ACTION :[7] 'CONNECT'
DATABASE USER:[1] '/'
PRIVILEGE :[6] 'SYSDBA'
CLIENT USER:[9] 'testuser'
CLIENT TERMINAL:[5] 'pts/0'
STATUS:[1] '0'
DBID:[10] '1762369616'
SESSIONID:[10] '4294967295'
USERHOST:[21] 'testserver'
CLIENT ADDRESS:[0] ''
ACTION NUMBER:[3] '100'
  

Из-за этого поля также не были проанализированы должным образом.
Что я делаю не так? Почему он не анализирует сообщение и дату правильно, даже если отладчик показывает правильный вывод?

Редактировать:

Согласно предложению baudsp, я перезаписал свое сообщение следующим образом:

 filter {
  if [type] == "oracle" {
    grok {
      match => { "message" => "(?<day>[A-Za-z]{3})(s*)(?<month>[A-Za-z]{3})(s*)(?<monthday>[0-9]{1,2})(s*)(?<hour>[0-9]{1,2}):(?<min>[0-9]{1,2}):(?<sec>[0-9]{2})(s*)(?<year>[0-9]{4})(s*)(?<message>[Ss]*)" }
      overwrite => [ "message" ]
    }
.....
  

Однако Кибана все еще показывает мне ошибки анализа данных и анализа данных: (

Спасибо J

Комментарии:

1. Что касается expected части сообщения, поскольку кажется, что вы не перезаписываете это поле, неудивительно, что это не ожидаемое значение.

2. Для первого фильтра grok шаблон GREEDYDATA преобразуется в .* , который не должен соответствовать новым строкам. Чтобы сопоставить новые строки, вы можете использовать [Ss]*

3. Спасибо за ваши комментарии, baudsp, можете ли вы объяснить, почему сообщение должно быть перезаписано?

4. Если вы хотите изменить содержимое message поля (как видно из вашего вопроса, вы хотите это сделать), вам придется перезаписать его