You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot Admin详情页右侧列溢出屏幕问题求助

我帮你梳理几个可行的解决方案,比你每次手动修改CSS要靠谱得多:

一、从源头控制微服务暴露的元数据

问题根源是K8s注入的kubectl.kubernetes.io/last-applied-configuration这类大体积元数据被Spring Boot的Actuator/info端点暴露了,最终被SBA读取并渲染。我们可以先在服务端过滤这些字段:

1. 快速关闭不必要的元数据收集

在每个微服务的application.yml里添加配置,直接关闭环境变量或K8s相关元数据的收集:

management:
  info:
    env:
      enabled: false  # 关闭环境变量的自动收集,避免把K8s注入的大字段带到info里
    kubernetes:
      enabled: false  # 如果你用了spring-cloud-kubernetes,关闭K8s专属元数据收集

这个方式最直接,能立刻减少/info返回的数据量。

2. 精准过滤特定字段

如果还需要保留部分K8s元数据,可以自定义InfoContributor来过滤掉大字段:

import org.springframework.boot.actuate.info.Info;
import org.springframework.boot.actuate.info.InfoContributor;
import org.springframework.cloud.kubernetes.actuate.info.KubernetesInfoContributor;
import org.springframework.stereotype.Component;

import java.util.Map;
import java.util.stream.Collectors;

@Component
public class FilteredK8sInfoContributor implements InfoContributor {

    private final KubernetesInfoContributor delegate;

    // 注入默认的K8s信息收集器
    public FilteredK8sInfoContributor(KubernetesInfoContributor delegate) {
        this.delegate = delegate;
    }

    @Override
    public void contribute(Info.Builder builder) {
        Info.Builder tempBuilder = new Info.Builder();
        delegate.contribute(tempBuilder);
        // 获取默认收集的K8s元数据
        Map<String, Object> k8sMetadata = tempBuilder.build().get("kubernetes", Map.class);
        // 过滤掉last-applied-configuration这个大字段
        Map<String, Object> filteredMetadata = k8sMetadata.entrySet().stream()
                .filter(entry -> !entry.getKey().equals("last-applied-configuration"))
                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
        // 把过滤后的元数据放回info
        builder.withDetail("kubernetes", filteredMetadata);
    }
}

这样既能保留有用的K8s信息,又能去掉导致UI崩坏的大字段。

二、在Spring Boot Admin端控制显示的元数据

如果不想修改每个微服务的配置,可以直接在SBA服务端配置过滤规则:

1. 用配置指定显示/隐藏的字段

SBA 2.1.3支持通过配置来控制info字段的显示,在SBA的application.yml里添加:

spring:
  boot:
    admin:
      ui:
        info:
          # 只显示指定的K8s元数据字段,比如名称和命名空间
          include: kubernetes.name,kubernetes.namespace
          # 或者直接排除不需要的大字段
          exclude: kubernetes.last-applied-configuration

配置生效后,SBA就只会渲染你指定的元数据,不会再加载那个大体积的配置字段。

2. 持久化自定义CSS(替代手动修改)

如果上面的配置不生效,你可以把CSS修改持久化到SBA里,不用每次手动改浏览器样式:
直接在SBA的application.yml里注入自定义CSS片段:

spring:
  boot:
    admin:
      ui:
        custom-css: |
          .instances__view section {
              max-width: 75%;
              overflow-x: auto; /* 内容过长时自动显示水平滚动条 */
          }

重启SBA后,这个样式会自动生效,页面右侧列就不会溢出屏幕,而且会出现滚动条。

三、从K8s层面停止注入大字段

如果这些元数据是通过K8s的Downward API注入到Pod里的,你可以检查Deployment的配置,直接移除kubectl.kubernetes.io/last-applied-configuration的注入规则。比如修改Deployment的spec.template.spec部分,删除对应的env或volumeMounts配置,从根源上阻止这个大字段进入服务的环境变量。

内容的提问来源于stack exchange,提问作者Bill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:07:42