DC / OS JMX访问

时间:2017-06-05 15:49:28

标签: java azure docker jmx dcos

我有一个部署到azure的dc / os集群。我已经使用我的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'和'港口' as' prefixagents.westeurope.cloudapp.azure.com'和' 8081'但是我无法连接,而且收到了一条消息:“无法连接”。

但是对于我可以使用telnet客户端成功连接到此端口的所有内容:

telnet prefixagents.westeurope.cloudapp.azure.com 8081

此外,我可以连接到端口8080,我可以通过以下URL打开tomcat Web控制台: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

我得到了下一个异常:&#34; java.rmi.ConnectException:连接拒绝主机:10.0.0.4&#34;。 10.0.0.4是我的公共代理节点的主机名。

我使用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已打开。

2 个答案:

答案 0 :(得分:3)

我在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

公共代理人ip =“prefix”agents.westeurope.cloudapp.azure.com

答案 1 :(得分:2)

  

有没有人知道为什么我可以通过jmx连接到服务   从我的主节点,但我不能从我的本地机器? 8081港口是   打开。

您应该将jmx连接为以下命令。

java -jar jmxterm.jar --url service:jmx:rmi:///jndi/rmi://<agent public IP>:8081/jmxrmi 

更新

主机名应为public agent ip,然后您可以从本地PC连接jmx。