Kubernetes 中使用 SpringBoot Admin 监控&调试 SpringBoot 应用

在这里插入图片描述


欢迎关注我的个人博客,关注最新动态: http://www.mydlq.club


系统环境:

背景:

Spring Boot Admin 是一个开源社区项目,用于管理和监控 SpringBoot 应用程序,展示Spring Boot Admin Client 的 Actuator 端点上的一些监控信息。这里要在 Kubernetes 中部署 SpringBoot Admin,由于 Kubernetes 自带服务发现,所以去掉注册中心等,这里需要和 SpringCloud Kubernetes 完成 Kubernetes 下的服务发现。这里将演示 SpringBoot Admin 与 SpringCloud Kubernetes 配合完成监控 Kubernetes 中的 SpringBoot 应用。

一、SrpingBoot Admin 介绍

Spring Boot Admin 是一个开源社区项目,用于管理和监控 SpringBoot 应用程序,展示Spring Boot Admin Client 的 Actuator 端点上的一些监控信息。

它为应用程序提供以下功能:

  • 显示应用健康状况
  • 关注并下载日志文件
  • 查看jvm系统和环境属性
  • 查看Spring Boot配置属性
  • 支持Spring Cloud的postable / env-和/ refresh-endpoint
  • 轻松的日志级管理

二、SrpingCloud Kubernetes 介绍

Spring Cloud Kubernetes 提供 Kubernetes 环境下服务发现的 Spring Cloud 通用接口实现。主要目的是促进在 Kubernetes 中运行的 Spring Cloud 和 Spring Boot 应用程序的集成。

这里我们主要用 SpringCloud Kubernetes 来为 SpringBoot Admin 提供 Kubernetes 环境下的服务发现。

三、创建 SpringBoot Admin 应用

创建 SpringBoot Admin 应用,且引入 SpringCloud Kubernetes 作为服务发现。

Maven 引入相关依赖

在 Maven 中引入 “spring-boot-admin-starter-server” 与 “spring-cloud-kubernetes-discovery” 依赖。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
        <relativePath/>
    </parent>

    <groupId>club.mydlq</groupId>
    <artifactId>springboot-admin-k8s</artifactId>
    <version>0.0.2</version>
    <name>springboot-admin-k8s</name>
    <description>demo</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!--web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--SpringBoot Admin-->
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-server</artifactId>
            <version>2.1.5</version>
        </dependency>
        <!--SpringCloud Kubernetes-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-kubernetes-discovery</artifactId>
            <version>1.0.2.RELEASE</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

配置 application 文件

加上两个参数:

  • spring.cloud.kubernetes.discovery.primaryPortName:
  • spring.cloud.kubernetes.discovery.serviceLabels:
server:
  port: 8080
  
management:
  server:
    port: 8081                          #---指定监控数据端口为8081,避免和 server.port 一致产生风险
  endpoints:
    web:
      exposure:
        include: "*"

spring:
  application:
    name: springboot-admin-k8s
  cloud:
    kubernetes:
      discovery:
        primaryPortName: management     #---按设要监控 Service 的端口名称
        serviceLabels:
          admin: enabled                #---设置要监控 Service 的 Label 标签

启动类

需要加上四个注解:

  • @SpringBootApplication:开启 SpringBoot 相关注解,会自动配置相关信息。
  • @EnableDiscoveryClient:开启 Spring服务发现机制。
  • @EnableAdminServer:开启 SpringBoot Admin。
  • @EnableScheduling:开启定时任务,不加此注解服务发现不会执行定时刷新。
import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableDiscoveryClient
@EnableAdminServer
@EnableScheduling
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

四、将 SpringBoot 应用构建 Docker 镜像

将上面创建的 SpringBoot Admin 应用编译成 Docker 镜像。

执行 Maven 打包

$ mvn clean package

Dockerfile 文件

