美文网首页
Spring Boot 监控(Prometheus + Graf

Spring Boot 监控(Prometheus + Graf

作者: ouyangan | 来源:发表于2018-09-08 01:00 被阅读461次

    运行效果

    image.png

    pom

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.example</groupId>
        <artifactId>spring-promethues-demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
        <name>spring-promethues-demo</name>
        <description>Demo project for Spring Boot</description>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.4.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>io.micrometer</groupId>
                <artifactId>micrometer-registry-prometheus</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.restdocs</groupId>
                <artifactId>spring-restdocs-mockmvc</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    </project>
    

    application.properties

    management.endpoint.metrics.enabled=true
    management.endpoints.web.exposure.include=*
    management.endpoint.prometheus.enabled=true
    management.metrics.export.prometheus.enabled=true
    management.metrics.export.jmx.enabled=true
    

    启动类

    @Slf4j
    @SpringBootApplication
    public class SpringPromethuesDemoApplication implements CommandLineRunner {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringPromethuesDemoApplication.class, args);
        }
    
        @Override
        public void run(String... args) {
            int count = 0;
            while (true) {
                if (count / 2 == 0) {
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                try {
                    RestTemplate restTemplate = new RestTemplate();
                    ResponseEntity<Result> forEntity = restTemplate.getForEntity("http://localhost:8080/user/insert", Result.class);
                } catch (Exception e) {
                    log.error(e.toString());
                }
            }
        }
    }
    

    测试api

    @Slf4j
    @RequestMapping("user")
    @RestController
    public class UserController {
    
        @ResponseBody
        @RequestMapping(method = RequestMethod.GET, path = "insert")
        public Result insert() {
            log.info("insert");
            return Result.instance(Result.ResultType.success);
        }
    }
    
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    @ToString
    public class Result {
        private int code;
        private String msg;
        private Object data;
    
        public static Result instance(ResultType resultType) {
            return Result.builder().code(resultType.code).msg(resultType.msg).build();
        }
    
        public static
        Result instance(ResultType resultType, Object o) {
            return Result.builder().code(resultType.code).msg(resultType.msg).data(o).build();
        }
    
        public enum ResultType {
            success(100, "success"),
            fail(200, "fail");
            private int code;
            private String msg;
    
            ResultType(int code, String msg) {
                this.code = code;
                this.msg = msg;
            }
        }
    }
    

    查看监控项

    http://localhost:8080/actuator/prometheus

    # HELP tomcat_global_sent_bytes_total  
    # TYPE tomcat_global_sent_bytes_total counter
    tomcat_global_sent_bytes_total{name="http-nio-8080",} 2301892.0
    # HELP tomcat_cache_access_total  
    # TYPE tomcat_cache_access_total counter
    tomcat_cache_access_total 0.0
    # HELP tomcat_threads_busy  
    # TYPE tomcat_threads_busy gauge
    tomcat_threads_busy{name="http-nio-8080",} 1.0
    # HELP tomcat_sessions_alive_max_seconds  
    # TYPE tomcat_sessions_alive_max_seconds gauge
    tomcat_sessions_alive_max_seconds 0.0
    # 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="nonheap",id="Code Cache",} 1.736704E7
    jvm_memory_committed_bytes{area="nonheap",id="Metaspace",} 4.3122688E7
    jvm_memory_committed_bytes{area="nonheap",id="Compressed Class Space",} 5898240.0
    jvm_memory_committed_bytes{area="heap",id="PS Eden Space",} 3.84827392E8
    jvm_memory_committed_bytes{area="heap",id="PS Survivor Space",} 1.7301504E7
    jvm_memory_committed_bytes{area="heap",id="PS Old Gen",} 8.8080384E7
    # HELP jvm_classes_unloaded_total The total number of classes unloaded since the Java virtual machine has started execution
    # TYPE jvm_classes_unloaded_total counter
    jvm_classes_unloaded_total 6.0
    # HELP http_server_requests_seconds  
    # TYPE http_server_requests_seconds summary
    http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/user/insert",} 2156.0
    http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="/user/insert",} 2.2480165
    http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/actuator/prometheus",} 222.0
    http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="/actuator/prometheus",} 5.7278298
    http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/**/favicon.ico",} 3.0
    http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="/**/favicon.ico",} 0.0269339
    http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/actuator",} 1.0
    http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="/actuator",} 0.0124612
    http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/actuator/metrics",} 1.0
    http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="/actuator/metrics",} 0.0083764
    # HELP http_server_requests_seconds_max  
    # TYPE http_server_requests_seconds_max gauge
    http_server_requests_seconds_max{exception="None",method="GET",status="200",uri="/user/insert",} 0.0020473
    http_server_requests_seconds_max{exception="None",method="GET",status="200",uri="/actuator/prometheus",} 0.047266
    http_server_requests_seconds_max{exception="None",method="GET",status="200",uri="/**/favicon.ico",} 0.0
    http_server_requests_seconds_max{exception="None",method="GET",status="200",uri="/actuator",} 0.0
    http_server_requests_seconds_max{exception="None",method="GET",status="200",uri="/actuator/metrics",} 0.0
    # HELP process_uptime_seconds The uptime of the Java virtual machine
    # TYPE process_uptime_seconds gauge
    process_uptime_seconds 1093.164
    # HELP process_cpu_usage The "recent cpu usage" for the Java Virtual Machine process
    # TYPE process_cpu_usage gauge
    process_cpu_usage 0.004873644261336128
    # HELP jvm_threads_peak The peak live thread count since the Java virtual machine started or peak was reset
    # TYPE jvm_threads_peak gauge
    jvm_threads_peak 39.0
    # HELP tomcat_sessions_created_total  
    # TYPE tomcat_sessions_created_total counter
    tomcat_sessions_created_total 0.0
    # HELP tomcat_sessions_active_max  
    # TYPE tomcat_sessions_active_max gauge
    tomcat_sessions_active_max 0.0
    # HELP jvm_threads_live The current number of live threads including both daemon and non-daemon threads
    # TYPE jvm_threads_live gauge
    jvm_threads_live 33.0
    # HELP tomcat_global_error_total  
    # TYPE tomcat_global_error_total counter
    tomcat_global_error_total{name="http-nio-8080",} 0.0
    # HELP jvm_gc_live_data_size_bytes Size of old generation memory pool after a full GC
    # TYPE jvm_gc_live_data_size_bytes gauge
    jvm_gc_live_data_size_bytes 2.3023384E7
    # 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",} 90112.0
    jvm_buffer_memory_used_bytes{id="mapped",} 0.0
    # HELP jvm_threads_daemon The current number of live daemon threads
    # TYPE jvm_threads_daemon gauge
    jvm_threads_daemon 29.0
    # HELP tomcat_global_received_bytes_total  
    # TYPE tomcat_global_received_bytes_total counter
    tomcat_global_received_bytes_total{name="http-nio-8080",} 0.0
    # HELP system_cpu_count The number of processors available to the Java virtual machine
    # TYPE system_cpu_count gauge
    system_cpu_count 4.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.536338045303E9
    # HELP tomcat_servlet_request_seconds  
    # TYPE tomcat_servlet_request_seconds summary
    tomcat_servlet_request_seconds_count{name="default",} 0.0
    tomcat_servlet_request_seconds_sum{name="default",} 0.0
    # HELP tomcat_sessions_active_current  
    # TYPE tomcat_sessions_active_current gauge
    tomcat_sessions_active_current 0.0
    # HELP tomcat_sessions_expired_total  
    # TYPE tomcat_sessions_expired_total counter
    tomcat_sessions_expired_total 0.0
    # HELP system_cpu_usage The "recent cpu usage" for the whole system
    # TYPE system_cpu_usage gauge
    system_cpu_usage 0.16904357041360574
    # HELP tomcat_servlet_error_total  
    # TYPE tomcat_servlet_error_total counter
    tomcat_servlet_error_total{name="default",} 0.0
    # HELP jvm_buffer_count An estimate of the number of buffers in the pool
    # TYPE jvm_buffer_count gauge
    jvm_buffer_count{id="direct",} 11.0
    jvm_buffer_count{id="mapped",} 0.0
    # HELP jvm_gc_max_data_size_bytes Max size of old generation memory pool
    # TYPE jvm_gc_max_data_size_bytes gauge
    jvm_gc_max_data_size_bytes 1.42606336E9
    # HELP jvm_gc_pause_seconds Time spent in GC pause
    # TYPE jvm_gc_pause_seconds summary
    jvm_gc_pause_seconds_count{action="end of minor GC",cause="Allocation Failure",} 8.0
    jvm_gc_pause_seconds_sum{action="end of minor GC",cause="Allocation Failure",} 0.06
    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.016
    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.072
    # 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 minor GC",cause="Allocation Failure",} 0.0
    jvm_gc_pause_seconds_max{action="end of minor GC",cause="Metadata GC Threshold",} 0.0
    jvm_gc_pause_seconds_max{action="end of major GC",cause="Metadata GC Threshold",} 0.0
    # HELP tomcat_global_request_seconds  
    # TYPE tomcat_global_request_seconds summary
    tomcat_global_request_seconds_count{name="http-nio-8080",} 2383.0
    tomcat_global_request_seconds_sum{name="http-nio-8080",} 9.718
    # 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="nonheap",id="Code Cache",} 2.5165824E8
    jvm_memory_max_bytes{area="nonheap",id="Metaspace",} -1.0
    jvm_memory_max_bytes{area="nonheap",id="Compressed Class Space",} 1.073741824E9
    jvm_memory_max_bytes{area="heap",id="PS Eden Space",} 6.78428672E8
    jvm_memory_max_bytes{area="heap",id="PS Survivor Space",} 1.7301504E7
    jvm_memory_max_bytes{area="heap",id="PS Old Gen",} 1.42606336E9
    # HELP tomcat_cache_hit_total  
    # TYPE tomcat_cache_hit_total counter
    tomcat_cache_hit_total 0.0
    # HELP jvm_gc_memory_allocated_bytes_total Incremented for an increase in the size of the young generation memory pool after one GC to before the next
    # TYPE jvm_gc_memory_allocated_bytes_total counter
    jvm_gc_memory_allocated_bytes_total 1.822181144E9
    # HELP tomcat_threads_config_max  
    # TYPE tomcat_threads_config_max gauge
    tomcat_threads_config_max{name="http-nio-8080",} 200.0
    # HELP tomcat_sessions_rejected_total  
    # TYPE tomcat_sessions_rejected_total counter
    tomcat_sessions_rejected_total 0.0
    # HELP tomcat_servlet_request_max_seconds  
    # TYPE tomcat_servlet_request_max_seconds gauge
    tomcat_servlet_request_max_seconds{name="default",} 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 1.9746424E7
    # HELP jvm_memory_used_bytes The amount of used memory
    # TYPE jvm_memory_used_bytes gauge
    jvm_memory_used_bytes{area="nonheap",id="Code Cache",} 1.7319296E7
    jvm_memory_used_bytes{area="nonheap",id="Metaspace",} 4.0319472E7
    jvm_memory_used_bytes{area="nonheap",id="Compressed Class Space",} 5361088.0
    jvm_memory_used_bytes{area="heap",id="PS Eden Space",} 1.7452976E8
    jvm_memory_used_bytes{area="heap",id="PS Survivor Space",} 655360.0
    jvm_memory_used_bytes{area="heap",id="PS Old Gen",} 2.8450952E7
    # HELP tomcat_global_request_max_seconds  
    # TYPE tomcat_global_request_max_seconds gauge
    tomcat_global_request_max_seconds{name="http-nio-8080",} 0.942
    # HELP tomcat_threads_current  
    # TYPE tomcat_threads_current gauge
    tomcat_threads_current{name="http-nio-8080",} 10.0
    # HELP jvm_classes_loaded The number of classes that are currently loaded in the Java virtual machine
    # TYPE jvm_classes_loaded gauge
    jvm_classes_loaded 8047.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="error",} 0.0
    logback_events_total{level="warn",} 0.0
    logback_events_total{level="info",} 2198.0
    logback_events_total{level="debug",} 0.0
    logback_events_total{level="trace",} 0.0
    # 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",} 90112.0
    jvm_buffer_total_capacity_bytes{id="mapped",} 0.0
    

    promethues配置

    # my global config
    global:
      scrape_interval:     5s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
      evaluation_interval: 5s # Evaluate rules every 15 seconds. The default is every 1 minute.
      # scrape_timeout is set to the global default (10s).
    
    # Alertmanager configuration
    alerting:
      alertmanagers:
      - static_configs:
        - targets:
          # - alertmanager:9093
    
    # Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
    rule_files:
      # - "first_rules.yml"
      # - "second_rules.yml"
    
    # A scrape configuration containing exactly one endpoint to scrape:
    # Here it's Prometheus itself.
    scrape_configs:
      # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
      - job_name: 'prometheus'
    
        # metrics_path defaults to '/metrics'
        # scheme defaults to 'http'.
    
        static_configs:
        - targets: ['localhost:9090']
    
      - job_name: 'spring-actuator'
        metrics_path: '/actuator/prometheus'
        scrape_interval: 5s
        static_configs:
        - targets: ['localhost:8080']
    
    

    安装运行promethues和grafana

    .\prometheus.exe --config.file=prometheus.yml
    .\grafana-server.exe

    相关文章

      网友评论

          本文标题:Spring Boot 监控(Prometheus + Graf

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