1、prometheus环境搭建
为了快速搭建,采用docker安装
version: '3'
networks:
monitor:
driver: bridge
services:
prometheus:
image: prom/prometheus
container_name: prometheus
hostname: prometheus
restart: always
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
networks:
- monitor
grafana:
image: grafana/grafana
container_name: grafana
hostname: grafana
restart: always
ports:
- "3000:3000"
networks:
- monitor
node-exporter:
image: quay.io/prometheus/node-exporter
container_name: node-exporter
hostname: node-exporter
restart: always
ports:
- "9100:9100"
networks:
- monitor
cadvisor:
image: google/cadvisor:latest
container_name: cadvisor
hostname: cadvisor
restart: always
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
ports:
- "8899:8080"
networks:
- monitor
这里拉取的镜像分别有:
- cadvisor 用于获取docker容器的指标
- node-exporter 用户获取服务器的指标
- grafana 监控的web-ui好用的可视化组件
- alertmanager 告警组件(目前暂未用到)
- prometheus 核心监控组件
新建prometheus的配置文件prometheus.yml(这份配置其实就是告诉prometheus要去哪个端口中拉取对应的监控数据)
静态配置
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['ip:9090']
- job_name: 'cadvisor'
static_configs:
- targets: ['ip:8899']
- job_name: 'node'
static_configs:
- targets: ['ip:9100']
随后在目录下docker-compose up -d
启动,于是我们就可以分别访问:
- http://ip:9100/metrics( 查看服务器的指标)
- http://ip:8899/metrics(查看docker容器的指标)
- http://ip:9090/(prometheus的原生web-ui)
- http://ip:3000/(Grafana开源的监控可视化组)
2、使用
prometheus的原生web-ui
Grafana登录
初始用户名/密码:admin/admin
配置数据源
官方已经有现成的模版
例如Docker的监控(上面启动的cadvisor服务就采集了Docker的信息),我们使用模板893来配置监控docker的信息:
3、springboot监控介入
创建项目,增加jar,pom
<!--监控-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--适配prometheus-->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
增加配置文件
# 监控配置 TODO
management:
endpoint:
health:
show-details: always
metrics:
enabled: true
prometheus:
enabled: true
endpoints:
web:
exposure:
include: '*'
metrics:
export:
prometheus:
enabled: true
tags:
application: fengpt
spring:
application:
name: fengpt
编写要监控的接口(可选)跳过
注意: @Timed(“base.pay”) 就是增加健康的key
@RequestMapping("/pay")
@Timed("base.pay")
public ResultWrapper pay(@RequestBody Map<String, Object> map) {
log.info("pay param={}", JSON.toJSONString(map));
try {
payService.pay(map);
return ResultWrapper.getSuccessReturn(map);
} catch (BusinessException e) {
log.error("pay BusinessException error={}", e.getMessage());
return ResultWrapper.getFailure(e.getMessage());
} catch (Exception e) {
log.error("pay error", e);
return ResultWrapper.getFailure("操作失败,请检查后重试!");
}
}
启动项目
调用接口:http://localhost:8080/actuator/prometheus
就可以看到监控信息。
其中也能看到我们刚才编写的接口的base.pay 的调用信息:
在prometheus 配置监控
在prometheus.yml 增加获取监控信息的接口地址
- job_name: 'app'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['ip:8080']
重启,prometheus
在页面就可以看到项目的健康信息
在 Grafana配置监控
那我们继续在Grafana配置对应的监控就好啦。这里我选用了4701模板的JVM监控和SpringBoot监控,可以简单看下他们的效果:
单个接口的也可以配置监控
可以采用压测工具,压测接口,看下数据的变化。
base_pay_seconds_count:每秒的访问量
base_pay_seconds_sum:每秒的总访问时长
评论区