监控系统----prometheus收集JVM指标

java程序pom.xml添加如下依赖包

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-registry-prometheus</artifactId>
        </dependency>

注意:如果出现datasource循环依赖添如下配置

spring:
  cloud:
    refresh:
      refreshable: none

java程序application.yml添加如下配置

# 此配置基于spring-bootstrap 2.1.0
management:
  endpoint:
    health:
      show-details: always
    metrics:
      enabled: true
    prometheus:
      enabled: true
  endpoints:
    web:
      exposure:
        include: "*"
  metrics:
    export:
      prometheus:
        enabled: true
    tags:
      application: ${spring.application.name}

最终效果:访问 http://ip:port/actuator/prometheus

# HELP tomcat_servlet_request_max_seconds  
# TYPE tomcat_servlet_request_max_seconds gauge
tomcat_servlet_request_max_seconds{application="checkin",name="default",} 0.0
tomcat_servlet_request_max_seconds{application="checkin",name="dispatcherServlet",} 0.0
# HELP hikaricp_connections_pending Pending threads
# TYPE hikaricp_connections_pending gauge
hikaricp_connections_pending{application="checkin",pool="HikariPool-1",} 0.0
# HELP jdbc_connections_max  
# TYPE jdbc_connections_max gauge
jdbc_connections_max{application="checkin",name="dataSource",} 10.0
# HELP tomcat_threads_busy_threads  
# TYPE tomcat_threads_busy_threads gauge
tomcat_threads_busy_threads{application="checkin",name="http-nio-8002",} 1.0
# HELP tomcat_sessions_active_current_sessions  
# TYPE tomcat_sessions_active_current_sessions gauge
tomcat_sessions_active_current_sessions{application="checkin",} 0.0
# HELP hikaricp_connections Total connections
# TYPE hikaricp_connections gauge
hikaricp_connections{application="checkin",pool="HikariPool-1",} 10.0
# HELP tomcat_global_request_max_seconds  
# TYPE tomcat_global_request_max_seconds gauge
tomcat_global_request_max_seconds{application="checkin",name="http-nio-8002",} 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 minor GC",application="checkin",cause="Allocation Failure",} 33.0

prometheus配置prometheus.yml

第一种方式:手动添加
  - job_name: checkin #以application name区分
    scrape_interval: 5s
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ['192.168.10.200:8002']
        labels:
          instance: checkin #以application name区分
第二种方式:eureka服务自动发现
  - job_name: eureka
    scheme: http
    metrics_path: '/actuator/prometheus'
    consul_sd_configs:
    #consul 地址
      - server: '192.168.10.200:1025' #eureka服务地址
        scheme: http 
        services: [CHECKIN] #eureka上注册的服务名,没有则代表所有服务

注意第二种方式的实现需要eureka添加如下依赖包

        <dependency>
            <groupId>at.twinformatics</groupId>
            <artifactId>eureka-consul-adapter</artifactId>
            <version>${eureka-consul-adapter.version}</version>
        </dependency>
        
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

注意:prometheus 2.21.0版本已经支持eureka自动发现了
在这里插入图片描述

eureka服务相应版本要求

  • Java 1.8+

版本1.1.x及更高版本

  • Spring Boot 2.1.x
  • Spring Cloud Greenwith

版本1.0.x及更高版本

  • Spring Boot 2.0.x
  • Spring Cloud Finchley

版本0.x

  • Spring Boot 1.5.x
  • Spring Cloud Edgware

详细文档见:SpringCloud使用Prometheus監控(基於Eureka)

错误解决:Error refreshing service

level=error ts=2020-08-31T06:55:52.623671234Z caller=consul.go:468 component="discovery manager scrape" discovery=consul msg="Error refreshing service" service=EUREKA-CLIENT tag= err="Unexpected response code: 503 ({\"timestamp\":1598856952622,\"status\":503,\"error\":\"Service Unavailable\",\"exception\":\"org.springframework.web.context.request.async.AsyncRequestTimeoutException\",\"message\":\"No message available\",\"path\":\"/v1/catalog/service/EUREKA-CLIENT\"})"
level=error ts=2020-08-31T06:56:12.628255577Z caller=consul.go:355 component="discovery manager scrape" discovery=consul msg="Error refreshing service list" err="Unexpected response code: 503 ({\"timestamp\":1598856972625,\"status\":503,\"error\":\"Service Unavailable\",\"exception\":\"org.springframework.web.context.request.async.AsyncRequestTimeoutException\",\"message\":\"No message available\",\"path\":\"/v1/catalog/services\"})"

修改eureka server的application.yml配置如下:

  mvc:
    async:
      request-timeout: 35000

参考:https://github.com/twinformatics/eureka-consul-adapter

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值