FROM openjdk:8u212-b04-jre-slim
VOLUME /tmp
ADD target/*.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS="-Duser.timezone=Asia/Shanghai"
ENV APP_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar $APP_OPTS" ]

编译 Docker 镜像

这里使用的是 docker 官方仓库,将其推送到仓库,方便后续 Kubernetes 操作。

$ docker build -t mydlqclub/springboot-admin-k8s:0.0.1 .

五、部署应用到 Kubernetes

将 SpringBoot Admin 应用部署到 Kubernetes 中,这里提前设置 Kubernetes 部署的 yaml 文件,然后执行 Kubectl 命令将其启动。

准备应用 yaml 文件

springboot-admin-rbac.yaml

由于 SpringBoot Admin 需要服务发现,所以创意一个 ServiceAccount。注意提前修改角色所属的“namespace”

apiVersion: v1
kind: ServiceAccount
metadata:
  name: springboot-admin-k8s
  namespace: mydlqcloud
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: springboot-admin-k8s
subjects:
  - kind: ServiceAccount
    name: springboot-admin-k8s
    namespace: mydlqcloud
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io

springboot-admin-k8s.yaml

注意下面的 Service 注释说明,必须设置对应 Label 和 Port 名称,SpringBoot Admin 会发现带有这些名称的 Service 和 Port。

apiVersion: v1
kind: Service
metadata:
  name: springboot-admin-k8s
  labels:
    app: springboot-admin-k8s
    admin: enabled            #---设置此标签,表示此应用被 Springboot Admin 服务发现
  annotations:
spec:
  type: NodePort              #---通过NodePort方式暴露端口,方便外界访问
  ports:
    - name: server            #---服务端口名,用于访问监控 UI
      nodePort: 30080
      port: 8080             
      targetPort: 8080
    - name: management        #---指定监控端口名,表示此应用被 Springboot Admin 服务发现 
      nodePort: 30081
      port: 8081
      targetPort: 8081
  selector:
    app: springboot-admin-k8s
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: springboot-admin-k8s
  labels:
    app: springboot-admin-k8s
spec:
  replicas: 1
  selector:
    matchLabels:
      app: springboot-admin-k8s
  template:
    metadata:
      labels:
        app: springboot-admin-k8s
    spec:
      serviceAccountName: springboot-admin-k8s
      containers:
      - name: springboot-admin-k8s
        image: mydlqclub/springboot-admin-k8s:0.0.1
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
          name: server
        - containerPort: 8081
          name: management
        resources: 
          limits:
            cpu: 1000m
            memory: 512Mi
          requests:
            cpu: 500m
            memory: 256Mi

在 Kubernetes 创建应用

利用 Kubectl 命令执行 yaml 文件,创建角色和应用部署对象。

  • -n:指定应用创建的 Namespace,应该替换成自己 Kubernetes 集群中的 Namespace 名称

创建 SpringBoot Admin RBAC

$ kubectl apply -f springboot-admin-rbac.yaml -n mydlqcloud

创建 SpringBoot Admin Deployment

$ kubectl apply -f springboot-admin-k8s.yaml -n mydlqcloud

查看已经启动的 SpringBoot Admin 应用

利用 Kubectl 命令查看 Kubernetes 中启动的应用,可以看到 SpringBoot Admin 已经成功启动。

$ kubectl get pods -n mydlqcloud

NAME                                          READY   STATUS    RESTARTS   AGE
springboot-admin-k8s-54c668b5ff-b9snz         1/1     Running   0          1m

六、进入 SpringBoot Admin 界面查看应用信息

输入 Kubernetes 集群地址和 SpringBoot Admin Service 的 NodePort 端口,http://ClusterIP:30080 访问 Admin 服务,本人地址为:http://192.168.2.11:30080,打开后看到 Admin 的 UI 界面如下:

七、新增示例进行测试

上面的监控的只有一条信息,即 SpringBoot Admin 本身,为了测试其它 SpringBoot 应用,这里我们启用一个 示例 “Hello-World” 项目。

创建测试应用

创建一个测试用例的 SpringBoot 应用,具体的代码比较简单所以不再展示,需要注意的是 application 配置文件中设置 Actuator 的 “management” 端口,方便监控。

server:
  port: 8080
  
management:
  server:
    port: 8081   #---指定监控数据端口为8081
  endpoints:
    web:
      exposure:
        include: "*"

然后配置 Kubernetes 中的应用 yaml 文件

springboot-helloworld.yaml

apiVersion: v1
kind: Service
metadata:
  name: springboot-helloworld
  labels:
    app: springboot-helloworld
    admin: enabled            #---设置此标签,表示此应用被 Springboot Admin 服务发现
  annotations:
spec:
  type: ClusterIP
  ports:
    - name: server
      port: 8080             
      targetPort: 8080
    - name: management        #---指定监控端口名,表示此应用被 Springboot Admin 服务发现 
      port: 8081
      targetPort: 8081
  selector:
    app: springboot-helloworld
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: springboot-helloworld
  labels:
    app: springboot-helloworld
spec:
  replicas: 2                 #---设置副本数为2
  selector:
    matchLabels:
      app: springboot-helloworld
  template:
    metadata:
      labels:
        app: springboot-helloworld
    spec:
      containers:
      - name: springboot-helloworld
        image: mydlqclub/springboot-helloworld:0.0.1
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
          name: server
        - containerPort: 8081
          name: management
        resources: 
          limits:
            cpu: 1000m
            memory: 512Mi
          requests:
            cpu: 500m
            memory: 256Mi

在 Kubernetes 创建应用

$ kubectl apply -f springboot-helloworld.yaml -n mydlqcloud

SpringBoot Admin 中查看信息

在此访问 SpringBoot Admin 页面,可以看到已经监控到新增应用信息,且正确的监控到此应用有两个副本。



欢迎关注我的个人博客,关注最新动态: http://www.mydlq.club


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Spring Boot Admin 是一个用于管理和监控 Spring Boot 应用程序的开源项目。它提供了一个 Web 界面,可以方便地查看应用程序的运行状况、日志、堆栈跟踪等信息,并且可以通过邮件、Slack 等方式发送警报。使用 Spring Boot Admin 可以帮助开发人员更好地了解应用程序的运行情况,及时发现和解决问题,提高应用程序的可靠性和稳定性。 ### 回答2: Spring Boot Admin是一个专门为监控和管理Spring Boot应用程序而设计的开源工具。它提供了一个基于Web的用户界面,使得管理员可以很容易地监控多个Spring Boot应用程序的运行状况。 Spring Boot Admin 监控应用程序通过HTTP或者JMX与所监视的Spring Boot应用程序进行通信。它可以展示以下信息: 1. 应用程序的基本信息,如:应用名称、Spring Boot版本、Java版本、应用描述等。 2. 线程池信息,如:线程池的核心线程数、最大线程数、当前线程数、执行线程数、等待线程数等。 3. 内存信息,如:堆内存和非堆内存使用情况、可用内存等。 4. 运行状态信息,如:应用程序的启动时间、运行时间、处理请求数量等。 5. 日志信息,可以查看应用程序的日志并且可以在Spring Boot Admin上面搜索指定的关键字、级别等。 6. 环境信息,可以查看应用程序配置文件的属性。 Spring Boot Admin 可以同时监控多个Spring Boot应用程序,管理员可以在Spring Boot Admin的用户界面以列表的形式查看每个应用程序的基本信息、运行状态、线程池状态和内存状态等信息。管理员还可以通过Spring Boot Admin用户界面与所监视的应用程序进行交互,如发送暂停应用程序、杀死应用程序等操作。 总的来说,Spring Boot Admin监控应用程序非常方便简单,作为一个开源工具,使用成本也很低,非常适合小型团队或者个人使用。如果你正在使用Spring Boot作为你的应用程序框架,不妨试试Spring Boot Admin,以提高你的程序运行效率。 ### 回答3: Spring Boot Admin是一个用于监控Spring Boot应用程序的开源工具,它可以检测应用程序的不同部分,并显示有关应用程序的关键信息和实时运行指标。该工具提供了一个可视化界面,使其易于使用使用Spring Boot Admin,开发人员和管理员可以轻松地管理多个Spring Boot应用程序并监视它们的性能。 Spring Boot Admin提供了以下重要功能: 1. 应用程序管理:管理和监视具有自主注册和注销机制的Spring Boot应用程序 2. 健康检查:监视应用程序的健康状况,确保应用程序正常工作并快速解决问题。 3. Thread Dump: 查看应用程序的线程信息以及其工作流程。 4. 实时日志:监视应用程序的日志消息,方便快速定位错误和调试应用程序。 5. JVM指标:监视Java应用程序的内存使用情况、线程数量和CPU负载等指标,并提供实时图表以反映这些指标的变化。 在使用Spring Boot Admin进行应用程序监控时,我们可以通过Web界面进行监控和管理。Admin界面提供了一个Dashboard面板,其可以查看应用程序的关键信息。在该界面上,用户可以查看已注册的应用程序的列表,查看每个应用程序的各种指标,例如内存使用、线程数或系统加载等指标。 总结来看,Spring Boot Admin是一种可靠的工具,可以帮助开发人员和管理员监视和管理Spring Boot应用程序,并提供完整的实时监控和日志功能,简化了应用程序管理任务,提高了系统的可靠性和可扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值