本地Mac部署ELK搭配MQTT插件启动Logstash报ES 400错误求助
错误排查及解决方案
核心错误原因分析
该错误是Logstash的Elasticsearch输出插件尝试获取ES许可证信息时,访问http://localhost:9200/_license返回了400错误,结合你提供的配置,常见触发原因如下:
- 版本不兼容:你使用的Logstash版本为7.10.2,若Elasticsearch的版本和Logstash版本差超过1个小版本,会出现接口兼容性问题,许可证相关接口的请求、响应格式不匹配就会抛出该错误。
- 索引占位符不存在:output配置里的索引规则用到了
%{[@metadata][beat]}和%{[@metadata][version]}两个元数据字段,这两个字段是Filebeat、Metricbeat等beat类组件上报时才会携带的,你当前用的是MQTT输入,不存在这两个字段,会导致生成的索引名不符合ES规范,触发ES返回400错误,进而连带抛出许可证检测异常。 - ES安全配置不匹配:7.x之后的Elasticsearch默认会开启安全认证,你配置中注释了账号密码参数,若ES已经开启认证,未携带合法认证信息访问受限接口就会返回错误。
- ES服务本身异常:Elasticsearch未正常启动、端口被占用、本地网络策略限制访问9200端口,都会导致Logstash访问ES失败。
修复步骤
- 优先修正索引配置,替换不存在的占位符,示例修改如下:
output { elasticsearch { hosts => ["http://localhost:9200"] index => "mqtt-log-test-%{+YYYY.MM.dd}" # 若本地ES开启了认证,取消下面两行注释,填写你配置的ES账号密码 #user => "elastic" #password => "changeme" } }
- 确认Elasticsearch和Logstash的版本完全匹配,至少大版本和次版本号一致(比如同为7.10.x版本)。
- 本地终端执行
curl http://localhost:9200手动验证ES服务可用性,若返回认证相关提示,就把配置里的账号密码注释打开,填入正确的认证信息。 - 重启Logstash验证配置是否生效。
内容的提问来源于stack exchange,提问作者chk.buddi
相关产品推荐
相关产品推荐

