K8s pod 中 Logstash 容器 运行 的 http 插件使用什么主机和端口?
What host and port to use for http plugin for a Logstash container running in K8s pod?
我在尝试设置使用 http 输入插件的管道时在 logstash 中收到此错误 Error: Cannot assign requested address
。
我正在尝试使用 Python 请求 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,并在 logstash 容器中获取 Error: Cannot assign requested address
。
编辑:包含 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>
根据您的信息,您正在使用 helm 进行部署,稳定图表上来自 elastic 的 docker 图像的版本是 7.1.1
如果您检查 that 版本
的 Dockerfile
他们创建了一个用户 logstash here
并且在 Dockerfile 定义期间切换到 root 但 returns 最后切换到该用户,因此你不能使用端口 80
尝试使用不同的端口,如 8080
并调整所有其他需要连接到 logstash 的服务以使用新端口或映射该服务上的端口以在服务级别上使用 80
端口,但目标指向 8080
我最终切换到 TCP 以避免消息中出现 HTTP headers。
在我的 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。
我在尝试设置使用 http 输入插件的管道时在 logstash 中收到此错误 Error: Cannot assign requested address
。
我正在尝试使用 Python 请求 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,并在 logstash 容器中获取 Error: Cannot assign requested address
。
编辑:包含 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>
根据您的信息,您正在使用 helm 进行部署,稳定图表上来自 elastic 的 docker 图像的版本是 7.1.1
如果您检查 that 版本
的 Dockerfile他们创建了一个用户 logstash here
并且在 Dockerfile 定义期间切换到 root 但 returns 最后切换到该用户,因此你不能使用端口 80
尝试使用不同的端口,如 8080
并调整所有其他需要连接到 logstash 的服务以使用新端口或映射该服务上的端口以在服务级别上使用 80
端口,但目标指向 8080
我最终切换到 TCP 以避免消息中出现 HTTP headers。
在我的 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。