我正在尝试将端点上可见的所有指标导出/metrics到StatsdMetricWriter.
到目前为止,我有以下配置类:
package com.tonyghita.metricsdriven.service.config;
import com.codahale.metrics.MetricRegistry;
import com.ryantenney.metrics.spring.config.annotation.EnableMetrics;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.actuate.autoconfigure.ExportMetricReader;
import org.springframework.boot.actuate.autoconfigure.ExportMetricWriter;
import org.springframework.boot.actuate.metrics.reader.MetricReader;
import org.springframework.boot.actuate.metrics.reader.MetricRegistryMetricReader;
import org.springframework.boot.actuate.metrics.statsd.StatsdMetricWriter;
import org.springframework.boot.actuate.metrics.writer.MetricWriter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableMetrics(proxyTargetClass = true)
public class MetricsConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(MetricsConfig.class);
@Value("${statsd.host:localhost}")
private String host = "localhost";
@Value("${statsd.port:8125}")
private int port;
@Autowired
private MetricRegistry metricRegistry;
@Bean
@ExportMetricReader
public MetricReader metricReader() {
return new MetricRegistryMetricReader(metricRegistry);
}
@Bean
@ExportMetricWriter
public MetricWriter metricWriter() …Run Code Online (Sandbox Code Playgroud) 有谁知道如何将Spring启动指标与datadog集成?
Datadog是一种面向IT的云规模监控服务.
它允许用户使用大量图表和图表轻松地查看他们的数据.
我有一个spring boot应用程序,它使用dropwizard指标填充有关我注释的所有方法的大量信息@Timed.
另一方面,我正在heroku中部署我的应用程序,因此我无法安装Datadog代理.
我想知道是否有一种方法可以自动将spring boot metric系统报告与datadog集成.
java spring-boot datadog spring-boot-actuator metrics-spring
最近我改变了我的spring boot属性来定义一个管理端口.这样做,我的单元测试开始失败:(
我编写了一个测试/ metrics端点的单元测试,如下所示:
@RunWith (SpringRunner.class)
@DirtiesContext
@SpringBootTest
public class MetricsTest {
@Autowired
private WebApplicationContext context;
private MockMvc mvc;
/**
* Called before each test.
*/
@Before
public void setUp() {
this.context.getBean(MetricsEndpoint.class).setEnabled(true);
this.mvc = MockMvcBuilders.webAppContextSetup(this.context).build();
}
/**
* Test for home page.
*
* @throws Exception On failure.
*/
@Test
public void home()
throws Exception {
this.mvc.perform(MockMvcRequestBuilders.get("/metrics"))
.andExpect(MockMvcResultMatchers.status().isOk());
}
}
Run Code Online (Sandbox Code Playgroud)
以前这是过去了.添加后:
management.port=9001
Run Code Online (Sandbox Code Playgroud)
测试开始失败:
home Failed: java.lang.AssertionError: Status expected: <200> but was: <404>
Run Code Online (Sandbox Code Playgroud)
我尝试用以下方法更改@SpringBootTest注释:
@SpringBootTest (properties = {"management.port=<server.port>"})
Run Code Online (Sandbox Code Playgroud)
server.port使用的编号在哪里.这似乎没有任何区别. …
应用程序在版本 2.2.6 下正常工作,但随着应用程序升级到最新版本的 spring boot 2.3.0,它停止工作并在启动过程中失败。
2020-05-20T08:43:04.408+01:00 [APP/PROC/WEB/0] [OUT] 2020-05-20 07:43:04.407 ERROR 15 --- [ main] o.s.b.web.embedded.tomcat.TomcatStarter : Error starting Tomcat context. Exception: org.springframework.beans.factory.UnsatisfiedDependencyException. Message: Error creating bean with name 'webMvcMetricsFilter' defined in class path resource [org/springframework/boot/actuate/autoconfigure/metrics/web/servlet/WebMvcMetricsAutoConfiguration.class]: Unsatisfied dependency expressed through method 'webMvcMetricsFilter' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'compositeMeterRegistry' defined in class path resource [org/springframework/boot/actuate/autoconfigure/metrics/CompositeMeterRegistryConfiguration.class]: Unsatisfied dependency expressed through method 'compositeMeterRegistry' parameter 1; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'prometheusMeterRegistry' defined …
我试图使用 Prometheus 监视我们的 Spring boot 应用程序之一,但不幸的是该服务的状态在 ubuntu 服务器中没有启动,它 \xe2\x80\x99s 显示一些错误,例如 \xe2\x80\x93
\n/prometheus: x509: 由未知机构签名的证书,从我本地的 Prometheus 中该服务已启动,并且还能够监视一些 http 请求。\n错误快照
\n我们有一个使用 Spring Boot 2.4.3 开发的 Spring Boot Web 应用程序并部署 Spring Actuator。我正在研究升级到 Spring Boot 2.6.2 并且大多数问题都已解决。我从项目和 war 文件中删除了弹簧执行器启动器,它部署并运行良好。我们正在使用 Java 11 和 Wildfly 18 运行。
如果我将弹簧执行器启动器添加回项目 pom 文件和 war 文件 pom 文件中,则会在部署过程中显示以下警告:
16:44:28,063 WARN [org.jboss.modules.define] (Thread-115) Failed to define class io.micrometer.core.instrument.binder.jersey.server.MetricsApplicationEventListener in Module "deployment.test.war" from Service Module Loader: java.lang.NoClassDefFoundError: Failed to link io/micrometer/core/instrument/binder/jersey/server/MetricsApplicationEventListener (Module "deployment.test.war" from Service Module Loader): org/glassfish/jersey/server/monitoring/ApplicationEventListener
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1095)
at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:424)
at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:555)
at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:339)
at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:126)
at org.jboss.modules.Module.loadModuleClass(Module.java:731)
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:247)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:410)
at …Run Code Online (Sandbox Code Playgroud) Spring启动器执行器提供一些端点,如健康,指标,信息.它还允许我们编写自己的自定义端点.
我有一个要求,我需要将一些Dropwizard指标统计信息作为端点公开.最新的Spring-boot确实支持dropwizard指标,但它不符合我的要求,所以我打算拥有自己的Web端点/stats
但现在我无法确定它应该是普通的Controller还是定制的执行器Endpoint.这两个术语有什么区别?
PS:问题似乎确实是意见基础,但答案应该足够简单.
我们希望为/health弹簧启动执行器提供的端点的所有GET请求启用Cors .
我们尝试添加以下bean但没有成功
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/health").allowedMethods("GET");
}
};
}
Run Code Online (Sandbox Code Playgroud) 在我的build.gradle中,我添加了spring build info:
springBoot {
mainClass = "${springBootMainClass}"
buildInfo() {
additionalProperties = [
name: "${appName}",
version: "${version}-${buildNumber}",
time: buildTime()
]
}
}
def buildTime() {
final dateFormat = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ")
dateFormat.timeZone = TimeZone.getTimeZone('GMT')
dateFormat.format(new Date())
}
Run Code Online (Sandbox Code Playgroud)
当我从命令行运行时,这会正确添加/META-INF/build-info.properties文件,/build/resources/main以便"/info"端点以JSON显示构建信息.
当我的IntelliJ的运行/调试按钮运行的IntelliJ并没有使用/build目录,而是使用/out目录,也没有运行gradle这个任务,所以/info端点具有空的JSON.
如何让它生成该文件并将其放在/out目录中?
我正在构建一些Spring Boot微服务,这些服务将部署在Kubernetes(专用于AKS)集群中。我正计划将活动性和就绪性检查的probePath设置为同时指向执行器运行状况端点,但我想知道这是否不是最佳选择。我最初的想法是,检查路径将很有用(至少对于就绪状态而言),以便在Spring启动并能够处理请求之前,不向其发送流量。由于这些服务使用数据库连接,并且如果执行器运行状况指示器无法建立连接,则执行器运行状况指示器将报告状态为关闭,这不是一个好主意吗?
考虑到活动性,我认为它可能会一遍又一遍地回收豆荚/容器,即使(在数据库关闭的情况下)它可能无法解决任何问题。
准备就绪后,我认为如果数据库关闭,这可能会导致可用应用程序池为0。如果数据库关闭,该应用程序本身很有可能不是很有用,但是我认为某些部件可能仍然可以工作。
对于这种事情是否有建议的最佳实践?
spring-boot ×7
java ×4
spring ×3
prometheus ×2
cors ×1
datadog ×1
grafana ×1
junit ×1
kubernetes ×1
spring-mvc ×1