重拾prometheus

1、引入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-registry-prometheus</artifactId>
        </dependency>
package com.xf.config;

import java.time.Duration;

import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import io.micrometer.core.instrument.Meter;
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.config.MeterFilter;
import io.micrometer.core.instrument.distribution.DistributionStatisticConfig;
import lombok.extern.slf4j.Slf4j;

@Configuration
@Slf4j
public class MeterService {

    @Bean
    MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {
        return registry -> {
            registry.config().commonTags("application", "epayapi").meterFilter(new MeterFilter() {
                @Override
                public DistributionStatisticConfig configure(Meter.Id id, DistributionStatisticConfig config) {
                    if (id.getType() == Meter.Type.TIMER && id.getName().matches("^(http|hystrix){1}.*")) {
                        return DistributionStatisticConfig.builder().percentilesHistogram(true)
                                .percentiles(0.5, 0.90, 0.95, 0.99)
                                .sla(Duration.ofMillis(50).toNanos(), Duration.ofMillis(100).toNanos(),
                                        Duration.ofMillis(200).toNanos(), Duration.ofSeconds(1).toNanos(),
                                        Duration.ofSeconds(5).toNanos())
                                .minimumExpectedValue(Duration.ofMillis(1).toNanos())
                                .maximumExpectedValue(Duration.ofSeconds(5).toNanos()).build().merge(config);
                    } else {
                        return config;
                    }
                }
            });
        };
    }
}

P90 P50要加上面的代码

2、暴露端点

management:  
  endpoints:
    web:
      exposure:
        include: prometheus
  endpoint:
    health:
      show-details: always   
  metrics:
    export:
      datadog:
        application-key: ${spring.application.name}

ps:暴露端点不要写*,不要写*,不要写*

3、prometheus.yml配置

 

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'.
    metrics_path: /epayapi/actuator/prometheus
    scrape_interval: 5s
    static_configs:
      - targets: ["127.0.0.1:7011"]

 

4、下载地址整理

prometheus下载: https://prometheus.io/download/

grafana下载:https://grafana.com/get/?tech=target&plcmt=top-nav&cta=A-downloads&tab=self-managed

grafana模板:https://grafana.com/grafana/dashboards/

 

posted @ 2022-09-21 11:11  wujf  阅读(37)  评论(0编辑  收藏  举报