Logstash添加自动删除字段异常排查及TTL配置咨询
问题解答
1. 错误信息位置与语法问题
- 错误日志位置:Logstash的错误日志默认存放在安装目录下的
logs/logstash-plain.log(Linux系统),Windows系统则是logs\logstash-plain.log;也可以在启动Logstash时通过命令参数指定自定义日志路径。 - 语法错误:你的配置存在问题——
add_field是特定过滤器插件(比如mutate)的子配置项,不能直接作为filter块的顶级配置内容。这种语法错误会导致Logstash无法正常处理事件,甚至启动失败,所以ElasticSearch中没有日志写入。
2. 正确实现Elasticsearch文档自动删除的方法
注意:Elasticsearch 2.0版本后已逐步弃用_ttl字段,官方推荐使用**索引生命周期管理(ILM)**来自动管理文档生命周期(包括删除过期文档)。以下分两种场景说明:
场景1:使用支持_ttl的旧版Elasticsearch
要在Logstash中正确添加_ttl字段,需要借助mutate插件,修改后的filter配置如下:
filter { if "drop" in [message] { drop { } } mutate { add_field => { "_ttl" => "120s" } } }
同时需要确保目标Elasticsearch索引已开启_ttl功能(默认可能关闭),可通过以下请求修改索引设置:
PUT /你的索引名/_settings { "index.ttl.enabled": true }
场景2:使用新版Elasticsearch(推荐ILM方式)
- 创建生命周期策略:定义数据在2分钟后进入删除阶段
PUT _ilm/policy/auto_delete_policy { "policy": { "phases": { "hot": { "actions": { "set_priority": { "priority": 100 } } }, "delete": { "min_age": "2m", "actions": { "delete": {} } } } } }
- 创建索引模板,将策略关联到目标索引:
PUT _index_template/auto_delete_template { "index_patterns": ["你的索引匹配规则*"], "settings": { "number_of_shards": 1, "number_of_replicas": 0, "index.lifecycle.name": "auto_delete_policy" } }
- Logstash输出配置:确保输出到匹配上述模板的索引即可,无需再添加
_ttl字段,ILM会自动处理过期文档的删除。
内容的提问来源于stack exchange,提问作者user19732244
相关产品推荐
相关产品推荐

