K8s中Logstash未连Loki却尝试连接Elasticsearch问题求助
问题:Logstash在K8s中持续连接Elasticsearch而非输出到Loki
Logstash部署在Kubernetes集群中,已通过环境变量设置XPACK_MONITORING_ENABLED: false,同时在logstash.yml里配置了xpack.monitoring.enabled: false,但Logstash并未按配置将日志输出到Loki,反而持续尝试连接Elasticsearch并报错。
相关配置及报错信息
配置文件
logstash.yml: | http.host: "0.0.0.0" log.level: debug xpack.monitoring.enabled: false path.config: /usr/share/logstash/pipeline logstash.conf: | input { file{ path => "/var/log/containers/*.log" } } filter { kubernetes { source => "path" target => "loki" } } output { stdout { codec => rubydebug} loki { url => "http://loki-loki-distributed-distributor.loki-benchmark.svc.cluster.local:3100/loki/api/v1/push" } }
控制台输出
[2022-12-13T06:31:40,411][ERROR][logstash.licensechecker.licensereader] 无法从许可证服务器获取许可证信息 {:message=>"无可用连接"} [2022-12-13T06:31:50,775][WARN ][logstash.licensechecker.licensereader] 尝试恢复与已失效ES实例的连接,但失败。 {:url=>"http://elasticsearch:9200/", :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=>"Elasticsearch 不可达: [http://elasticsearch:9200/][Manticore::ResolutionFailure] elasticsearch: 名称或服务未知"} [2022-12-13T06:32:10,414][ERROR][logstash.licensechecker.licensereader] 无法从许可证服务器获取许可证信息 {:message=>"无可用连接"} [2022-12-13T06:32:20,910][WARN ][logstash.licensechecker.licensereader] 尝试恢复与已失效ES实例的连接,但失败。 {:url=>"http://elasticsearch:9200/", :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=>"Elasticsearch 不可达: [http://elasticsearch:9200/][Manticore::ResolutionFailure] elasticsearch: 名称或服务未知"} [2022-12-13T06:32:40,412][ERROR][logstash.licensechecker.licensereader] 无法从许可证服务器获取许可证信息 {:message=>"无可用连接"} [2022-12-13T06:32:50,998][WARN ][logstash.licensechecker.licensereader] 尝试恢复与已失效ES实例的连接,但失败。 {:url=>"http://elasticsearch:9200/", :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=>"Elasticsearch 不可达: [http://elasticsearch:9200/][Manticore::ResolutionFailure] elasticsearch: 名称或服务未知"} [2022-12-13T06:33:10,410][ERROR][logstash.licensechecker.licensereader] 无法从许可证服务器获取许可证信息 {:message=>"无可用连接"} [2022-12-13T06:33:21,328][WARN ][logstash.licensechecker.licensereader] 尝试恢复与已失效ES实例的连接,但失败。 {:url=>"http://elasticsearch:9200/", :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=>"Elasticsearch 不可达: [http://elasticsearch:9200/][Manticore::ResolutionFailure] elasticsearch: 名称或服务未知"}
Kubernetes配置
image: "grafana/logstash-output-loki:1.0.1" imagePullPolicy: "IfNotPresent" command: - '/bin/sh' - '-c' - 'logstash-plugin install --no-verify logstash-filter-kubernetes && logstash -f /usr/share/logstash/pipeline/logstash.conf'
解决方案
1. 补充X-Pack相关禁用配置
报错来自logstash.licensechecker.licensereader,说明仅关闭monitoring不足以阻止Logstash尝试连接Elasticsearch获取许可证。需要在logstash.yml中添加以下配置,彻底禁用相关X-Pack功能:
xpack.monitoring.enabled: false xpack.management.enabled: false xpack.license.self_generated.type: basic
2. 确保配置文件正确加载
当前启动命令直接指定了pipeline配置,但可能未正确加载logstash.yml。需确认logstash.yml已挂载到Logstash默认配置目录(通常是/usr/share/logstash/config/),或者在启动命令中显式指定配置路径:
command: - '/bin/sh' - '-c' - 'logstash-plugin install --no-verify logstash-filter-kubernetes && logstash --path.settings /usr/share/logstash/config -f /usr/share/logstash/pipeline/logstash.conf'
3. 验证配置生效
修改配置后重启Logstash Pod,观察控制台日志是否再无Elasticsearch连接报错,同时检查Loki是否接收到日志数据。
内容的提问来源于stack exchange,提问作者boycod3
相关产品推荐
相关产品推荐

