Prometheus 是什么
中文名普罗米修斯,最初在 SoundCloud 上构建的监控系统,自 2012 年成为社区开源项目,用户非常活跃的开发人员和用户社区,2016 年加入 CNCF,成为继 kubernetes 之后的第二个托管项目,官方网站
Prometheus的特点
来自官网
- 多维数据模型:由度量名称和键值对标识的时间序列数据
- PromSQL: — 种灵活的查询语言,可以利用多维数据完成复杂的查询
- 不依赖分布式存储,单个服务器节点可直接工作
- 基于 HTTP 的 pull 方式釆集时间序列数据
- 推送时间序列数据通过 PushGateway 组件支持
- 通过服务发现或静态配罝发现目标
- 多种图形模式及仪表盘支持 (grafana)
Prometheus的组成架构
**
| 名称 | 说明 |
|---|---|
| Prometheus Server | 收集指标和存储时间序列数据,并提供查询接口 |
| Push Gateway | 短期存储指标数据,主要用于临时性任务 |
| Exporters | 采集已有的三方服务监控指标并暴露 metrics |
| Alertmanager | 告警 |
| Web UI | 简单的 WEB 控制台 |
Prometheus 部署
采用Docker进行部署,使用Docker-Compose进行编排
前提准备(安装Docker-Compose)
# 下载docker-composecurl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose# 赋予可执行的权限chmod +x /usr/local/bin/docker-compose
编写 docker-compose.yml
创建docker-monitor目录,在其下创建docker-compose.yml文件,填写如下的内容
version: "3"services:prometheus:image: prom/prometheus:v2.4.3container_name: 'prometheus'volumes:- ./prometheus/:/etc/prometheus/ #映射prometheus的配置文件- /etc/localtime:/etc/localtime:ro #同步容器与宿主机的时间,这个非常重要,如果时间不一致,会导致prometheus抓不到数据ports:- '9090:9090'
监控Web应用性能指标
1.在docker-monitor目录下,新增 prometheus文件夹,创建 prometheus.yml文件,填写如下的内容
global: #全局配置scrape_interval: 15s #全局定时任务抓取性能数据间隔scrape_configs: #抓取性能数据任务配置- job_name: 'test-service' #抓取订单服务性能指标数据任务,一个job下可以配置多个抓紧的targets,比如订单服务多个实例机器scrape_interval: 10s #每10s抓紧一次metrics_path: '/actuator/prometheus' #抓取的数据urlstatic_configs:- targets: ['192.168.124.8:5024'] #抓取的服务器地址,可以填写多个,注意修改成自己的ip和web端口labels:application: 'test-service-label' #抓取任务标签- job_name: 'prometheus' #抓取prometheus自身性能指标数据任务scrape_interval: 5sstatic_configs:- targets: ['localhost:9090'] # prometheus 的监控地址
2.启动prometheus
# 切换到docker-monitor目录cd docker-monitor# 启动docker-composedocker-compose up -d
访问 prometheus 管理界面
页面如下所示
切换至status -> target
具体的页面如下

可以看出,在 prometheus.yml 中配置的两个任务,其中,监控web应用的任务,失败,state = DOWN,需要在Web服务中,添加相应的依赖,使其和prometheus整合。
修改pom.xml
<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>
修改application.yml
management:endpoints:promethus:enable: trueweb:exposure:include: '*'
修改完成之后,重启web应用,重新访问 prometheus界面,可以看到任务已经成功

访问 http://192.168.124.8:5024/actuator/prometheus 可以看到Web应用对外暴露的一些参数指标,如下所示
例如 jvm_memory_committed_bytes{area="heap",id="PS Eden Space",} 3.63331584E8 标识伊甸园的大小
还可在首页,输入对应的指标前缀,点击Execute,查询出所有该指标
并绘制相应的图标
Grafanna 部署
使用Docker部署Grafanna
修改docker-compose.yml
version: "3"services:prometheus:image: prom/prometheus:v2.4.3container_name: 'prometheus'volumes:- ./prometheus/:/etc/prometheus/ #映射prometheus的配置文件- /etc/localtime:/etc/localtime:ro #同步容器与宿主机的时间,这个非常重要,如果时间不一致,会导致prometheus抓不到数据ports:- '9090:9090'grafana:image: grafana/grafana:5.2.4container_name: 'grafana'ports:- '3000:3000'volumes:- ./grafana/config/grafana.ini:/etc/grafana/grafana.ini #grafana报警邮件配置- ./grafana/provisioning/:/etc/grafana/provisioning/ #配置grafana的prometheus数据源- /etc/localtime:/etc/localtime:roenv_file:- ./grafana/config.monitoring #grafana登录配置depends_on:- prometheus #grafana需要在prometheus之后启动
新建grafanna目录,在其下创建 config.monitoring 文件
# 设置登录的密码GF_SECURITY_ADMIN_PASSWORD=password# 设置不能注册GF_USERS_ALLOW_SIGN_UP=false
在grafanna 目录下,新建 config 目录,在 config 目录下,新建 grafanna.ini 文件
################################### SMTP / Emailing ########################### 配置邮件服务器[smtp]enabled = truehost = smtp.exmail.qq.com:465user = supportpassword =from_address = supportfrom_name = support
在grafanna 目录下,新建 provisioning/datasources 目录,在这个目录下,新建datasource.yml ,其中的内容如下
# config file versionapiVersion: 1deleteDatasources: #如果之前存在name为Prometheus,orgId为1的数据源先删除- name: PrometheusorgId: 1datasources: #配置Prometheus的数据源- name: Prometheustype: prometheusaccess: proxyorgId: 1url: http://prometheus:9090 #在相同的docker compose下,可以直接用prometheus服务名直接访问basicAuth: falseisDefault: trueversion: 1editable: true
启动Grafanna
# 切换到docker-compose.yml的所在目录cd docker-monitor# 启动docker-compose up -d
访问 Grafanna 的管理界面
http://localhost:3000/ 输入用户名(admin)和密码(在config.monitoring中配置的密码,这里为password)
登录之后的首页
导入监控json,监测web应用

选择如下附件中的json,选择 prometheus,点击import导入即可
web-dashboard.json
编写一个报警策略,发送邮件通知
点击Errors-> Edit
进入到如下的界面
新增报警渠道

修改如下的监控配置
配置发送给谁,及Message
报警的提示如下
