elasticsearch 问题:使用管道日期索引名称设置ElasticSearch索引生命周期策略
我刚开始建立一个合适的生命周期策略,所以我希望有人能帮我解决这个问题。因此,我每周都会创建一个现有索引。这是第三方集成(他们为我提供了传入日志的管道和索引模板)。每周以“名称YYYY MM DD”的模式创建日志。我正在尝试为这些索引设置生命周期策略,以便它们从热->热->删除转换。到目前为止,我已经做了以下工作: 已更新索引模板以添加策略并设置别名:elasticsearch 问题:使用管道日期索引名称设置ElasticSearch索引生命周期策略,elasticsearch,indexing,pipeline,lifecycle,ilm,elasticsearch,Indexing,Pipeline,Lifecycle,Ilm,我刚开始建立一个合适的生命周期策略,所以我希望有人能帮我解决这个问题。因此,我每周都会创建一个现有索引。这是第三方集成(他们为我提供了传入日志的管道和索引模板)。每周以“名称YYYY MM DD”的模式创建日志。我正在尝试为这些索引设置生命周期策略,以便它们从热->热->删除转换。到目前为止,我已经做了以下工作: 已更新索引模板以添加策略并设置别名: { "index": { "lifecycle": { "name&qu
{
"index": {
"lifecycle": {
"name": "Cloudflare",
"rollover_alias": "cloudflare"
},
"mapping": {
"ignore_malformed": "true"
},
"number_of_shards": "1",
"number_of_replicas": "1"
在现有索引上,设置别名以及哪个是“写入”索引:
一旦我这样做了,我开始看到以下两个错误(每个索引上有一个):
我不确定为什么“不是写索引”错误会出现在旧索引上。也许这是因为它仍然是“热”的,并试图将其移动到另一个阶段,而不是写入索引
对于第二个错误,这是因为索引的名称对于滚动来说是错误的吗
我也不清楚这是否是一个很好的过渡方案。这些索引每周创建一次,我想这是可以的。我认为通常情况下,您会创建一个索引,并根据您的标准(大小、年龄等)让策略拆分旧索引。我应该更改此策略还是可以使此策略与现有每周文件一起工作?如果您需要,这里是我导入ElasticSearch的管道的一部分,我相信它负责索引命名:
{
"date_index_name" : {
"field" : "EdgeStartTimestamp",
"index_name_prefix" : "cloudflare-",
"date_rounding" : "w",
"timezone" : "UTC",
"date_formats" : [
"uuuu-MM-dd'T'HH:mm:ssX",
"uuuu-MM-dd'T'HH:mm:ss.SSSX",
"yyyy-MM-dd'T'HH:mm:ssZ",
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"
]
}
},
因此,对我来说,目前更重要的错误是“数字格式例外”。我想这是因为我在索引中看到了这种设置(提供的名称):
{
“设置”:{
“索引”:{
“生命周期”:{
“名称”:“Cloudflare”,
“滚动\u别名”:“cloudflare”
},
“映射”:{
“忽略格式不正确的内容”:“真”
},
“碎片数”:“1”,
“提供的名称”:“,
“创建日期”:“1595203589799”,
“优先级”:“100”,
“复制副本的数量”:“1”,
我相信这个“提供的索引名”是从我上面提供的管道的“日期索引名”建立起来的。如果这是个问题,有没有一种方法可以通过摄取管道创建一个固定的索引名而不根据日期进行更改?我宁愿只创建一个固定的索引,让生命周期策略来处理拆分(即0001、0002等)
我一直在寻找一种不使用“date\u index\u name”处理器创建固定索引名的方法,但我还没有找到一种方法。或者,如果我可以创建一个带有日期的索引名,并添加一个允许使用LifeCycle policy manager(ILM)的后缀在末尾添加增量数字也可以。如果您能提供帮助,我们将不胜感激!主要问题是现有索引(即0001、0002等),因此ILM实际上不知道如何继续 此索引的名称必须与模板的索引模式匹配,并以数字结尾 您最好让ILM管理索引的创建和滚动,因为这正是它应该做的。您所需要做的就是继续写入相同的
cloudflare
别名,就这样。不需要date\u index\u name
摄取处理器
所以你的答案是正确的
接下来你需要
然后,您可以进入ILM管理的索引或旧索引。谢谢Val。因此,如果我正确地跟踪了您,我只需要从管道中删除整个“日期索引名称”处理器(这样它就不会创建包含日期的命名约定的索引),引导第一个索引,名称以-000001结尾,然后当日志到达管道并被接收时,管道将把日志转储到“cloudflare-2020-08-11-000001”中索引和ILM将在此时管理所有内容?这是一个安全问题,显然您的用户
cf logs
无法创建新的索引。因此,我执行了上述操作,我得到了以下错误:索引[cloudflare-*],类型[\u doc],id[null],消息[ElasticsearchException][ElasticsearchException[type=security\u exception,reason=action][索引:admin/create]对用户[cf logs]]未经授权;嵌套:ElasticsearchException[Elasticsearch exception[类型=非法_state_exception,原因=没有已知的外部请求支持不支持替换其索引的通配符]];]
我基本上删除了管道,重新创建了管道,然后启动了初始索引。cf logs是一个超级用户。你知道怎么回事吗?正如我之前的评论所说,你需要检查cf logs的角色和权限,因为它是一个超级用户,但这个用户不应该拥有所有权限吗?我正在使用cf logs将日志推送到管道中。我还使用此用户最初创建管道(今天重新创建管道时)。唯一的区别是,我正在使用不同的超级用户创建引导索引(与我一起登录Kibana的用户)。这可能是个问题吗?
{
"date_index_name" : {
"field" : "EdgeStartTimestamp",
"index_name_prefix" : "cloudflare-",
"date_rounding" : "w",
"timezone" : "UTC",
"date_formats" : [
"uuuu-MM-dd'T'HH:mm:ssX",
"uuuu-MM-dd'T'HH:mm:ss.SSSX",
"yyyy-MM-dd'T'HH:mm:ssZ",
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"
]
}
},
{
"settings": {
"index": {
"lifecycle": {
"name": "Cloudflare",
"rollover_alias": "cloudflare"
},
"mapping": {
"ignore_malformed": "true"
},
"number_of_shards": "1",
"provided_name": "<cloudflare-{2020-07-20||/w{yyyy-MM-dd|UTC}}>",
"creation_date": "1595203589799",
"priority": "100",
"number_of_replicas": "1",
PUT cloudflare-2020-08-11-000001
{
"aliases": {
"cloudflare": {
"is_write_index": true
}
}
}