我有一个关于应用程序的"健康检查"的问题。我指的是文件:https://docs.cloudfoundry.org/devguide/deploy-apps/healthchecks.html我知道,当我们部署应用程序时,会创建一个默认的"健康检查",其类型为PORT。CloudFoundry会自动检查此端口的运行状况。
我的问题是:
- 我在CF上部署了一个具有默认运行状况检查的应用程序。当我
ssh
进入部署的应用程序,并尝试使用命令lsof -i -P -n
搜索可用端口时,我会看到以下响应:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 7 vcap 47u IPv4 474318791 0t0 TCP *:8080 (LISTEN)
diego-ssh 8 vcap 3u IPv4 474330297 0t0 TCP *:2222 (LISTEN)
diego-ssh 8 vcap 7u IPv4 474330524 0t0 TCP 10.XXX.XX.XXX:2222->10.YYY.YY.YYY:58858 (ESTABLISHED)
你能告诉我上面哪一个响应充当健康检查端口吗?(或者我看错地方了??(
- 我知道CF连接此端口是为了对部署的应用程序进行健康检查。是否可以手动连接到已部署应用程序的此运行状况检查端口(类似于CF内部的操作(?如何从Mac系统(已安装cf cli(执行此操作
你能告诉我上面的哪个响应充当健康检查端口吗?(或者我看错地方了??(
我怀疑这是您的应用程序。
java 7 vcap 47u IPv4 474318791 0t0 TCP*:8080(LISTEN(
它在8080端口上侦听,这几乎总是Cloud Foundry告诉您的应用程序侦听的端口(即$PORT
(。
不过这不是回应。这是您的应用程序在侦听该端口上的连接。运行状况检查(TCP运行状况检查(将定期运行,并与通过$PORT
(即8080(分配的值建立TCP连接。如果该TCP连接成功,则运行状况检查通过。如果无法连接或超时,则运行状况检查将失败,平台将确定您的应用程序已崩溃。然后它将重新启动应用程序实例。
我知道CF连接此端口是为了对部署的应用程序进行健康检查。是否可以手动连接到已部署应用程序的此运行状况检查端口(类似于CF内部的操作(?
是。cf ssh
添加到您的应用程序中。然后运行nc -v localhost 8080
。这将建立TCP连接。-v
标志为您提供详细的输出。
例如:
> nc -v localhost 8080 # successful
Connection to localhost port 8080 [tcp/http-alt] succeeded!
> nc -v localhost 8081 # failure
nc: connectx to localhost port 8081 (tcp) failed: Connection refused
nc: connectx to localhost port 8081 (tcp) failed: Connection refused
如何从Mac系统(安装了cf cli(执行此操作
默认情况下,您无权直接执行此操作。这也不是一个公平的比较。健康检查在容器内部运行,因此从技术上讲,在cf ssh
之后从容器内部运行nc
是最准确的比较。
如果您想实现这一点,您可能可以使用cf ssh
中的隧道功能。我没有测试,但我认为这样的东西会起作用:cf ssh -L 8080:localhost:8080 YOUR-HOST-APP
。
然后,nc -v localhost 8080
和nc
将连接到ssh
正在侦听的本地端口(即<local-port>:<destination>:<destination-port>
(。同样,如果您想要准确性,那么您应该将cf ssh
放入容器中,然后从那里运行nc
。