借助Prometheus+Grafana可以很好地对服务的状态、服务资源使用情况进行监控和展示。
本文只是介绍一些初级入门的使用方法,一些更复杂的用法,需要进一步研究和尝试。
一、单个服务接入prometheus
如果工程是springboot,则接入prometheus非常简单,只需要引入相关依赖,然后开启endpoints即可。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
management:
endpoint:
loggers:
enabled: true
endpoints:
web:
exposure:
include: "……,prometheus"
然后访问:http://xx/actuator/prometheus 就可以看到相关的搜集数据。
二、Grafana配置面板
1、添加DataSource,选择prometheus作为数据源即可
2、借助Variables可以定义变量,以便进行数据过滤和展示指标定义
示例:
- 获取prometheus某个label值作为变量:label_values(application),application作为label
- 获取指定application下的另一个label值作为变量:label_values({application="$application"}, instance),instance作为第二级label
- 通过指定hide类型,控制变量是否作为页面最上方的查询条件
- 还可以通过Regex对查询到的变量值进行过滤
3、在dashboard中添加pannel
主要分为几个步骤,首先选择pannel展示的图表类型;
然后对图表属性进行设置,比如展示的文字、颜色等
然后通过query配置进行图表数据的处理,对于prometheus作为数据源来说,就是通过promQL语法进行查询操作,查询和统计各种指标值,然后作为图表的数据来使用。
示例:
sum(jvm_memory_used_bytes{application="$application", instance="$instance", area="heap"})*100/sum(jvm_memory_max_bytes{application="$application",instance="$instance", area="heap"})
查询指定的application、指定instance的内存(JVM堆)使用百分比。
system_cpu_usage{instance="$instance", application="$application"} * 100
查询指定application、指定instance的CPU使用情况
topk(10, sum by(uri, method) (rate(http_server_requests_seconds_count{application="$application", instance="$instance"}[1m])))
接口请求次数统计(每分钟TOP10请求的方法)
sum(rate(http_server_requests_seconds_count{application="$application", instance="$instance", status=~"5.."}[1m]))
sum(rate(http_server_requests_seconds_count{application="$application", instance="$instance", status=~"4.."}[1m]))
sum(rate(http_server_requests_seconds_count{application="$application", instance="$instance", status=~"2.."}[1m]))
每分钟按照接口返回状态进行统计的接口请求次数
样例dashboard: