美文网首页
Springboot暴露prometheus接口

Springboot暴露prometheus接口

作者: ShootHzj | 来源:发表于2021-02-21 21:40 被阅读0次

    虽然prometheus客户端内有自己的http服务,但一般来说,很少为了prometheus这个特性来新增一个端口或者是web server来处理prometheus的接口。刚好我们有个需求要在springboot之上累加一下prometheus监控的能力。本文讲解一下如何在SpringBoot的基础上累加prometheus的监控

    1.添加依赖

      <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
                <version>2.3.4.RELEASE</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/io.micrometer/micrometer-registry-prometheus -->
            <dependency>
                <groupId>io.micrometer</groupId>
                <artifactId>micrometer-core</artifactId>
                <version>1.6.4</version>
            </dependency>
            <dependency>
                <groupId>io.micrometer</groupId>
                <artifactId>micrometer-registry-prometheus</artifactId>
                <version>1.6.4</version>
            </dependency>
    

    2.在ApplicationYaml中配置开启promethues

    management:
      endpoints:
        web:
          exposure:
            include: [prometheus]
    

    这个时候,开启程序,访问/actuator/prometheus 接口就已经可以访问到符合prometheus格式的数据了

    curl 127.0.0.1:8080/actuator/prometheus -iv
    *   Trying 127.0.0.1...
    * TCP_NODELAY set
    * Connected to 127.0.0.1 (127.0.0.1) port 8080 (#0)
    > GET /actuator/prometheus HTTP/1.1
    > Host: 127.0.0.1:8080
    > User-Agent: curl/7.64.1
    > Accept: */*
    >
    < HTTP/1.1 200
    HTTP/1.1 200
    < Content-Type: text/plain; version=0.0.4;charset=utf-8
    Content-Type: text/plain; version=0.0.4;charset=utf-8
    < Content-Length: 7611
    Content-Length: 7611
    < Date: Sun, 21 Feb 2021 13:30:14 GMT
    Date: Sun, 21 Feb 2021 13:30:14 GMT
    
    <
    # HELP tomcat_sessions_expired_sessions_total
    # TYPE tomcat_sessions_expired_sessions_total counter
    tomcat_sessions_expired_sessions_total 0.0
    # HELP jvm_gc_max_data_size_bytes Max size of long-lived heap memory pool
    # TYPE jvm_gc_max_data_size_bytes gauge
    jvm_gc_max_data_size_bytes 2.863661056E9
    # HELP process_uptime_seconds The uptime of the Java virtual machine
    # TYPE process_uptime_seconds gauge
    process_uptime_seconds 4.142
    # HELP jvm_buffer_total_capacity_bytes An estimate of the total capacity of the buffers in this pool
    # TYPE jvm_buffer_total_capacity_bytes gauge
    jvm_buffer_total_capacity_bytes{id="direct",} 8192.0
    jvm_buffer_total_capacity_bytes{id="mapped",} 0.0
    # HELP tomcat_sessions_rejected_sessions_total
    # TYPE tomcat_sessions_rejected_sessions_total counter
    tomcat_sessions_rejected_sessions_total 0.0
    # HELP process_files_open_files The open file descriptor count
    # TYPE process_files_open_files gauge
    process_files_open_files 110.0
    # HELP jvm_threads_peak_threads The peak live thread count since the Java virtual machine started or peak was reset
    # TYPE jvm_threads_peak_threads gauge
    jvm_threads_peak_threads 22.0
    # HELP jvm_threads_states_threads The current number of threads having NEW state
    # TYPE jvm_threads_states_threads gauge
    jvm_threads_states_threads{state="runnable",} 8.0
    jvm_threads_states_threads{state="blocked",} 0.0
    jvm_threads_states_threads{state="waiting",} 12.0
    jvm_threads_states_threads{state="timed-waiting",} 2.0
    jvm_threads_states_threads{state="new",} 0.0
    jvm_threads_states_threads{state="terminated",} 0.0
    # HELP logback_events_total Number of error level events that made it to the logs
    # TYPE logback_events_total counter
    logback_events_total{level="warn",} 0.0
    logback_events_total{level="debug",} 0.0
    logback_events_total{level="error",} 0.0
    logback_events_total{level="trace",} 0.0
    logback_events_total{level="info",} 7.0
    # HELP jvm_classes_unloaded_classes_total The total number of classes unloaded since the Java virtual machine has started execution
    # TYPE jvm_classes_unloaded_classes_total counter
    jvm_classes_unloaded_classes_total 0.0
    # HELP jvm_gc_pause_seconds Time spent in GC pause
    # TYPE jvm_gc_pause_seconds summary
    jvm_gc_pause_seconds_count{action="end of major GC",cause="Metadata GC Threshold",} 1.0
    jvm_gc_pause_seconds_sum{action="end of major GC",cause="Metadata GC Threshold",} 0.049
    jvm_gc_pause_seconds_count{action="end of minor GC",cause="Metadata GC Threshold",} 1.0
    jvm_gc_pause_seconds_sum{action="end of minor GC",cause="Metadata GC Threshold",} 0.007
    # HELP jvm_gc_pause_seconds_max Time spent in GC pause
    # TYPE jvm_gc_pause_seconds_max gauge
    jvm_gc_pause_seconds_max{action="end of major GC",cause="Metadata GC Threshold",} 0.049
    jvm_gc_pause_seconds_max{action="end of minor GC",cause="Metadata GC Threshold",} 0.007
    # HELP jvm_memory_committed_bytes The amount of memory in bytes that is committed for the Java virtual machine to use
    # TYPE jvm_memory_committed_bytes gauge
    jvm_memory_committed_bytes{area="heap",id="PS Survivor Space",} 1.1010048E7
    jvm_memory_committed_bytes{area="heap",id="PS Old Gen",} 1.75112192E8
    jvm_memory_committed_bytes{area="heap",id="PS Eden Space",} 1.30547712E8
    jvm_memory_committed_bytes{area="nonheap",id="Metaspace",} 3.7838848E7
    jvm_memory_committed_bytes{area="nonheap",id="Code Cache",} 1.5204352E7
    jvm_memory_committed_bytes{area="nonheap",id="Compressed Class Space",} 5111808.0
    # HELP jvm_buffer_count_buffers An estimate of the number of buffers in the pool
    # TYPE jvm_buffer_count_buffers gauge
    jvm_buffer_count_buffers{id="direct",} 1.0
    jvm_buffer_count_buffers{id="mapped",} 0.0
    # HELP tomcat_sessions_alive_max_seconds
    # TYPE tomcat_sessions_alive_max_seconds gauge
    tomcat_sessions_alive_max_seconds 0.0
    # HELP process_cpu_usage The "recent cpu usage" for the Java Virtual Machine process
    # TYPE process_cpu_usage gauge
    process_cpu_usage 0.0
    # HELP tomcat_sessions_active_max_sessions
    # TYPE tomcat_sessions_active_max_sessions gauge
    tomcat_sessions_active_max_sessions 0.0
    # HELP tomcat_sessions_active_current_sessions
    # TYPE tomcat_sessions_active_current_sessions gauge
    tomcat_sessions_active_current_sessions 0.0
    # HELP jvm_gc_memory_promoted_bytes_total Count of positive increases in the size of the old generation memory pool before GC to after GC
    # TYPE jvm_gc_memory_promoted_bytes_total counter
    jvm_gc_memory_promoted_bytes_total 8422864.0
    # HELP jvm_memory_used_bytes The amount of used memory
    # TYPE jvm_memory_used_bytes gauge
    jvm_memory_used_bytes{area="heap",id="PS Survivor Space",} 0.0
    jvm_memory_used_bytes{area="heap",id="PS Old Gen",} 1.534216E7
    jvm_memory_used_bytes{area="heap",id="PS Eden Space",} 1.2262736E7
    jvm_memory_used_bytes{area="nonheap",id="Metaspace",} 3.5081712E7
    jvm_memory_used_bytes{area="nonheap",id="Code Cache",} 1.5064128E7
    jvm_memory_used_bytes{area="nonheap",id="Compressed Class Space",} 4586720.0
    # HELP jvm_classes_loaded_classes The number of classes that are currently loaded in the Java virtual machine
    # TYPE jvm_classes_loaded_classes gauge
    jvm_classes_loaded_classes 6732.0
    # HELP jvm_memory_max_bytes The maximum amount of memory in bytes that can be used for memory management
    # TYPE jvm_memory_max_bytes gauge
    jvm_memory_max_bytes{area="heap",id="PS Survivor Space",} 1.1010048E7
    jvm_memory_max_bytes{area="heap",id="PS Old Gen",} 2.863661056E9
    jvm_memory_max_bytes{area="heap",id="PS Eden Space",} 1.406664704E9
    jvm_memory_max_bytes{area="nonheap",id="Metaspace",} -1.0
    jvm_memory_max_bytes{area="nonheap",id="Code Cache",} 2.5165824E8
    jvm_memory_max_bytes{area="nonheap",id="Compressed Class Space",} 1.073741824E9
    # HELP jvm_gc_live_data_size_bytes Size of long-lived heap memory pool after reclamation
    # TYPE jvm_gc_live_data_size_bytes gauge
    jvm_gc_live_data_size_bytes 1.534216E7
    # HELP system_cpu_count The number of processors available to the Java virtual machine
    # TYPE system_cpu_count gauge
    system_cpu_count 16.0
    # HELP jvm_threads_live_threads The current number of live threads including both daemon and non-daemon threads
    # TYPE jvm_threads_live_threads gauge
    jvm_threads_live_threads 22.0
    # HELP system_load_average_1m The sum of the number of runnable entities queued to available processors and the number of runnable entities running on the available processors averaged over a period of time
    # TYPE system_load_average_1m gauge
    system_load_average_1m 2.69384765625
    # HELP jvm_threads_daemon_threads The current number of live daemon threads
    # TYPE jvm_threads_daemon_threads gauge
    jvm_threads_daemon_threads 18.0
    # HELP tomcat_sessions_created_sessions_total
    # TYPE tomcat_sessions_created_sessions_total counter
    tomcat_sessions_created_sessions_total 0.0
    # HELP system_cpu_usage The "recent cpu usage" for the whole system
    # TYPE system_cpu_usage gauge
    system_cpu_usage 0.0
    # HELP process_start_time_seconds Start time of the process since unix epoch.
    # TYPE process_start_time_seconds gauge
    process_start_time_seconds 1.613914210244E9
    # HELP process_files_max_files The maximum file descriptor count
    # TYPE process_files_max_files gauge
    process_files_max_files 10240.0
    # HELP jvm_buffer_memory_used_bytes An estimate of the memory that the Java virtual machine is using for this buffer pool
    # TYPE jvm_buffer_memory_used_bytes gauge
    jvm_buffer_memory_used_bytes{id="direct",} 8192.0
    jvm_buffer_memory_used_bytes{id="mapped",} 0.0
    # HELP jvm_gc_memory_allocated_bytes_total Incremented for an increase in the size of the (young) heap memory pool after one GC to before the next
    # TYPE jvm_gc_memory_allocated_bytes_total counter
    jvm_gc_memory_allocated_bytes_total 9.2060064E7
    * Connection #0 to host 127.0.0.1 left intact
    * Closing connection 0
    

    3.添加自定义Counter和Gauge

    package com.github.shoothzj.demo.prometheus;
    
    import io.micrometer.core.instrument.Counter;
    import io.micrometer.core.instrument.Gauge;
    import io.micrometer.core.instrument.MeterRegistry;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Service;
    
    import javax.annotation.PostConstruct;
    import java.util.Random;
    import java.util.function.Supplier;
    
    /**
     * @author hezhangjian
     */
    @Slf4j
    @Service
    public class PrometheusService {
    
        @Autowired
        private MeterRegistry meterRegistry;
    
        Counter testCounter;
    
        @PostConstruct
        public void init() {
            testCounter = Counter.builder("test_counter").tag("key", "value").register(meterRegistry);
            Gauge.builder("test_builder", new Supplier<Number>() {
                @Override
                public Number get() {
                    return new Random().nextDouble();
                }
            }).register(meterRegistry);
        }
    
        @Scheduled(fixedDelay = 10)
        public void scheduleCounter() {
            testCounter.increment(new Random().nextDouble());
        }
    
    }
    

    随后请求/actuator/prometheus 接口,可以看到新增的Gauge和Count

    curl 127.0.0.1:8080/actuator/prometheus|grep test
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100  8407  100  8407    0     0  1641k      0 --:--:-- --:--:-- --:--:-- 1368k
    # HELP test_builder
    # TYPE test_builder gauge
    test_builder 0.7230810083096657
    # HELP test_counter_total
    # TYPE test_counter_total counter
    test_counter_total{key="value",} 4226.16496944851
    

    代码地址

    https://github.com/Shoothzj/maven-demo/tree/master/demo-prometheus

    相关文章

      网友评论

          本文标题:Springboot暴露prometheus接口

          本文链接:https://www.haomeiwen.com/subject/qekcfltx.html