LogstashTimeMillis: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
 
Строка 11: Строка 11:
 
На стороне Log4j поле не добавляется ни в какую
 
На стороне Log4j поле не добавляется ни в какую
 
<PRE>
 
<PRE>
  +
...
 
<JsonLayout compact="true" eventEol="true" properties="true" includeTimeMillis="true">
 
<JsonLayout compact="true" eventEol="true" properties="true" includeTimeMillis="true">
 
<KeyValuePair key="timeMillisNb" value="$${date:UNIX_MILLIS}"/>
 
<KeyValuePair key="timeMillisNb" value="$${date:UNIX_MILLIS}"/>
 
</JsonLayout>
 
</JsonLayout>
  +
...
 
</PRE>
 
</PRE>
 
При этом добавляются поля
 
При этом добавляются поля

Текущая версия на 17:35, 23 августа 2021


Добавление поля timeMillis

Задача - добавить поле timeMillis там где Log4J его не добавляет

Log4j

На стороне Log4j поле не добавляется ни в какую

...
<JsonLayout compact="true" eventEol="true" properties="true" includeTimeMillis="true">
        <KeyValuePair key="timeMillisNb" value="$${date:UNIX_MILLIS}"/>
</JsonLayout>
...

При этом добавляются поля

  • instant.epochSecond
  • instant.nanoOfSecond

Logstash

  • instant.epochSecond - домножить на 1000 что бы перевести секунды в микросекунды
  • instant.nanoOfSecond - поделить на 1000000 что бы перевести наносекунды в микросекунды
  • если поле с наносекундами отсутствует то игнорировать его
filter {

  ... skipped ...

  if ![timeMillis] {
     if [instant][epochSecond] {
       if [instant][nanoOfSecond] {
         ruby {
           code => "event.set('timeMillis', (event.get('[instant][epochSecond]').to_i) * 1000 + (event.get('[instant][nanoOfSecond]') / 1000000).to_i)"
         }
       } else {
         ruby {
          code => "event.set('timeMillis', (event.get('[instant][epochSecond').to_i) * 1000)"
         }
       }
     }
  }
}