首页 > 解决方案 > Docker 中的 ELK 和不同网络中机器中的 Beats

问题描述

我试图在我的专用网络中的 docker 容器中配置 ELK,并在另一个专用网络中配置带有节拍的 Linux 盒子。我试图为 Filebeat 生成 SSL 证书以验证 ELK 服务器的身份。我尝试通过转发容器端口来使用容器主机的公网 IP,但没有成功。任何人都可以帮助我验证文件节拍节点中的 ELK 服务器身份。

我做了什么?

在网络 A 上: 1) 使用 sebp/elk 映像启动 ELK 容器 2) 对端口 5601、9200、5044 进行端口转发 3) 验证 kibana 是否在 web 中加载并且成功 4) 在 ELK 容器中生成 SSL 证书使用安装 docker 的主机的公共 IP。5) 将此 SSL 证书复制到 beats 主机 /etc/pki/tls/certs/

在网络 B 上: 1)在机器中安装了 beats(不是容器)2)用 Docker 主机的公共 IP 配置了 filebeat.yml 和端口(比如 xxxx:8001)并添加了 ssl 证书路径 3)在网络中重新启动了 logstash A 和网络 B 中的 filebeat 并收到以下错误 错误: .514762 transport.go:125:ERR SSL 客户端无法连接:x509:无法验证证书,因为它不包含任何 IP SAN。

非常感谢提前

标签: dockerelastic-stackfilebeat

解决方案


您可以检查和验证以下几点 -

  1. 将容器的 elasticsearch、logstash 和 kibana 端口暴露给主机,如果使用默认端口,请使用以下命令检查 -
  docker port elk_stack
  5044/tcp -> 0.0.0.0:5044
  5601/tcp -> 0.0.0.0:5601
  9200/tcp -> 0.0.0.0:9200
  1. 检查 filebeat 日志是否显示连接请求以更正 elasticsearch/kibana 主机,在上述情况下,这将是您的主机 IP 和公开的容器端口。

  2. 检查是否可以从运行 filebeat 的远程主机使用 curl 命令访问 elasticsearch 和 kibana -

curl ${elasticsearch_host}:9200
curl ${kibana_host}:5601

推荐阅读