DC/OS JMX 访问
DC/OS JMX Access
我有一个 dc/os 集群部署到 Azure。我已经使用 java 应用程序向集群部署了一个容器。但是我无法通过jmx访问它。
让我们以部署标准 tomcat 映像为例:
1) 我按照下一条指令打开了一个8081端口:https://docs.microsoft.com/en-us/azure/container-service/container-service-enable-public-access#open-a-port-portal.
2) 我使用下一个 json:
部署了服务
{
"id": "/tomcat",
"instances": 1,
"cpus": 1,
"mem": 512,
"container": {
"type": "DOCKER",
"docker": {
"image": "tomcat:8.0",
"network": "BRIDGE",
"portMappings": [
{ "protocol": "tcp", "hostPort": 8080 , "containerPort": 8080 },
{ "protocol": "tcp", "hostPort": 8081 , "containerPort": 8081 }
]
}
},
"requirePorts": true,
"acceptedResourceRoles": [
"slave_public"
],
"env": {
"JAVA_OPTS": "-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=10.0.0.4 -Dcom.sun.management.jmxremote.port=8081 -Dcom.sun.management.jmxremote.rmi.port=8081 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
},
"healthChecks": [
{
"gracePeriodSeconds": 120,
"intervalSeconds": 30,
"maxConsecutiveFailures": 3,
"path": "/",
"portIndex": 0,
"protocol": "HTTP",
"timeoutSeconds": 5
}
]
}
为了连接,我使用 Oracle Java Mission Control。我将字段 'Host' 和 'Port' 填写为 'prefixagents.westeurope.cloudapp.azure.com' 和“8081”。但我无法连接并收到一条消息:'Unable to connect'.
但是我可以使用 telnet 客户端成功连接到此端口:
telnet prefixagents.westeurope.cloudapp.azure.com 8081
我也可以连接到端口 8080,我可以在以下 URL 打开 tomcat 网络控制台:http://agents.westeurope.cloudapp.azure.com:8080
我又安装了一个 jmx 命令行客户端 - http://wiki.cyclopsgroup.org/jmxterm/ 并尝试连接到服务:
java -jar jmxterm-1.0-alpha-4-uber.jar --url service:jmx:rmi:///jndi/rmi://<prefix>agents.westeurope.cloudapp.azure.com:8081/jmxrmi
我遇到了下一个异常:"java.rmi.ConnectException: Connection refused to host: 10.0.0.4"。 10.0.0.4 是我的 public 代理节点的主机名。
我使用 https://docs.microsoft.com/en-us/azure/container-service/container-service-connect 连接到我的 dc/os 集群(主节点)。我还在那里安装了 jmxterm 并尝试通过 jmx 连接到该服务:
java -jar jmxterm.jar --url service:jmx:rmi:///jndi/rmi://10.0.0.4:8081/jmxrmi
连接成功
有没有人知道为什么我可以从我的主节点通过 jmx 连接到该服务,但我不能从我的本地机器?端口 8081 已打开。
Does anybody have any ideas why I can connect to the service via jmx
from my master node but I can't from my local machine? Port 8081 is
opened.
您应该按照以下命令连接 jmx。
java -jar jmxterm.jar --url service:jmx:rmi:///jndi/rmi://<agent public IP>:8081/jmxrmi
更新:
hostname 应该是 public agent ip
,然后你可以从你的本地 PC 连接 jmx。
我在 JAVA_OPTS 字符串中更改了 属性 -Djava.rmi.server.hostname 的值:-Djava.rmi.server.hostname="public agent ip"。它对我有用。
如果端口 8081 打开,标准 tomcat 容器的工作配置:
{
"id": "/tomcat",
"instances": 1,
"cpus": 1,
"mem": 512,
"container": {
"type": "DOCKER",
"docker": {
"image": "tomcat:8.0",
"network": "BRIDGE",
"portMappings": [
{ "protocol": "tcp", "hostPort": 8080 , "containerPort": 8080 },
{ "protocol": "tcp", "hostPort": 8081 , "containerPort": 8081 }
]
}
},
"requirePorts": true,
"acceptedResourceRoles": [
"slave_public"
],
"env": {
"JAVA_OPTS": "-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=<public agent ip> -Dcom.sun.management.jmxremote.port=8081 -Dcom.sun.management.jmxremote.rmi.port=8081 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
},
"healthChecks": [
{
"gracePeriodSeconds": 120,
"intervalSeconds": 30,
"maxConsecutiveFailures": 3,
"path": "/",
"portIndex": 0,
"protocol": "HTTP",
"timeoutSeconds": 5
}
]
}
我可以通过 jmx 从本地机器连接到 tomcat:host="public agent ip" 和 port=8081
public代理ip="prefix"agents.westeurope.cloudapp.azure.com
我有一个 dc/os 集群部署到 Azure。我已经使用 java 应用程序向集群部署了一个容器。但是我无法通过jmx访问它。
让我们以部署标准 tomcat 映像为例:
1) 我按照下一条指令打开了一个8081端口:https://docs.microsoft.com/en-us/azure/container-service/container-service-enable-public-access#open-a-port-portal.
2) 我使用下一个 json:
部署了服务{
"id": "/tomcat",
"instances": 1,
"cpus": 1,
"mem": 512,
"container": {
"type": "DOCKER",
"docker": {
"image": "tomcat:8.0",
"network": "BRIDGE",
"portMappings": [
{ "protocol": "tcp", "hostPort": 8080 , "containerPort": 8080 },
{ "protocol": "tcp", "hostPort": 8081 , "containerPort": 8081 }
]
}
},
"requirePorts": true,
"acceptedResourceRoles": [
"slave_public"
],
"env": {
"JAVA_OPTS": "-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=10.0.0.4 -Dcom.sun.management.jmxremote.port=8081 -Dcom.sun.management.jmxremote.rmi.port=8081 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
},
"healthChecks": [
{
"gracePeriodSeconds": 120,
"intervalSeconds": 30,
"maxConsecutiveFailures": 3,
"path": "/",
"portIndex": 0,
"protocol": "HTTP",
"timeoutSeconds": 5
}
]
}
为了连接,我使用 Oracle Java Mission Control。我将字段 'Host' 和 'Port' 填写为 'prefixagents.westeurope.cloudapp.azure.com' 和“8081”。但我无法连接并收到一条消息:'Unable to connect'.
但是我可以使用 telnet 客户端成功连接到此端口:
telnet prefixagents.westeurope.cloudapp.azure.com 8081
我也可以连接到端口 8080,我可以在以下 URL 打开 tomcat 网络控制台:http://agents.westeurope.cloudapp.azure.com:8080
我又安装了一个 jmx 命令行客户端 - http://wiki.cyclopsgroup.org/jmxterm/ 并尝试连接到服务:
java -jar jmxterm-1.0-alpha-4-uber.jar --url service:jmx:rmi:///jndi/rmi://<prefix>agents.westeurope.cloudapp.azure.com:8081/jmxrmi
我遇到了下一个异常:"java.rmi.ConnectException: Connection refused to host: 10.0.0.4"。 10.0.0.4 是我的 public 代理节点的主机名。
我使用 https://docs.microsoft.com/en-us/azure/container-service/container-service-connect 连接到我的 dc/os 集群(主节点)。我还在那里安装了 jmxterm 并尝试通过 jmx 连接到该服务:
java -jar jmxterm.jar --url service:jmx:rmi:///jndi/rmi://10.0.0.4:8081/jmxrmi
连接成功
有没有人知道为什么我可以从我的主节点通过 jmx 连接到该服务,但我不能从我的本地机器?端口 8081 已打开。
Does anybody have any ideas why I can connect to the service via jmx from my master node but I can't from my local machine? Port 8081 is opened.
您应该按照以下命令连接 jmx。
java -jar jmxterm.jar --url service:jmx:rmi:///jndi/rmi://<agent public IP>:8081/jmxrmi
更新:
hostname 应该是 public agent ip
,然后你可以从你的本地 PC 连接 jmx。
我在 JAVA_OPTS 字符串中更改了 属性 -Djava.rmi.server.hostname 的值:-Djava.rmi.server.hostname="public agent ip"。它对我有用。 如果端口 8081 打开,标准 tomcat 容器的工作配置:
{
"id": "/tomcat",
"instances": 1,
"cpus": 1,
"mem": 512,
"container": {
"type": "DOCKER",
"docker": {
"image": "tomcat:8.0",
"network": "BRIDGE",
"portMappings": [
{ "protocol": "tcp", "hostPort": 8080 , "containerPort": 8080 },
{ "protocol": "tcp", "hostPort": 8081 , "containerPort": 8081 }
]
}
},
"requirePorts": true,
"acceptedResourceRoles": [
"slave_public"
],
"env": {
"JAVA_OPTS": "-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=<public agent ip> -Dcom.sun.management.jmxremote.port=8081 -Dcom.sun.management.jmxremote.rmi.port=8081 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
},
"healthChecks": [
{
"gracePeriodSeconds": 120,
"intervalSeconds": 30,
"maxConsecutiveFailures": 3,
"path": "/",
"portIndex": 0,
"protocol": "HTTP",
"timeoutSeconds": 5
}
]
}
我可以通过 jmx 从本地机器连接到 tomcat:host="public agent ip" 和 port=8081
public代理ip="prefix"agents.westeurope.cloudapp.azure.com