Prometheus是一个监控系统,尤其在云原生的时代,Prometheus作为新一代的云原生监控,表现的非常亮眼,目前已经超过120+项的第三方集成。Prometheus监控架构一般分为采集层、存储计算层、应用层。
采集层:
采集层分为两类,一类是生命周期比较短的作业,一类是生命周期较长的作业。所谓生命周期长短就是你的应用是长时间运行还是短时间运行
短作业:直接通过Api,将指标推送给Pushgateway
长作业:Retrieval组件直接从job或者Exporter拉取数据(比如SpringBoot应用程序)
存储计算层:
Prometheus Server,里面包含了存储引擎和计算引擎
Retrieval组件为取数组件,它会主动从Pushgateway或者Exporter拉取指标数据
Service dicovery可以动态发现要监控的目标
应用层:
分为两类,AlertManager和数据可视化(Grafana)
AlertManager:告警组件,在Prometheus配置告警规则,一旦满足告警规则,将告警信息发送给AlertManager,AlertManager发送出告警信息
Grafana:将Prometheus采集的指标数据可视化
1.部署客户端—SpringBoot应用
Prometheus分为客户端与服务端,客户端就是SpringBoot应用需要引入相关的依赖:
<!--springboot的监控端点 2.3.6-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--prometheus的客户端依赖 1.5.7-->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
配置文件配置打开Actuator服务
SpringBoot自带监控功能Actuator,可以帮助实现对程序内部运行情况监控,比如监控状况、Bean加载情况、环境变量、日志信息、线程信息等,配置如下:
properties配置文件配置:
management.endpoints.web.exposure.include=*
yml文件配置:
management:
endpoints:
web:
exposure:
include: '*'
配置完,启动就可以看到监控的数据了
2.部署客户端—node-exporter
node-exproter 它是最基本的节点监控客户端,负责监控机器的各个指标,包括节点存活、CPU、Mem、Network、IO 等等,方便后边演示 Alertmanager 报警时的触发条件,例如配置节点存活检测,当机器 Down 时,触发报警控制,那么就可以通过停止 node-exporter 来模拟实现了。
docker pull prom/node-exporter:latest
docker run --name node-exporter -d -p 9100:9100 prom/node-exporter:latest
访问地址:http://ip:9100/metrics,即可看到监控的指标
3.部署服务端—Prometheus Server
这里使用docker部署,因为国内有docker的镜像所有部署起来更容易一些
拉取镜像
docker pull prom/prometheus
准备prometheus.yml文件
可以配置需要监控的服务,可以配置收集springboot应用的actuator信息,收集node-exporter的信息,配置如下:
scrape_configs:
# 可随意指定
- job_name: 'spring'
# 多久采集一次数据
scrape_interval: 15s
# 采集时的超时时间
scrape_timeout: 10s
# 采集的路径
metrics_path: '/actuator/prometheus'
# 采集服务的地址,设置成Springboot应用所在服务器的具体地址
static_configs:
- targets: ['ip:8090','ip:8090']
- job_name: 'node-exporter'
# 多久采集一次数据
scrape_interval: 15s
# 采集时的超时时间
scrape_timeout: 10s
static_configs:
- targets: ['ip:9100']
labels:
instance: redpack
service: node-service
我测试只配置了收集node-exporter的信息。
创建docker容器,挂载并指定yml文件启动
docker run -d -p 9090:9090 -v /home/ctyun/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus --config.file=/etc/prometheus/prometheus.yml
访问服务http://{ip}:9090/即可