Logstash 无法连接到 kubernetes 上的 Elasticsearch

问题描述 投票:0回答:2

我在将 Logstash 连接到 Elasticsearch 时遇到问题。

我已经使用 helm 在 kubernetes 上安装了 ELK 堆栈。每个 Pod 都在运行并处于就绪状态。 Elasticsearch 和 kibana 非常好(即连接正确)。问题是logstash 无法识别Elasticsearch 来建立连接。

找到下面的错误截图:

here's the problem

as you can see everything is running fine

请帮忙提出正确的解决方案。

kubernetes connection logstash elastic-stack
2个回答
0
投票

看下面 https://medium.com/kubernetes-tutorials/exporting-kubernetes-logs-to-elasticsearch-using- Fluent-bit-758e8de606af

第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

来获取该服务

0
投票

我认为您遇到的问题是,在较新的 ELK Helm 图表中,Elastic Search 具有证书,并使用用户名和密码进行身份验证。

您需要对logstash helm-chart文件夹中的

values.yaml
文件进行以下编辑:

  • 将logstashPipeline更新为:

    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 添加值:

    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 中的帖子

干杯!!!

© www.soinside.com 2019 - 2024. All rights reserved.