amazon-web-services - 无法在 EC2 实例上远程访问 Kibana

标签 amazon-web-services elasticsearch amazon-ec2 kibana

我是 AWS 世界的新手,我设置了一个 EC2 实例并安装了 ElasticSearch,以尝试使用它的功能并了解更多信息。我有 ElasticSearch 工作:我可以发送 curl远程请求 ES 服务并返回结果。

但是,我无法远程访问 Kibana。我首先去了我的kibana.yml文件并启用以下设置:

# Kibana is served by a back end server. This setting specifies the port to use.
server.port: 5601

# Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values.
# The default is 'localhost', which usually means remote machines will not be able to connect.
# To allow connections from remote users, set this parameter to a non-loopback address.
server.host: "127.0.0.1"

注:对于 server.host , 我试过 0.0.0.0 ,我的 EC2 实例的实际 IP 地址和 127.0.0.1 ,并且它们都不允许我的连接访问。

然后我转到我的 AWS 控制台并检查以确保我的安全组具有正确的权限:
enter image description here

然后我启动了我的 Kibana 服务:
service kibana start
在我的 SSH 终端中,我可以执行 curl localhost:5601并收到有效响应:
<script>var hashRoute = '/app/kibana';
var defaultRoute = '/app/kibana';

var hash = window.location.hash;
if (hash.length) {
  window.location = hashRoute + hash;
} else {
  window.location = defaultRoute;
} 

但是,如果我使用 Postman、我的浏览器或 curl从我的本地机器远程访问 Kibana (curl XXX.XX.XX.XXX:5601) 我得到一个 Connection refused错误。

接下来我尝试使用 vi /var/log/kibana/kibana.stderr 检查我的 Kibana 日志。 ,并发现了一个有趣的错误信息:
    at net.js:1408:9
    at _combinedTickCallback (internal/process/next_tick.js:83:11)
    at process._tickCallback (internal/process/next_tick.js:104:9)
  cause:
   { Error: listen EADDRNOTAVAIL XX.XXX.XX.XX:5601
       at Object.exports._errnoException (util.js:1020:11)
       at exports._exceptionWithHostPort (util.js:1043:20)
       at Server._listen2 (net.js:1249:19)
       at listen (net.js:1298:10)
       at net.js:1408:9
       at _combinedTickCallback (internal/process/next_tick.js:83:11)
       at process._tickCallback (internal/process/next_tick.js:104:9)
     code: 'EADDRNOTAVAIL',
     errno: 'EADDRNOTAVAIL',
     syscall: 'listen',
     address: 'XX.XX.XX.XX',
     port: 5601 },
  isOperational: true,
  code: 'EADDRNOTAVAIL',
  errno: 'EADDRNOTAVAIL',
  syscall: 'listen',
  address: 'XX.XXX.XX.XXX',
  port: 5601 }
XX.XX...代表我的 EC2 实例 IP 地址。好像有些东西已经绑定(bind)到 5601 端口了。所以我接下来发布了 sudo lsof -i:5601并看到了这个输出:
> COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME node    3676
> kibana   11u  IPv4  14951      0t0  TCP localhost:esmagent (LISTEN)

我对 Linux 一点经验都没有,但这似乎表明 kibana 已正确绑定(bind)到此端口。所以在这一点上,我的想法很新鲜。我浏览了 SO 帖子 like this one关于同样的问题,并尝试了他们的答案(在上面的工作流程中)。任何人有任何想法是什么导致了这个错误?

编辑:我已经能够在我的本地实例上启动 Kibana,并且能够连接到我的 ElasticSearch 服务。我刚刚更改了本地 kibana.yml 中的设置文件指向我的 EC2 实例端口 9200。但我仍然很想知道为什么我无法在我的 EC2 实例上访问 Kibana!

最佳答案

这不是一个很好的答案,因为我不确定究竟是什么解决了这个问题,但是对于遇到类似头痛的 future 用户,我终止了我的实例并完全重新安装了 Java 8、Elastic Search 和 Kibana。我 确保 ES 和 Kibana 版本号匹配 .例如,我使用的是 5.6 Kibana,但最初使用的是 2.x Elastic Search。

然后,确保您的入站安全组设置允许 TCP 访问 ES 和 Kibana 的端口 9200 和 5601。

然后,如评论中所述,将 Kibana 绑定(bind)到 0.0.0.0。这就是让我工作的原因。

我知道我没有给出一个很好的理论错误原因,但也许这将有助于为下一个用户检查列表中的一些内容。

关于amazon-web-services - 无法在 EC2 实例上远程访问 Kibana,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47209025/

相关文章:

powershell - DynamoDB API 过滤扫描不返回任何结果

python - AWS Elastic Beanstalk chown PythonPath 错误

amazon-ec2 - 在 Amazon EC2 上连接 rabbitmq 集群时出错

javascript - ElasticSearch Access-Control-Allow-Headers header 不存在

linux - 如何在没有EBS的情况下增加ec2实例根文件系统?

python-3.x - 如何使用 sqs 启动 ec2 实例并在实例中触发 python 脚本

postgresql - 使用 Cloudformation 在 AWS Postgres RDS 中创建多个数据库

java - AWS 使用 Hadoop API 增加映射和缩减器

elasticsearch - 添加grep过滤器时Logstash无法启动

elasticsearch - 在Elasticsearch中match和bool必须匹配查询有什么区别