使用Logstash的amazon_es插件时模板安装失败求助
解决Logstash amazon_es插件的Failed to parse mapping [default]错误
我来帮你搞定这个Logstash amazon_es插件的模板解析错误,我之前处理过类似的问题,下面是几个实用的解决办法:
首先先明确你的配置和遇到的错误:
你的Logstash配置:
input { tcp { host => "0.0.0.0" port => 5959 codec => json } } output { amazon_es { hosts => ["XXXXXXX.ap-south-1.es.amazonaws.com"] region => "ap-south-1" aws_access_key_id => "XXXXXXXXX" aws_secret_access_key => "XXXXXXXXXXXXX" index => "production-logs-%(YYYY-MM-dd)" } }
遇到的错误信息:
[ERROR] 2018-04-17 12:03:59.056 [[main]-pipeline-manager] amazones - Failed to install template: Failed to parse mapping [default]
错误原因分析
这个问题主要有两个常见诱因:
- Logstash的amazon_es插件默认自动生成的索引模板,语法和你使用的AWS Elasticsearch Service版本不兼容(比如AWS ES 6.x/7.x已经废弃了旧的
_type映射字段); - 你配置的索引名格式有误,导致插件在生成模板时出现解析问题。
具体解决方案
1. 先修正索引名的语法错误
你现在用的%(YYYY-MM-dd)不是Logstash正确的日期变量格式,正确的写法应该是%{+YYYY-MM-dd},这样Logstash才能正确生成按日期分割的索引名。修改后的output配置如下:
output { amazon_es { hosts => ["XXXXXXX.ap-south-1.es.amazonaws.com"] region => "ap-south-1" aws_access_key_id => "XXXXXXXXX" aws_secret_access_key => "XXXXXXXXXXXXX" index => "production-logs-%{+YYYY-MM-dd}" } }
2. 禁用自动模板安装,手动创建兼容的索引模板
插件自动生成的模板经常会有版本兼容性问题,最稳妥的方式是禁用自动模板管理,自己创建符合AWS ES版本的模板:
- 第一步:在amazon_es输出配置中添加
manage_template => false,告诉Logstash不要自动安装模板:output { amazon_es { hosts => ["XXXXXXX.ap-south-1.es.amazonaws.com"] region => "ap-south-1" aws_access_key_id => "XXXXXXXXX" aws_secret_access_key => "XXXXXXXXXXXXX" index => "production-logs-%{+YYYY-MM-dd}" manage_template => false # 新增这一行 } } - 第二步:用AWS CLI手动创建索引模板(假设你已经配置好AWS凭证),替换
YOUR_ES_DOMAIN_NAME为你的AWS ES域名:aws es put-template --domain-name YOUR_ES_DOMAIN_NAME --name production-logs-template --body '{ "index_patterns": ["production-logs-*"], "mappings": { "properties": { "@timestamp": { "type": "date" }, "@version": { "type": "keyword" }, "message": { "type": "text" } # 可以根据你的日志字段添加更多映射规则 } }, "settings": { "number_of_shards": 3, "number_of_replicas": 1 } }'
3. 检查并升级amazon_es插件版本
如果你的Logstash版本和amazon_es插件版本不匹配,也会导致模板语法错误。比如旧版本插件会生成包含_type字段的映射,而AWS ES 6.x+已经不再支持多个文档类型,7.x更是完全移除了_type。
升级插件的命令(在Logstash安装目录下执行):
bin/logstash-plugin update logstash-output-amazon_es
升级完成后重启Logstash,再测试日志推送是否正常。
内容的提问来源于stack exchange,提问作者sadaf2605
相关产品推荐
相关产品推荐

