我在将 Logstash 连接到 Elasticsearch 时遇到问题。
我已经使用 helm 在 kubernetes 上安装了 ELK 堆栈。每个 Pod 都在运行并处于就绪状态。 Elasticsearch 和 kibana 非常好(即连接正确)。问题是logstash 无法识别Elasticsearch 来建立连接。
找到下面的错误截图:
请帮忙提出正确的解决方案。
第3步,部署Fluentbit DaemonSet。这里,
env
变量FLUENT_ELASTICSEARCH_HOST
根据https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#srv-records修改为
elasticsearch.default.svc.cluster.local
,格式为: [srv].[namespace].srv.cluster.local
。 Kubernetes DNS 已知该连接字符串。
因此将您的环境变量更改为“Kubernetes DNS”格式
按照 ECK 教程,您应该已经拥有一个服务,您可以通过执行
kubectl get services -n [namespace]
或 kubectl get services -A
来获取该服务
我认为您遇到的问题是,在较新的 ELK Helm 图表中,Elastic Search 具有证书,并使用用户名和密码进行身份验证。
您需要对logstash helm-chart文件夹中的
values.yaml
文件进行以下编辑:
logstashPipeline:
logstash.conf: |
input {
beats {
port => 5044
}
}
output {
elasticsearch {
hosts => "https://elasticsearch-master:9200"
cacert => "/usr/share/logstash/config/elasticsearch-master-certs/ca.crt"
user => '${ELASTICSEARCH_USERNAME}' # Elasticsearch username
password => '${ELASTICSEARCH_PASSWORD}' # Elasticsearch password
}
}
extraEnvs:
- name: "ELASTICSEARCH_USERNAME"
valueFrom:
secretKeyRef:
name: elasticsearch-master-credentials
key: username
- name: "ELASTICSEARCH_PASSWORD"
valueFrom:
secretKeyRef:
name: elasticsearch-master-credentials
key: password
secretMounts:
- name: "elasticsearch-master-certs"
secretName: "elasticsearch-master-certs"
path: "/usr/share/logstash/config/elasticsearch-master-certs"
service:
annotations: {}
type: ClusterIP
loadBalancerIP: ""
ports:
- name: beats
port: 5044
protocol: TCP
targetPort: 5044
- name: http
port: 8080
protocol: TCP
targetPort: 8080
有了这个,您应该能够毫无问题地连接到 Elasticsearch。 另请检查日志以查看是否正常工作
kubectl logs <container name>
如需更全面的说明,请参阅
Davis Angwenyi
发表的关于 如何使用 HELM 将 Elastic Stack 安装到 Kubernetes 中的帖子
干杯!!!