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-compose
curl -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.3
container_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' #抓取的数据url
static_configs:
- targets: ['192.168.124.8:5024'] #抓取的服务器地址,可以填写多个,注意修改成自己的ip和web端口
labels:
application: 'test-service-label' #抓取任务标签
- job_name: 'prometheus' #抓取prometheus自身性能指标数据任务
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090'] # prometheus 的监控地址
2.启动prometheus
# 切换到docker-monitor目录
cd docker-monitor
# 启动docker-compose
docker-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: true
web:
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.3
container_name: 'prometheus'
volumes:
- ./prometheus/:/etc/prometheus/ #映射prometheus的配置文件
- /etc/localtime:/etc/localtime:ro #同步容器与宿主机的时间,这个非常重要,如果时间不一致,会导致prometheus抓不到数据
ports:
- '9090:9090'
grafana:
image: grafana/grafana:5.2.4
container_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:ro
env_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 = true
host = smtp.exmail.qq.com:465
user = support
password =
from_address = support
from_name = support
在grafanna 目录下,新建 provisioning/datasources
目录,在这个目录下,新建datasource.yml
,其中的内容如下
# config file version
apiVersion: 1
deleteDatasources: #如果之前存在name为Prometheus,orgId为1的数据源先删除
- name: Prometheus
orgId: 1
datasources: #配置Prometheus的数据源
- name: Prometheus
type: prometheus
access: proxy
orgId: 1
url: http://prometheus:9090 #在相同的docker compose下,可以直接用prometheus服务名直接访问
basicAuth: false
isDefault: true
version: 1
editable: 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
报警的提示如下