Spring 来自 Spring 引导(logstash-logback-encoder)的 Logstash 记录的数据 Elasticsearch @Id

Spring Data Elasticsearch @Id for Logstash Records from Spring Boot (logstash-logback-encoder)

我很好奇人们在他们的 Java 实体中使用什么作为 @Id 来使用 Spring-Data-Elasticsearch 提取 Logstash 数据?汇入 Logstash 的日志数据没有明显的候选者。最接近的可能是时间戳,但不能保证它是唯一的。同样显然 Spring 不支持 ZonedDateTime 作为 @Id。

我正在使用 Spring Boot 2.0.0.RELEASE。默认的 logback logstash 编码器可以很好地写入文件系统。我让 Filebeat 将其发送到 Logstash,然后发送到 Elasticsearch (5.5.x).

我正在编写一个 Java 应用程序来对日志执行各种操作。我正在使用 Spring Data Elasticsearch (3.0.5.Release).

上面写的 Elasticsearch 中的记录示例:

{<br> "_index":"logstash-2017.09.08", "_type":"log", "_id":"AV5j2z-qpNewjNB_ukIA", “_version”:1, “_分数”:1, “_来源”:{<br> "offset":18441, "level":"ERROR", "input_type":"log", "source":"/var/log/somecompany/configuration_service/json/configuration_service_json_events.json", "message":" *************************** 应用程序启动失败 ************ *************** 描述:配置为侦听端口 8888 的 Tomcat 连接器无法启动。该端口可能已被使用或连接器配置错误。操作:验证连接器的配置,识别并停止任何正在侦听端口 8888 的进程,或将此应用程序配置为侦听另一个端口。", "type":"log", "tags":[<br> "beats", "beats_input_codec_plain_applied" ], "@timestamp":"2017-09-08T23:37:41.639Z", "application_name":"configuration-service", "thread_name":"main", "level_value":40000, “@版本”:1, "beat":{<br> "hostname":"f3758598e319", "name":"f3758598e319", "version":"5.5.2" }, "host":"f3758598e319", "logger_name":"org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter", "application_version":"3.14.0-快照" } }

我在发布后不久就找到了我的答案。

如果我声明一个 String id 并将其注释为 @Id,那么框架会正确地从 E.S.

中拉回内部自动生成的 _id 字段
@Id
private String id;

public String getId() {
   return id;
}

public void setId(String id) {
   this.id = id;
}