AWS ElasticSearch:如何将策略应用于索引
AWS ElasticSearch: How to apply a policy to an index
我们有一个 AWS ElasticSearch 域并正在向其写入 records/documents。我现在已经在 Kibana 中创建了索引 State/Lifecycle 管理 (ISM/ILM) 策略,我可以将该策略应用于 Kibana 中的索引。我现在想在从处理写入索引的 Java 代码中创建索引时应用该策略(使用高级 REST API)。
我在高级 REST API 中没有找到专门允许为索引分配策略的方法,但是我认为我应该能够使用在索引已创建。该文档非常薄,但似乎我应该能够基本上将 key/value 插入 Index 属性中。
例如,当我检查手动分配策略的索引时,在分配策略的位置找到以下键。
"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);
}
那么,如何使用 Java 将 ISM/ILM 策略分配给索引?
顺便说一句,我研究过创建索引模板,它应该在创建索引时自动分配策略,但 OpenDistro Kibana 似乎没有该功能。
BTW, I have looked at creating an Index Template, which should assign
the policy automatically on index creation, but the OpenDistro Kibana
does not seem to have that functionality.
您可以通过以下方式使用索引模板在创建索引时应用 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"
}
}
}
}
}
以上答案正确,但模板中的policy_id
是deprecated.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
匹配,并且将应用相应的策略。
如果相同的模式在多个策略中可用,它将附加具有高优先级的策略。
我们有一个 AWS ElasticSearch 域并正在向其写入 records/documents。我现在已经在 Kibana 中创建了索引 State/Lifecycle 管理 (ISM/ILM) 策略,我可以将该策略应用于 Kibana 中的索引。我现在想在从处理写入索引的 Java 代码中创建索引时应用该策略(使用高级 REST API)。
我在高级 REST API 中没有找到专门允许为索引分配策略的方法,但是我认为我应该能够使用在索引已创建。该文档非常薄,但似乎我应该能够基本上将 key/value 插入 Index 属性中。 例如,当我检查手动分配策略的索引时,在分配策略的位置找到以下键。
"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);
}
那么,如何使用 Java 将 ISM/ILM 策略分配给索引?
顺便说一句,我研究过创建索引模板,它应该在创建索引时自动分配策略,但 OpenDistro Kibana 似乎没有该功能。
BTW, I have looked at creating an Index Template, which should assign the policy automatically on index creation, but the OpenDistro Kibana does not seem to have that functionality.
您可以通过以下方式使用索引模板在创建索引时应用 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"
}
}
}
}
}
以上答案正确,但模板中的policy_id
是deprecated.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
匹配,并且将应用相应的策略。
如果相同的模式在多个策略中可用,它将附加具有高优先级的策略。