如果你在开发 web 应用程序,Spring Boot 执行器会自动配置所有启用的节点以通过 HTTP 暴露。默认约定是使用具有前缀
有时,为管理节点定制前缀是有用的。例如,你的应用程序可能已经使用 management.endpoints.web.base-path=/manage
前面的
使用默认 HTTP 端口暴露管理节点是基于云部署的明智选择。但是,如果你的应用程序运行在自己的数据中心内,那么你可能更喜欢使用不同的 HTTP 端口来暴露节点。
你可以设置 management.server.port=8081
当配置为使用自定义端口时,管理服务器也可以通过使用各种 server.port=8443 server.ssl.enabled=true server.ssl.key-store=classpath:store.jks server.ssl.key-password=secret management.server.port=8080 management.server.ssl.enabled=false 或者,主服务器和管理服务器都可以使用 SSL,但具有不同的密钥存储,如下: server.port=8443 server.ssl.enabled=true server.ssl.key-store=classpath:main.jks server.ssl.key-password=secret management.server.port=8080 management.server.ssl.enabled=true management.server.ssl.key-store=classpath:management.jks management.server.ssl.key-password=secret
可以通过设置
下面的示例 management.server.port=8081 management.server.address=127.0.0.1
Java 管理扩展(JMX)提供了一种监控和管理应用程序的标准机制。默认情况下,Spring Boot 将管理节点暴露为
MBean 的名称通常是由节点
如果你的应用程序包含不止一个 Spring
还可以自定义节点被暴露的 JMX 域。下面的设置展示了在 management.endpoints.jmx.domain=com.example.myapp management.endpoints.jmx.unique-names=true
如果不想通过 JMX 暴露节点,可以将 management.endpoints.jmx.exposure.exclude=*
Jolokia 是一个 JMX-HTTP 桥,它提供了一种访问 JMX bean 的替代方法。为了使用 Jolokia,请包含 <dependency> <groupId>org.jolokia</groupId> <artifactId>jolokia-core</artifactId> </dependency>
然后可以通过向
Jolokia 有许多设置,你将通过配置 servlet 参数来传统配置。使用 Spring Boot,可以使用 management.endpoint.jolokia.config.debug=true
Spring Boot 执行器包括在运行时查看和配置应用程序日志级别的能力。你可以查看整个列表或单个日志记录器的配置,该配置由显式配置的日志记录级别以及日志框架赋予它的有效日志记录级别组成。这些级别可以是:
Spring Boot 执行器为 Micrometer 提供依赖项管理和自动配置,Micrometer 是一个支持许多监视系统的应用程序度量外观,包括:
Spring Boot 自动配置综合的 大多数注册表有共同的特点。例如,即使 Micrometer 注册表实现在类路径上,也可以禁用特定的注册表。例如,禁用 Datadog: management.metrics.export.datadog.enabled=false
Spring Boot 还将向 management.metrics.use-global-registry=false
你可以注册任意数量的 @Bean MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() { return registry -> registry.config().commonTags("region", "us-east-1"); } 你可以通过更具体地了解泛型类型来将定制应用到特定的注册表实现: @Bean MeterRegistryCustomizer<GraphiteMeterRegistry> graphiteMetricsNamingConvention() { return registry -> registry.config().namingConvention(MY_CUSTOM_CONVENTION); }
通过该设置,你可以将 @Component public class SampleBean { private final Counter counter; public SampleBean(MeterRegistry registry) { this.counter = registry.counter("received.messages"); } public void handleMessage(String message) { this.counter.increment(); // handle message implementation } }
Spring Boot 还配置内置工具(即 默认情况下,度量导出到运行在本地计算机上的 Atlas。可以使用 Atlas 服务器 的位置来使用: management.metrics.export.atlas.uri=http://atlas.example.com:7101/api/v1/publish
Datadog 注册表周期性地将度量推送到 datadoghq。要向 Datadog 导出度量,必须提供 API 密钥: management.metrics.export.datadog.api-key=YOUR_KEY
你还可以更改向 Datadog 发送度量的间隔: management.metrics.export.datadog.step=30s
默认情况下,度量导出到运行在本地计算机上的 Ganglia。可以使用以下方式提供 Ganglia 服务器主机和使用端口: management.metrics.export.ganglia.host=ganglia.example.com management.metrics.export.ganglia.port=9649 默认情况下,度量导出到运行在本地计算机上的 Graphite。可以使用以下方式提供 Graphite 服务器主机和端口: management.metrics.export.graphite.host=graphite.example.com management.metrics.export.graphite.port=9004
Micrometer 提供了一个缺省的
@Bean public GraphiteMeterRegistry graphiteMeterRegistry(GraphiteConfig config, Clock clock) { return new GraphiteMeterRegistry(config, clock, MY_HIERARCHICAL_MAPPER); } 默认情况下,度量将导出到本地机器上运行的 Influx。使用的 Influx 服务器的位置可以使用: management.metrics.export.influx.uri=http://influx.example.com:8086
Micrometer 为 JMX 提供了一种分层映射,主要是一种廉价的、可移植的本地度量方法。默认情况下,度量被导出到 management.metrics.export.jmx.domain=com.example.app.metrics
Micrometer 提供了一个缺省的
@Bean public JmxMeterRegistry jmxMeterRegistry(JmxConfig config, Clock clock) { return new JmxMeterRegistry(config, clock, MY_HIERARCHICAL_MAPPER); } New Relic 注册表周期推送度量到 NewRelic。要向 New Relic 导出度量,必须提供 API 密钥和帐户 id: management.metrics.export.newrelic.api-key=YOUR_KEY management.metrics.export.newrelic.account-id=YOUR_ACCOUNT_ID 你还可以更改将度量推送到 New Relic 的时间间隔: management.metrics.export.newrelic.step=30s
Prometheus 预计将对单个应用程序实例进行度量或投票。Spring Boot 提供了在
下面是一个 scrape_configs: - job_name: 'spring' metrics_path: '/actuator/prometheus' static_configs: - targets: ['HOST:PORT'] SignalFx 注册表将度量周期性地推送到 SignalFx。要向 SignalFx 导出度量,必须提供访问令牌: management.metrics.export.signalfx.access-token=YOUR_ACCESS_TOKEN
你还可以更改向 SignalFx 发送度量的间隔时间: management.metrics.export.signalfx.step=30s
Micrometer 附带了一个简单的内存中后端,如果没有配置其它注册表,该后端将自动用作回退。这允许你查看度量节点中收集的度量。 内存中后端在使用任何其它可用后端时禁用自身。你也可以显式禁用它: management.metrics.export.simple.enabled=false
StatsD 注册表迫切地将 UDP 的度量推送到 StatsD 代理。默认情况下,度量将导出到本地机器上运行的 StatsD 代理。可以使用 StatsD 代理主机和端口来提供: management.metrics.export.statsd.host=statsd.example.com management.metrics.export.statsd.port=9125 你还可以更改 StatsD 线路协议以使用(默认为 Datadog): management.metrics.export.statsd.flavor=etsy
Wavefront 注册表周期性地将度量推送到 Wavefront。如果直接向 Wavefront 导出度量,则必须提供 API 令牌: management.metrics.export.wavefront.api-token=YOUR_API_TOKEN
或者,你可以使用在你的环境中设置的 Wavefront 挎斗或内部代理,该代理将度量数据转发给 Wavefront API 主机: management.metrics.export.wavefront.uri=proxy://localhost:2878
你还可以更改向 Wavefront 发送度量的间隔时间: management.metrics.export.wavefront.step=30s
Spring Boot 在适用时注册以下核心度量:
自动配置允许对由 Spring MVC 处理的请求进行检测。当 @RestController @Timed
默认情况下,度量是用名称 默认情况下,用以下信息标记 Spring MVC 相关度量:
为了定制标签,提供一个实现 自动配置允许对由 WebFlux 控制器和函数式处理程序处理的所有请求进行检测。
默认情况下,使用名为 默认情况下,WebFlux 相关度量被标记为以下信息:
为了定制标签,提供一个实现
Spring Boot 执行器管理
还可以手动应用负责此工具的定制器,即
默认情况下,度量是用名称 默认情况下,由仪表化客户端生成的度量被标记为以下信息:
为了定制标签,并且根据你对客户端的选择,你可以提供一个
自动配置允许在启动时使用以 支持以下缓存库:
度量由缓存的名称和由 bean 名称派生的
自动配置允许使用一个称为
度量也由基于 bean 名称计算的
此外,Hikari 特定的度量使用
自动配置使所有可用的 Hibernate
度量也由源自 bean 名称的
若要启用统计信息,必须将标准 JPA 属性 spring.jpa.properties.hibernate.generate_statistics=true
若要注册自定义度量,请将 class Dictionary { private final List<String> words = new CopyOnWriteArrayList<>(); Dictionary(MeterRegistry registry) { registry.gaugeCollectionSize("dictionary.size", Tags.empty(), this.words); } // … }
如果你发现在组件或应用程序之间重复地工具化一组度量,则可以将该套件封装到
如果需要将自定义度量应用到特定的
例如,如果希望将 @Bean public MeterFilter renameRegionTagMeterFilter() { return MeterFilter.renameTag("com.example", "mytag.region", "mytag.area"); } 通用标签通常用于对操作环境(如主机、实例、区域、堆栈等)进行维度向下钻取。通用标签应用于所有仪表,并且可以按照以下示例进行配置: management.metrics.tags.region=us-east-1 management.metrics.tags.stack=prod
上面的示例将
除了 management.metrics.enable.example.remote=false
以下属性允许每个仪表盘定制: 表格 55.1. 每个仪表盘自定义
有关
Spring Boot 提供了一个
导航到
你还可以向 URL 的末尾添加任意数量的
一旦Spring Security发挥作用,Spring Bug执行器就有一个灵活的审计框架来发布事件(默认情况下,“验证成功”、“失败”和“拒绝访问”异常)。此特性对于基于认证失败的报告和实现锁定策略非常有用。为了自定义发布的安全事件,你可以提供自己的
你还可以使用审计服务来处理你自己的业务事件。为此,可以将现有的
对所有 HTTP 请求自动启用追踪。你可以查看
在
默认情况下,这些写入器未被激活,但你可以启用:
在 org.springframework.context.ApplicationListener=\ org.springframework.boot.context.ApplicationPidFileWriter,\ org.springframework.boot.web.context.WebServerPortFileWriter
Spring Boot 的执行器模块包括当你部署到兼容的 Cloud Foundry 实例时激活的附加支持。 扩展支持允许使用 Spring Boot 执行器信息来增强 Cloud Foundry 管理 UI(例如可用于查看已部署应用程序的 web 应用程序)。例如,应用程序状态页可以包括完整的健康信息,而不是典型的 “running” 或 “stopped” 状态。
如果希望完全禁用 application.properties. management.cloudfoundry.enabled=false
默认情况下, application.properties. management.cloudfoundry.skip-ssl-validation=true
如果服务器的上下文路径已经配置为
如果你期望 Cloud Foundry 节点总是在 @Bean public TomcatServletWebServerFactory servletWebServerFactory() { return new TomcatServletWebServerFactory() { @Override protected void prepareContext(Host host, ServletContextInitializer[] initializers) { super.prepareContext(host, initializers); StandardContext child = new StandardContext(); child.addLifecycleListener(new Tomcat.FixContextListener()); child.setPath("/cloudfoundryapplication"); ServletContainerInitializer initializer = getServletContextInitializer( getContextPath()); child.addServletContainerInitializer(initializer, Collections.emptySet()); child.setCrossContext(true); host.addChild(child); } }; } private ServletContainerInitializer getServletContextInitializer(String contextPath) { return (c, context) -> { Servlet servlet = new GenericServlet() { @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { ServletContext context = req.getServletContext() .getContext(contextPath); context.getRequestDispatcher("/cloudfoundryapplication").forward(req, res); } }; context.addServlet("cloudfoundry", servlet).addMapping("/*"); }; } |