Parsing 不使用源时间戳的日志存储

Parsing 不使用源时间戳的日志存储,parsing,timestamp,logstash,elastic-stack,Parsing,Timestamp,Logstash,Elastic Stack,当前设置如下所示 input { beats { port => 5044 codec => "json" } } output { elasticsearch { hosts => [ 'elasticsearch' ] } } Spring boot->log-file.json(使用)->filebeat->logstash->elastic 我可以看到弹性搜索ok中出现的日志。但是,它不使用日志文件中提供的日期,而是动态

当前设置如下所示

input {
  beats {
    port => 5044
    codec => "json"
  }
}
output {
  elasticsearch {
    hosts    => [ 'elasticsearch' ]
  }
} 
Spring boot->log-file.json(使用)->filebeat->logstash->elastic

我可以看到弹性搜索ok中出现的日志。但是,它不使用日志文件中提供的日期,而是动态创建这些日期

json示例

{  
   "@timestamp":"2017-09-08T17:23:38.677+01:00",
   "@version":1,
   "message":"A received request - withtimestanp",
   etc..

我的logstash.conf输入过滤器如下所示

input {
  beats {
    port => 5044
    codec => "json"
  }
}
output {
  elasticsearch {
    hosts    => [ 'elasticsearch' ]
  }
} 
如果您查看日志的kibana输出,它有第9个而不是第8个(当我实际创建日志时)


因此,我们现在已经解决了这个问题。。修复的细节如下

logback.xml

<appender name="stash" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>info</level>
    </filter>
    <file>/home/rob/projects/scratch/log-tracing-demo/build/logs/tracing-A.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>/home/rob/projects/scratch/log-tracing-demo/build/logs/tracing-A.log.%d{yyyy-MM-dd}</fileNamePattern>
        <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder class="net.logstash.logback.encoder.LogstashEncoder" >
        <includeContext>false</includeContext>
        <fieldNames>
            <message>msg</message>
        </fieldNames>
    </encoder>
</appender>
filebeat.yml

<appender name="stash" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>info</level>
    </filter>
    <file>/home/rob/projects/scratch/log-tracing-demo/build/logs/tracing-A.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>/home/rob/projects/scratch/log-tracing-demo/build/logs/tracing-A.log.%d{yyyy-MM-dd}</fileNamePattern>
        <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder class="net.logstash.logback.encoder.LogstashEncoder" >
        <includeContext>false</includeContext>
        <fieldNames>
            <message>msg</message>
        </fieldNames>
    </encoder>
</appender>
下面的json设置现在处理时间戳问题,因为它没有使用日志文件中的时间

此外,它还将json移动到json输出的根目录中,以保存日志。i、 e.它不是嵌套在beat json事件中,而是根的一部分

filebeat.prospectors:
- input_type: log
  paths:
    - /mnt/log/*.log
  json.overwrite_keys: true
  json.keys_under_root: true
  fields_under_root: true

output.logstash:
  hosts: ['logstash:5044']
logstash.conf

使用msg而不是消息解决JSON解析错误,原始数据现在位于消息字段中。看这里


现在我们已经解决了这个问题。。修复的细节如下

logback.xml

<appender name="stash" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>info</level>
    </filter>
    <file>/home/rob/projects/scratch/log-tracing-demo/build/logs/tracing-A.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>/home/rob/projects/scratch/log-tracing-demo/build/logs/tracing-A.log.%d{yyyy-MM-dd}</fileNamePattern>
        <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder class="net.logstash.logback.encoder.LogstashEncoder" >
        <includeContext>false</includeContext>
        <fieldNames>
            <message>msg</message>
        </fieldNames>
    </encoder>
</appender>
filebeat.yml

<appender name="stash" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>info</level>
    </filter>
    <file>/home/rob/projects/scratch/log-tracing-demo/build/logs/tracing-A.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>/home/rob/projects/scratch/log-tracing-demo/build/logs/tracing-A.log.%d{yyyy-MM-dd}</fileNamePattern>
        <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder class="net.logstash.logback.encoder.LogstashEncoder" >
        <includeContext>false</includeContext>
        <fieldNames>
            <message>msg</message>
        </fieldNames>
    </encoder>
</appender>
下面的json设置现在处理时间戳问题,因为它没有使用日志文件中的时间

此外,它还将json移动到json输出的根目录中,以保存日志。i、 e.它不是嵌套在beat json事件中,而是根的一部分

filebeat.prospectors:
- input_type: log
  paths:
    - /mnt/log/*.log
  json.overwrite_keys: true
  json.keys_under_root: true
  fields_under_root: true

output.logstash:
  hosts: ['logstash:5044']
logstash.conf

使用msg而不是消息解决JSON解析错误,原始数据现在位于消息字段中。看这里


恐怕是太贵了。还有一个问题。解决方法是将时间戳放在另一个字段(例如
时间
),然后使用
mutate
过滤器和
replace
将时间戳字段更改为
时间
字段中的值。恐怕这是错误的。解决方法是将时间戳放在另一个字段中(例如
time
),并使用
mutate
过滤器和
replace
将时间戳字段更改为
time
字段中的值。