Logstash Elasticsearch输出插件:索引名添加日期失效求助
问题原因
当你在Logstash Elasticsearch输出插件中启用了ilm_enabled: "true",并配置了ilm_rollover_alias和ilm_pattern时,Logstash会忽略你设置的index参数。此时数据会写入到ILM(索引生命周期管理)指定的别名中,实际索引名称由ILM自动生成(格式为[别名]-[递增序号],也就是你看到的mt-raw-00001)。
解决方案
根据是否需要保留ILM功能,分两种场景处理:
场景1:不需要ILM,直接按日期生成索引
修改配置,关闭ILM功能并移除相关参数,让index的日期格式配置生效:
output { elasticsearch { hosts => [ "${ECK_ES_HOSTS}" ] user => "${ECK_ES_USER}" password => "${ECK_ES_PASSWORD}" ssl_certificate_authorities => "${ECK_ES_SSL_CERTIFICATE_AUTHORITY}" index => "mt-raw-%{+YYYY.MM.dd}" data_stream => false ilm_enabled => "false" # 注释或删除以下ILM相关参数 # ilm_pattern => "00001" # ilm_rollover_alias => "mt-raw" # ilm_policy => "mt-ilm" manage_template => "true" template_name => "mt" } }
修改后Logstash会直接按日期创建索引,比如mt-raw-2024.05.20。
场景2:需要保留ILM,同时让索引名称包含日期
ILM默认用递增序号生成索引名,要加入日期需结合Elasticsearch的手动配置:
- 在Elasticsearch中创建带日期的初始索引,并绑定ILM别名:
PUT mt-raw-2024.05.20-000001 { "aliases": { "mt-raw": { "is_write_index": true } }, "settings": { "index.lifecycle.name": "mt-ilm", "index.lifecycle.rollover_alias": "mt-raw" } }
- 修改Logstash配置,将
index指向ILM别名:
output { elasticsearch { hosts => [ "${ECK_ES_HOSTS}" ] user => "${ECK_ES_USER}" password => "${ECK_ES_PASSWORD}" ssl_certificate_authorities => "${ECK_ES_SSL_CERTIFICATE_AUTHORITY}" index => "mt-raw" # 指向ILM别名 data_stream => false ilm_enabled => "true" ilm_rollover_alias => "mt-raw" ilm_policy => "mt-ilm" manage_template => "true" template_name => "mt" } }
- 调整ILM策略,设置按日期触发rollover(比如每天一次):
PUT _ilm/policy/mt-ilm { "policy": { "phases": { "hot": { "actions": { "rollover": { "max_age": "1d", "max_size": "50gb" } } } } } }
配置完成后,ILM会在触发rollover时自动生成带日期的索引名,比如mt-raw-2024.05.21-000001。
内容的提问来源于stack exchange,提问作者ahmadubuntu
相关产品推荐
相关产品推荐

