首页 > 解决方案 > 在 K8s pod 中运行的 Logstash 容器的 http 插件使用什么主机和端口?

问题描述

Error: Cannot assign requested address尝试设置使用 http 输入插件的管道时,我在 logstash 中收到此错误。

我正在尝试使用 Python requests http 库将数据从 Python 进程发送到 logstash。我不确定在我的 logstash http 输入配置中使用哪个主机和端口。我应该使用默认值、logstash pod ClusterIP 服务 IP、logstash pod IP 还是其他?

input {
    http {
        host => "0.0.0.0"
        port => 80
    }
  }

默认 url 是 0.0.0.0:80 但我在 Python 端收到连接错误。我还尝试了运行 logstash 容器的 Logstash K8s pod 的 url,并进入Error: Cannot assign requested address了 logstash 容器。

编辑:包括logstash服务细节

Name:              central-logstash
Namespace:         default
Labels:            app=logstash
                   chart=logstash-1.10.0
                   heritage=Tiller
                   release=central-logstash
Annotations:       <none>
Selector:          app=logstash,release=central-logstash
Type:              ClusterIP
IP:                10.110.133.189
Port:              beats  5044/TCP
TargetPort:        beats/TCP
Endpoints:         192.168.0.79:5044
Session Affinity:  None
Events:            <none>

标签: pythonkubernetespython-requestslogstashlogstash-configuration

解决方案


我最终切换到 TCP 以避免消息中出现 HTTP 标头。

在我的 Logstash Helm 配置(https://github.com/helm/charts/tree/master/stable/logstash)中,我将服务设置为:

service:
  type: ClusterIP
  annotations: {}
  ports:
     tcp-data:
       port: 1514
       targetPort: tcp-data
       protocol: TCP
     tcp-event:
       port: 1515
       targetPort: tcp-event
       protocol: TCP

ports:
  - name: tcp-data
    containerPort: 1514
    protocol: TCP
  - name: tcp-event
    containerPort: 1515
    protocol: TCP

还有 tcp 插件:

inputs:
 data: |-
    input {
        tcp {
            port => 1514
            type => json
        }
      }
 event: |-
    input {
        tcp {
            port => 1515
            type => json
        }
      }

然后在 Python 端,我能够使用套接字库通过 Logstash clusterIP 服务的 IP 和端口 1514 或 1515 向 Logstash 发送消息。


推荐阅读