Spring boot 在項(xiàng)目中的應(yīng)用-監(jiān)控(三)

基本流程: Spring boot 暴露統(tǒng)計(jì)端點(diǎn)缸榄,Prometheus采集處理,Grafana提供展示界面阶冈。

1. 添加依賴

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

    <dependency>
      <groupId>io.prometheus</groupId>
      <artifactId>simpleclient_spring_boot</artifactId>
      <version>0.0.26</version>
    </dependency>

2. 配置application.yml

security:
  basic:
    # 啟用基礎(chǔ)認(rèn)證
    enabled: false
    # 安全路徑列表傻谁,逗號(hào)分隔,此處只針對(duì)/admin路徑進(jìn)行認(rèn)證
    path: /admin
  user:
    # 認(rèn)證使用的用戶名
    name: admin
    # 認(rèn)證使用的密碼进倍。 默認(rèn)情況下,啟動(dòng)時(shí)會(huì)記錄隨機(jī)密碼购对。
    password: 123456

management:
  # actuator暴露接口使用的端口猾昆,為了和api接口使用的端口進(jìn)行分離
  port: 7778
  # actuator暴露接口的前綴
  context-path: /admin
  security:
    # actuator是否需要安全保證
    enabled: true
    # 可以訪問管理端點(diǎn)的用戶角色列表,逗號(hào)分隔
    roles: SUPERUSER

endpoints:
  metrics:
    # actuator的metrics接口是否開啟
    enabled: true
    # actuator的metrics接口是否需要安全保證
    sensitive: false
  health:
    # actuator的health接口是否開啟
    enabled: true
    # actuator的health接口是否需要安全保證
    sensitive: false
  #啟用shutdown
  shutdown:
    enabled: true

3. 通過注釋實(shí)現(xiàn)自定義Prometheus統(tǒng)計(jì)指標(biāo)

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface PrometheusMetrics {

    /**
     * 默認(rèn)為空,程序使用method signature作為Metric name
     * 如果name有設(shè)置值,使用name作為Metric name
     */
    String name() default "";
}
@Aspect
@Component
@Slf4j
public class PrometheusMetricsAspect {
    private static final Counter requestTotal = Counter.build().name("couter_all").labelNames("api").help
        ("total request couter of api").register();
    private static final Counter requestError = Counter.build().name("couter_error").labelNames("api").help
        ("response Error couter of api").register();
    private static final Histogram histogram = Histogram.build().name("histogram_consuming").labelNames("api").help
        ("response consuming of api").register();

    /**
     * 自定義Prometheus注解的全路徑
     */
    @Pointcut("@annotation(com.test.PrometheusMetrics)")
    public void pcMethod() {

    }

    @Around(value="pcMethod() && @annotation(annotation)")
    public Object metricsCollector(ProceedingJoinPoint joinPoint, PrometheusMetrics annotation) throws Throwable {
        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
        PrometheusMetrics prometheusMetrics = methodSignature.getMethod()
            .getAnnotation(PrometheusMetrics.class);
        if (null == prometheusMetrics) {
            return joinPoint.proceed();
        }
        String name;
        if (StringUtils.isNotEmpty(prometheusMetrics.name())) {
            name = prometheusMetrics.name();
        } else {
            HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder
                .getRequestAttributes())
                .getRequest();
            name = request.getRequestURI();
        }
        requestTotal.labels(name).inc();
        Histogram.Timer requestTimer = histogram.labels(name).startTimer();
        Object object;
        try {
            object = joinPoint.proceed();
        } catch (Exception e) {
            requestError.labels(name).inc();
            throw e;
        } finally {
            requestTimer.observeDuration();
        }
        return object;
    }
}

使用方法:


image.png

訪問/sign后骡苞,會(huì)自動(dòng)生成counter_status_200_sign垂蜗,counter_all等指標(biāo)

4. docker部署Prometheus

  • 首先獲取Prometheusdocker鏡像
docker pull prom/prometheus
  • 然后編寫配置文件 prometheus.yml
global:
  scrape_interval: 10s
  scrape_timeout: 10s
  evaluation_interval: 10m
scrape_configs:
  - job_name: spring-boot
    scrape_interval: 5s
    scrape_timeout: 5s
    metrics_path: /admin/prometheus
    scheme: http
    basic_auth:
      # 對(duì)應(yīng)application.yml security配置
      username: admin
      password: 123456
    static_configs:
      - targets:
        - 127.0.0.1:7778
  • 啟動(dòng)容器
docker run -d \
--name prometheus \
-p 10000:9090 \
-m 500M \
-v "$(pwd)/prometheus.yml":/etc/prometheus/prometheus.yml \
-v "$(pwd)/data":/data \
prom/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--log.level=info
  • prometheus: error: unknown short flag '-c' 問題

解決辦法就是把-config.file和-log.level前加一個(gè)‘-’,--config和--log解幽。
參見:https://github.com/prometheus/prometheus/issues/2878

image.png

5. docker安裝Grafana

docker pull grafana/grafana
  • 啟動(dòng)容器
docker run -d --name=grafana -p 3000:3000 grafana/grafana
  • 配置prometheus數(shù)據(jù)源


    image.png
  • 添加統(tǒng)計(jì)panel


    image.png

擴(kuò)展:
Prometheus指標(biāo)類型:http://licyhust.com/%E5%AE%B9%E5%99%A8%E6%8A%80%E6%9C%AF/2017/07/10/prometheus-metrics/

參考:
https://blog.csdn.net/fly910905/article/details/78618969

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末么抗,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子亚铁,更是在濱河造成了極大的恐慌,老刑警劉巖螟加,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件徘溢,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡捆探,警方通過查閱死者的電腦和手機(jī)然爆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來黍图,“玉大人曾雕,你說我怎么就攤上這事≈唬” “怎么了剖张?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵切诀,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我搔弄,道長(zhǎng)幅虑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任顾犹,我火速辦了婚禮倒庵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘炫刷。我一直安慰自己擎宝,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布浑玛。 她就那樣靜靜地躺著绍申,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锄奢。 梳的紋絲不亂的頭發(fā)上失晴,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音拘央,去河邊找鬼涂屁。 笑死,一個(gè)胖子當(dāng)著我的面吹牛灰伟,可吹牛的內(nèi)容都是我干的拆又。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼栏账,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼帖族!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起挡爵,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤竖般,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后茶鹃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涣雕,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年闭翩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了挣郭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡疗韵,死狀恐怖兑障,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤流译,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布逞怨,位于F島的核電站,受9級(jí)特大地震影響先蒋,放射性物質(zhì)發(fā)生泄漏骇钦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一竞漾、第九天 我趴在偏房一處隱蔽的房頂上張望眯搭。 院中可真熱鬧,春花似錦业岁、人聲如沸鳞仙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽棍好。三九已至,卻和暖如春允耿,著一層夾襖步出監(jiān)牢的瞬間借笙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工较锡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留业稼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓蚂蕴,卻偏偏與公主長(zhǎng)得像低散,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子骡楼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351