Prometheus是一个非常流行开源的系统监控和报警系统,常见的使用方式有两种,一种是和micrometer(侵入式)集成,另外一种就是使用jmx-exporter这个agent(非侵入式)。本文主要介绍这两种使用方式的集成以及http接口和druid的监控配置。
集成
micrometer和prometheus的集成引入以下依赖即可
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
同时jmx-exporter预留了jmx这个扩展点,只要我们将监控信息注册成mbean那么jmx也能采集到相关信息,micrometer已经做好了这部分工作我们引入以下依赖即可
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-jmx</artifactId>
</dependency>
完成上面两部分工作后prometheus和jmx相关的集成就结束了,http接口和druid的指标也会被采集到
监控配置
这里我先提供一份标准配置,着急的小伙伴可以直接拿去实验
---
ssl: false
lowercaseOutputName: false
lowercaseOutputLabelNames: false
whitelistObjectNames: ["java.lang:type=OperatingSystem", "com.alibaba.druid:*", "metrics:name=httpServerRequests*,type=timers"]
rules:
- pattern: 'java.lang<type=OperatingSystem><>((?!process_cpu_time)\w+):'
name: os_$1
type: GAUGE
attrNameSnakeCase: true
- pattern: 'com.alibaba.druid<type=DruidDataSource, id=(\d+)><>(\w+)'
name: datasource_connection_pool_$1_$2
type: GAUGE
attrNameSnakeCase: true
- pattern: 'metrics<name=httpServerRequests.application.(.*).exception.(.*).method.(.*).outcome.(.*).status.(.*).uri.(.*), type=timers><>(.*):(.*)'
name: http_server_requests_$7
type: GAUGE
labels:
application: $1
exception: $2
method: $3
outcome: $4
status: $5
url: $6
attrNameSnakeCase: true
上面第一个pattern是系统指标,第二个pattern则是druid的指标信息,第三个pattern是http接口的指标信息,pattern本身其实是一个正则表达式,依赖正则表达式会将原指标拆分成多个块,这个块可以通过$引用从而达到自定义name和label的目的。
attrNameSnakeCase是指将特殊字符都转成下划线,建议使用true。
示例
原始的指标name:
metrics<name=httpServerRequests.application.c2f-boot-demo.exception.None.method.GET.outcome.SUCCESS.status.200.uri./user/page, type=timers><>50thPercentile
pattern
metrics<name=httpServerRequests.application.(.*).exception.(.*).method.(.*).outcome.(.*).status.(.*).uri.(.*), type=timers><>(.*):(.*)
pattern会将name切割成多份,使用这些信息就能自定义name和label
http指标
关键性指标有调用数、最大rt和最小rt,以及rt的50线、75线、95线、98线、99线、999线。