ELK索引每日生成固定时间格式索引

elk版本7.4版本,结构是filebeat—kafka—logstash—es—kibana
需求 每日凌晨生成固定时间格式的索引(类似index-2023.05.09),这个索引受到索引生命周期的管理,进行热,冷,删除阶段的管理
当前已做到
当天索引已经生成了,数据正常写入

  elasticsearch {
    hosts => [ "localhost:9200" ]
    index => "logs-%{+YYYY.MM.dd}"
  }
}
{
  "index_patterns": ["logs-*"],
  "settings": {
    "index.lifecycle.name": "logs_policy",
    "index.lifecycle.rollover_alias": "logs"
  },
  "mappings": {
    "properties": {
      "message": { "type": "text" }
    }
  }
}
PUT _ilm/policy/logs_policy
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_age": "1d",
            "max_size": "5gb"
          }
        }
      },
      "delete": {
        "min_age": "7d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}

已经做完这三步,索引在凌晨时滚动未设置
不知道这个步骤有没有问题,求指导,谢谢

根据您提供的信息,您已经完成了以下步骤:

  1. 在Logstash中使用Elasticsearch输出插件将数据写入Elasticsearch索引,索引名称为"logs-%{+YYYY.MM.dd}",即每天生成一个新的索引。

  2. 使用Index Lifecycle Management(ILM)创建了一个名为"logs_policy"的策略,该策略定义了索引的生命周期,包括热、冷和删除阶段。

  3. 创建了一个名为"logs"的rollover_alias,该别名将用于在索引滚动时切换到新的索引。

根据您提供的信息,您的索引在凌晨时没有滚动。这可能是由于以下原因之一:

  1. 策略未与索引关联:请确保将策略与索引关联。您可以使用以下命令将策略与索引关联:
PUT logs-*/_settings
{
  "index": {
    "lifecycle": {
      "name": "logs_policy",
      "rollover_alias": "logs"
    }
  }
}

  1. 策略未启用:请确保已启用策略。您可以使用以下命令启用策略:
PUT logs_policy/_settings
{
  "policy": {
    "status": "true"
  }
}


  1. 策略条件未满足:请确保策略条件已满足。例如,如果您的策略定义了"max_age": "1d",则索引将在创建后的一天后滚动到下一个索引。

如果您已经检查了以上原因,并且仍然无法解决问题,请提供更多信息,例如Elasticsearch和Logstash的日志,以便我们更好地帮助您解决问题。

该回答引用ChatGPT
根据代码和需求描述,该ELK索引需要在每日凌晨生成固定时间格式的索引,该索引受到索引生命周期的管理,进行热、冷、删除阶段的管理。根据代码中给出的index的配置,索引名称为logs-加上日期格式。但是代码中未对索引进行滚动的配置,需要进行设置。可以设置一个触发条件,当当前索引大小或文档数量达到一定的阈值时,触发滚动,新创建一个索引。可以参考以下示例:


PUT _template/template_logs
{
"index_patterns": [
"logs-*"
],
"settings": {
"index": {
"lifecycle": {
"name": "logs_policy",
"rollover_alias": "logs",
"index_codec": "best_compression"
},
"number_of_shards": "1",
"number_of_replicas": "1"
}
},
"aliases": {
"logs_write": {}
},
"mappings": {
"properties": {
"timestamp": {
"type": "date"
},
...
}
}
}

PUT _ilm/policy/logs_policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_age": "1d",
"max_size": "5gb"
}
}
},
"delete": {
"min_age": "7d",
"actions": {
"delete": {}
}
}
}
}
}

PUT logs-000001
{
"aliases": {
"logs": {
"is_write_index": true
}
}
}


一些说明:

- 使用了index template来统一设置索引的配置,使用了rollover_alias。
- 对于每一个新的index,都需要手动设置一遍。
- 使用rollover action来触发索引的滚动和新建操作。
- 根据需要可以设置max_age、max_size、min_age等值进行索引的操作。
- 示例中对于mapping中的字段进行了类型定义。

以上示例仅供参考,具体实现还需要根据业务场景进行调整。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
您已经完成了步骤中的大部分内容,只需要在logstash的配置文件中添加以下内容,就可以实现每天凌晨生成索引的需求了:

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "logs-%{+yyyy.MM.dd}"
    ilm_enabled => true
    ilm_rollover_alias => "logs"
    ilm_policy => "logs_policy"
  }
}

这里的index中的 %{+yyyy.MM.dd} 表示将当前时间格式化为 年-月-日 的形式,例如:“2023.05.09”。

另外,您可以使用 Elasticsearch 的 API 进行验证。在控制台执行以下命令,查看索引的状态是否正确:

GET _cat/indices/logs-*?v

如果返回的结果中,包含滚动后的新索引名称,且状态是绿色,则表示索引生成和状态转移都是成功的。
如果我的回答解决了您的问题,请采纳!