这个错误表明 Logstash 配置文件中引用了 ${xpack.monitoring.elasticsearch.hosts}
变量,而该变量既未在环境变量中定义,也未在 Logstash 的 secrets 存储中配置,同时也没有提供默认值。
解决问题的步骤
1. 理解问题来源
${xpack.monitoring.elasticsearch.hosts}
是一个占位符,通常用于配置 Logstash 监控功能。- 如果未正确定义该变量,Logstash 会尝试从以下来源查找:
- 环境变量
- Logstash Secrets Store
- 配置文件中明确的值
- 如果以上任一来源未提供值,则会触发此错误。
2. 解决方案
方法 1:设置环境变量
在 Docker Compose 文件中,添加环境变量 XPACK_MONITORING_ELASTICSEARCH_HOSTS
,并指向 Elasticsearch 的地址。
修改 docker-compose.yml
:
- 环境变量解释:
XPACK_MONITORING_ELASTICSEARCH_HOSTS
: 设置用于监控的 Elasticsearch 地址。XPACK_MONITORING_ELASTICSEARCH_USERNAME
: Elasticsearch 的用户名。XPACK_MONITORING_ELASTICSEARCH_PASSWORD
: Elasticsearch 的密码。
方法 2:直接在 logstash.yml
配置文件中设置默认值
如果不使用环境变量,可以直接在 logstash.yml
中定义监控配置。
编辑 logstash.yml
文件:
然后将 logstash.yml
文件挂载到容器:
方法 3:禁用 X-Pack 监控
如果不需要启用 X-Pack 监控,可以直接禁用它。
修改 logstash.yml
:
或者在 Docker Compose 中添加环境变量:
方法 4:定义默认值
如果需要更灵活的配置方式,可以在使用占位符的同时提供默认值。例如:
这种方式表示:
- 如果环境变量
XPACK_MONITORING_ELASTICSEARCH_HOSTS
存在,则使用其值。 - 否则,使用默认值
https://elasticsearch:9200
。
3. 检查日志和验证配置
检查日志
查看 Logstash 容器日志,确认是否还有错误:
验证配置是否生效
检查是否启用了 X-Pack 监控:
应该看到类似
.monitoring-logstash-*
的索引。如果禁用了 X-Pack 监控,确保 Logstash 正常运行。
总结
- 如果需要启用监控:
- 在
logstash.yml
或环境变量中正确配置xpack.monitoring.elasticsearch.*
。
- 在
- 如果不需要监控:
- 在配置中禁用
xpack.monitoring.enabled
。
- 在配置中禁用
- 检查环境变量或配置文件是否正确加载,并确保挂载到容器的路径无误。
通过这些步骤,你可以解决 Logstash 容器的 ${xpack.monitoring.elasticsearch.hosts}
未定义问题。