我想在Docker中监视我的Spring Boot应用程序的JVM内部,该Docker在Kubernetes集群中作为Pod运行。但是即使花了很多时间,我也找不到任何满意的答案。我尝试在this上引用接受的答案,但仅在我的docker在本地运行时才连接,而在Kubernetes集群后面时则停止连接。
假设我的应用程序在8000上运行时,我想在端口8001上进行监控。在本地运行Docker并将端口8001从我的本地映射到Docker(-p 8001:8001)时,将它们添加到我的VM选项工作正常(VisualVM正在显示此监视过程)
-Dcom.sun.management.jmxremote \ -Djava.rmi.server.hostname=localhost \ -Dcom.sun.management.jmxremote.port=8001 \ -Dcom.sun.management.jmxremote.rmi.port=8001 \ -Dcom.sun.management.jmxremote.local.only=false \ -Dcom.sun.management.jmxremote.authenticate=false \ -Dcom.sun.management.jmxremote.ssl=false
但是它不能在远程Kubernetes Cluster中的pod上工作。我找到了this,但我的要求是不通过Service进行监视,然后阅读其他几篇文章,使它正常运行,因此整理以下步骤以节省时间:-
spring:
application:
name: stack-application
jmx:
enabled: true
url: service:jmx:jmxmp://localhost:8001/
server:
port: 8000
apiVersion: apps/v1
kind: Deployment
----your content----
ports:
- name: stack-app-port
containerPort: 8000
- name: stack-jmx-port
containerPort: 8001
JMXMP
<dependency>
<groupId>org.glassfish.main.external</groupId>
<artifactId>jmxremote_optional-repackaged</artifactId>
<version>5.0</version>
</dependency>
,该类从我们的application.yaml中获取URLConnectorServiceFactoryBeanProvider
- 在Kubernetes上构建并部署docker,并找到pod的IP地址。您可以在CLI上使用
@Configuration public class ConnectorServiceFactoryBeanProvider { @Value("${spring.jmx.url}") private String url; @Bean public ConnectorServerFactoryBean connectorServerFactoryBean() throws Exception { final ConnectorServerFactoryBean connectorServerFactoryBean = new ConnectorServerFactoryBean(); connectorServerFactoryBean.setServiceUrl(url); return connectorServerFactoryBean; } }
。>- 现在启动VisualVM,我们还需要在类路径中添加以上下载的JMXMP jar。我创建了一个别名来执行相同的操作,并且由于JAR已下载到本地.m2目录中,因此命令如下所示:-
kubectl describe pod
- 现在,执行“ viz”或您的别名,它将启动Java附带的Visual VM应用程序。
- 单击VisualVM工具栏中的+ JMX图标,或转到(文件->添加JMX连接...)添加链接
alias viz='jvisualvm -cp "$JAVA_HOME:~/.m2/repository/org/glassfish/main/external/jmxremote_optional-repackaged/5.0/jmxremote_optional-repackaged-5.0.jar"'
并选中“不需要SSL连接”。单击确定后,您将在一段时间内在VisualVM上看到您的远程应用程序内部。屏幕截图如下。
service:jmx:jmxmp://<IP address obtained in step 6 above>:8001