roh*_*msh 3 jmx visualvm docker spring-boot kubernetes
我想在 Docker 中监控 Spring Boot 应用程序的 JVM 内部,该应用程序在 Kubernetes 集群中作为 Pod 运行。但即使花了相当长的时间,我也无法在任何地方找到满意的答案。我试过指对接受的答案这个,但它只是连接,当我的搬运工在本地运行,并且停止而Kubernetes集群背后连接。
假设我想在我的应用程序在 8000 上提供服务时在端口 8001 上进行监控。将这些添加到我的 VM 选项工作正常(VisualVM 正在显示此监控过程),同时在本地运行 Docker 并将端口 8001 从我的本地映射到 Docker(-p 8001 :8001)
-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
Run Code Online (Sandbox Code Playgroud)
但它不适用于远程 Kubernetes 集群中的 pod。我发现了这一点,但我的要求是在不通过 Service 的情况下进行监控,然后通过阅读其他几篇文章我让它工作,因此整理以下步骤以节省某人的时间:-
spring:
application:
name: stack-application
jmx:
enabled: true
url: service:jmx:jmxmp://localhost:8001/
server:
port: 8000
Run Code Online (Sandbox Code Playgroud)
apiVersion: apps/v1
kind: Deployment
----your content----
ports:
- name: stack-app-port
containerPort: 8000
- name: stack-jmx-port
containerPort: 8001
Run Code Online (Sandbox Code Playgroud)
<dependency>
<groupId>org.glassfish.main.external</groupId>
<artifactId>jmxremote_optional-repackaged</artifactId>
<version>5.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
ConnectorServiceFactoryBeanProvider从 application.yaml 中获取 URL的新类@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;
}
}
Run Code Online (Sandbox Code Playgroud)
kubectl describe pod在 CLI 上使用它alias viz='jvisualvm -cp "$JAVA_HOME:~/.m2/repository/org/glassfish/main/external/jmxremote_optional-repackaged/5.0/jmxremote_optional-repackaged-5.0.jar"'
Run Code Online (Sandbox Code Playgroud)
service:jmx:jmxmp://<IP address obtained in step 6 above>:8001
Run Code Online (Sandbox Code Playgroud)
并选中“不需要 SSL 连接”。点击 OK 后,您应该会在 VisualVM 上看到您的远程应用程序内部结构。下面附上截图。
| 归档时间: |
|
| 查看次数: |
857 次 |
| 最近记录: |