Я новичок в Logstash и ElasticSearch. Я хотел бы прочитать журналы, которые сохраняются в ElasticSearch с использованием данных Spring (ElasticsearchRepository
) или ElasticsearchTemplate
.Запрос ElasticSearch с использованием Spring
Запись журнала в Elasticsearch выглядит следующим образом:
{
"_index": "logstash-2016.08.19",
"_type": "logs",
"_id": "AVagGzQ4GS5SuLe66qxR",
"_score": 1.0,
"_source": {
"message": "Aug 19, 2016 12:02:32 AM com.example.server.MOM$2 handleDelivery\n",
"@version": "1",
"@timestamp": "2016-08-19T00:02:32.000Z",
"host": "10.x.x.x",
"priority": 11,
"timestamp8601": "2016-08-19T00:02:32Z",
"logsource": "a094b35d71da",
"program": "xxx-router_1",
"pid": "2424",
"severity": 3,
"facility": 1,
"timestamp": "2016-08-19T00:02:32Z",
"facility_label": "user-level",
"severity_label": "Error"
}
}
На основе JSON данных записи журнала, я создал следующие классы Java:
@Document(indexName = "logstash-2016.08.19")
public class Logstash {
@Id
private String _id;
private String _index;
private String _type;
private Integer _score;
private Source _source;
/* getters & setters */
}
и
public class Source {
private String message;
private String host;
private Integer priority;
private String timestamp8601;
private String logsource;
private String program;
private String pid;
private Integer severity;
private Integer facility;
private String facility_label;
private String severity_label;
/* getters & setters */
}
Затем я пытаюсь запросить данные ... В этом примере я пытаюсь получить журнал с указанным ID. Я пробовал различные комбинации запроса, но все, что я получаю, это пустой объект или массив. Никогда не удалось вернуть реальный объект ... Кроме того, я пробовал Spring ElasticsearchRepository
без успеха.
@RestController
public class TestController {
@Autowired
ElasticsearchTemplate elt;
@RequestMapping(value = "/e", method = RequestMethod.GET)
public List<Logstash> elasticSearch() {
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
.withFilter(QueryBuilders.boolQuery().should(QueryBuilders.termQuery("_id", "AVagGzQ4GS5SuLe66qxR")))
.build();
return elt.queryForList(searchQuery, Logstash.class);
}
}
Любая помощь приветствуется =)
Спасибо за ваш ответ, но я все еще получаю пустой массив обратно. :-( – Daniel
Если я могу предоставить любую дополнительную информацию для решения этой проблемы, пожалуйста, дайте мне знать. Это мой второй день, когда я использую Elasticsearch. Поэтому мой обзор немного ограничен. – Daniel
Что делать, если вы удалите 'withFilter()' вызов? – Val