Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Prometheus ServletRegistrationBean does not work in some Workspace

I want to monitor some apps and i am using Prometheus. It works well in some apps but when i tried to implement it in another app i am facing some problems. It says:

The constructor ServletRegistrationBean(MetricsServlet, String) is undefined

What can cause this problem and how to fix this.

This is my class.

import java.util.Collection;

import org.springframework.boot.actuate.endpoint.PublicMetrics;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import io.prometheus.client.exporter.MetricsServlet;
import io.prometheus.client.hotspot.DefaultExports;
import io.prometheus.client.spring.boot.SpringBootMetricsCollector;

@Configuration
public class MonitoringConfig {

    @Bean
    SpringBootMetricsCollector springBootMetricsCollector(Collection<PublicMetrics> publicMetrics) {

        SpringBootMetricsCollector springBootMetricsCollector = new SpringBootMetricsCollector(publicMetrics);
        springBootMetricsCollector.register();

        return springBootMetricsCollector;
    }

    @Bean
    public ServletRegistrationBean servletRegistrationBean() {
        DefaultExports.initialize();
        return new ServletRegistrationBean(new MetricsServlet(), "/prometheus");
    }

}

Dependecies:

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-actuator -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-actuator</artifactId>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.moelholm/prometheus-spring-boot-starter -->
    <dependency>
        <groupId>com.moelholm</groupId>
        <artifactId>prometheus-spring-boot-starter</artifactId>
        <version>1.0.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/io.prometheus/simpleclient -->
    <dependency>
        <groupId>io.prometheus</groupId>
        <artifactId>simpleclient</artifactId>
        <version>0.0.25</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/io.prometheus/simpleclient_hotspot -->
    <dependency>
        <groupId>io.prometheus</groupId>
        <artifactId>simpleclient_hotspot</artifactId>
        <version>0.0.25</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/io.prometheus/simpleclient_spring_boot -->
    <dependency>
        <groupId>io.prometheus</groupId>
        <artifactId>simpleclient_spring_boot</artifactId>
        <version>0.0.25</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/io.prometheus/simpleclient_servlet -->
    <dependency>
        <groupId>io.prometheus</groupId>
        <artifactId>simpleclient_servlet</artifactId>
        <version>0.0.25</version>
    </dependency>

In some apps it works but in one i stacked with this:

The constructor ServletRegistrationBean(MetricsServlet, String) is undefined

like image 654
Bambus Avatar asked Oct 18 '25 16:10

Bambus


1 Answers

The MetricsServlet should implement javax.servlet.Servlet . Make sure you have that class(i.e javax.servlet.Servlet) in your project/classpath. The maven dependency for the library containing this class is:

<!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
</dependency>
like image 183
dj_frunza Avatar answered Oct 20 '25 04:10

dj_frunza



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!