我有启用了弹簧执行器的spring boot 2 REST应用程序。默认情况下,spring在/metrics
端点中生成许多度量标准( jvm,cpu,内存等)。除此之外,我还使用了Micrometer API创建自定义指标。到目前为止,它的运行情况非常好。
现在,我需要仅生成我的自定义指标,但是禁用spring提供的所有默认指标。请注意,我不想要禁用/metrics
端点,但是我只想禁用默认指标。
现在可以直接/间接地这样做吗?
感谢您的任何意见和建议!
答案 0 :(得分:2)
@SpringBootApplication(exclude = {
CompositeMeterRegistryAutoConfiguration.class,
DataSourcePoolMetricsAutoConfiguration.class,
TomcatMetricsAutoConfiguration.class,
SimpleMetricsExportAutoConfiguration.class,
SystemMetricsAutoConfiguration.class })
您需要排除所有负责春季引导中默认指标的指标自动配置类。您可以在此处找到所有指标自动配置类。 https://github.com/spring-projects/spring-boot/blob/v2.1.1.RELEASE/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/spring.factories
答案 1 :(得分:1)
与Spring Boot中的大多数事情一样,默认指标是通过各种自动配置类配置的。要禁用默认指标,请使用exclude
上的@SpringBootApplication
属性排除其自动配置类。要查看涉及的自动配置,可以使用--debug
启动应用程序,或查看source code。
答案 2 :(得分:0)
据我所知,这不可能直接实现,但是您可以使用endpoints.metrics.enabled=false
禁用指标终结点。然后使用/metrics
端点为您的自定义指标创建一个REST API。
答案 3 :(得分:0)
从理论上讲,应该可以扩展org.springframework.boot.actuate.metrics.MetricsEndpoint并仅公开要公开的信息。
但是,我建议始终定义一个新的端点来处理您的特定用例。 在这种情况下,您将不会太拘泥于Spring库。
答案 4 :(得分:0)
排除由MetricsAutoConfiguration.class
连接的指标,如下所示:
@SpringBootApplication(exclude = MetricsAutoConfiguration.class)
答案 5 :(得分:0)
我在代码中解决这个问题的第一件事是启用“条件评估报告”。在 debug=true
文件中设置属性 application.properties
就足够了。您应该会在日志中看到类似下面的内容。只需在此块中搜索“Metric”即可找到与指标相关的类的提及。
2021-05-04T11:35:29.001-0300|DEBUG tionEvaluationReportLoggingListener[ 126] -
============================
CONDITIONS EVALUATION REPORT
============================
Positive matches:
-----------------
AopAutoConfiguration matched:
- @ConditionalOnProperty (spring.aop.auto=true) matched (OnPropertyCondition)
...
接下来,您需要禁用所有对您无用的自动配置的指标类。您可以通过向 @SpringBootApplication
注释中添加一些属性值来实现这一点。
这是我在应用程序代码中所做的:
@SpringBootApplication(
exclude = {
CompositeMeterRegistryAutoConfiguration.class,
JvmMetricsAutoConfiguration.class,
DataSourcePoolMetricsAutoConfiguration.class,
LogbackMetricsAutoConfiguration.class,
HttpClientMetricsAutoConfiguration.class
}
)
最后,如果有一个自动配置的指标类发布了您想要保留的一些指标值,但发布了一些您不想要的指标值,那么您可以禁用单个指标。如果您使用的是 application.yaml
文件,这很容易。以下是我的代码示例:
management:
metrics:
# Disable Spring Boot auto-configuration of metrics meter registries
use-global-registry: false
enable:
jvm:
# garbage collection, buffer, threads and classes metrics are not useful to us
gc: false
buffer: false
classes: false
threads: false
process:
# process start time is useless
start:
time: false
# system CPU metrics are useless for ECS tasks (we only care about 'process' metrics)
system:
cpu: false
export:
# Disable default in-memory metrics meter registry
simple:
enabled: false
# Publish metrics to AWS Cloudwatch, using the largest submission batch size that AWS supports
cloudwatch:
namespace: /my/metrics/namespace
batchSize: 20
您可以对 application.properties
文件执行相同操作。只会更冗长。
还支持编写自定义“过滤器”类,与上面的属性/yaml 文件方法相比,这些类可为您提供更细粒度的控制。我没有使用过,但为了完整性,我在这里提到它。