#java #elasticsearch #aws-elasticsearch
#java #elasticsearch #aws-elasticsearch
Вопрос:
У нас есть домен AWS ElasticSearch, и мы записываем в него записи / документы. Теперь я создал политику управления состоянием / жизненным циклом индекса (ISM / ILM) в Kibana, и я могу применить эту политику к индексу из Kibana. Теперь я хочу применить эту политику, когда индекс создается из нашего Java-кода, который обрабатывает записи в индекс (с использованием высокоуровневого REST API).
Я не нашел в высокоуровневом REST API методов, которые специально позволяют назначать политику индексу, однако я думаю, что я смогу сделать это с помощью объекта RequestOptions, который используется при создании индекса. Документация довольно тонкая, но, похоже, я должен иметь возможность в основном вставлять ключ / значение в свойства индекса. Например, когда я проверяю индекс, которому я вручную назначил политику, найдите следующие ключи, которым назначена политика.
"settings" : {
"index" : {
"opendistro" : {
"index_state_management" : {
"policy_id" : "DefaultLifeCyclePolicy_30DayWarm_180DayDelete"
}
},
Кажется разумным предположить, что я могу просто вставить аналогичный ключ в объект индекса. Кажется, что следующий код должен работать. Он выполняется без ошибок, но RequestOptions не делает ничего полезного.
boolean isExisting = mAwsClient.indices().exists(new GetIndexRequest(indexNameFull), RequestOptions.DEFAULT);
if (!isExisting) {
RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
builder.addHeader("settings.opendistro.index_state_management.policy_id", mIndexStateMgmtPolicy);
RequestOptions requestOptions = builder.build();
CreateIndexRequest request = new CreateIndexRequest(indexNameFull);
request.mapping(mapping, XContentType.JSON);
CreateIndexResponse createIndexResponse = mAwsClient.indices().create(request, requestOptions);
}
Итак, как я могу назначить политику am ISM / ILM для индекса, используя Java?
Кстати, я рассмотрел создание шаблона индекса, который должен автоматически назначать политику при создании индекса, но OpenDistro Kibana, похоже, не обладает такой функциональностью.
Комментарии:
1. В документах для opendistro упоминается шаблон индекса, хотя на самом деле попытка создать его в AWS Elasticsearch просто выдает
401
ошибку.2. Я согласен, что шаблон индекса был бы правильным подходом, но, похоже, он недоступен в версии Kibana для AWS OpenDistro. Кажется, есть некоторые странные различия между «OpenDistro Kibana» и «ES Kibana»; я просто предполагаю, что OpenDistro one имеет меньше функций, чем реальный.
Ответ №1:
Кстати, я рассмотрел создание шаблона индекса, который должен автоматически назначать политику при создании индекса, но OpenDistro Kibana, похоже, не обладает такой функциональностью.
Вы можете использовать шаблон индекса следующим образом, чтобы применить политику ISM при создании индекса:
PUT _template/template_1
{
"index_patterns": [
"test-index*"
],
"settings": {
"index": {
"opendistro": {
"index_state_management": {
"policy_id": "DefaultLifeCyclePolicy_30DayWarm_180DayDelete"
}
}
}
}
}
Для индексов ролловера:
- Убедитесь, что у вас есть псевдоним:
POST /_aliases
{
"actions" : [
{ "add" : { "index" : "test-index-000001", "alias" : "test-index" } }
]
}
- Шаблон:
PUT _template/template_1
{
"index_patterns": [
"test-index*"
],
"settings": {
"index": {
"opendistro": {
"index_state_management": {
"policy_id": "DefaultLifeCyclePolicy_30DayWarm_180DayDelete",
"rollover_alias": "test-index"
}
}
}
}
}
Комментарии:
1. Спасибо, я не смог найти документацию с «policy_id»
Ответ №2:
Приведенный выше ответ правильный, но шаблон policy_id
in устарел.В новой версии это неприменимо.
В новой версии вы должны добавить шаблон индекса в саму политику, как показано в примере ниже.
PUT _opendistro/_ism/policies/policy_name
{
"policy": {
"description": "Policy to manage indices",
"default_state": "hot",
"states" : [
{
"name" : "hot",
"actions" : [
{
"rollover" : {
"min_size" : "20gb",
"min_index_age" : "2d"
}
}
]
}
],
"ism_template": {
"index_patterns": [
"nginx-error-logs*", // **sample index pattern**
"nginx-access-logs*"
],
"priority": 100
}
}
}
Всякий раз, когда создается новый индекс, шаблон имени индекса будет соответствовать ism_template
шаблону, и будет применена соответствующая политика.
Если один и тот же шаблон доступен в нескольких политиках, он прикрепит политику, которая имеет высокий приоритет.