Prometheus 是什么

中文名普罗米修斯,最初在 SoundCloud 上构建的监控系统,自 2012 年成为社区开源项目,用户非常活跃的开发人员和用户社区,2016 年加入 CNCF,成为继 kubernetes 之后的第二个托管项目,官方网站

Prometheus的特点

来自官网

  • 多维数据模型:由度量名称和键值对标识的时间序列数据
  • PromSQL: — 种灵活的查询语言,可以利用多维数据完成复杂的查询
  • 不依赖分布式存储,单个服务器节点可直接工作
  • 基于 HTTP 的 pull 方式釆集时间序列数据
  • 推送时间序列数据通过 PushGateway 组件支持
  • 通过服务发现或静态配罝发现目标
  • 多种图形模式及仪表盘支持 (grafana)

    Prometheus的组成架构

    **自动化监测系统之Prometheus&Granfana - 图1
名称 说明
Prometheus Server 收集指标和存储时间序列数据,并提供查询接口
Push Gateway 短期存储指标数据,主要用于临时性任务
Exporters 采集已有的三方服务监控指标并暴露 metrics
Alertmanager 告警
Web UI 简单的 WEB 控制台

Prometheus 部署

采用Docker进行部署,使用Docker-Compose进行编排

前提准备(安装Docker-Compose)

  1. # 下载docker-compose
  2. curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
  3. # 赋予可执行的权限
  4. chmod +x /usr/local/bin/docker-compose

编写 docker-compose.yml

创建docker-monitor目录,在其下创建docker-compose.yml文件,填写如下的内容

  1. version: "3"
  2. services:
  3. prometheus:
  4. image: prom/prometheus:v2.4.3
  5. container_name: 'prometheus'
  6. volumes:
  7. - ./prometheus/:/etc/prometheus/ #映射prometheus的配置文件
  8. - /etc/localtime:/etc/localtime:ro #同步容器与宿主机的时间,这个非常重要,如果时间不一致,会导致prometheus抓不到数据
  9. ports:
  10. - '9090:9090'

监控Web应用性能指标

1.在docker-monitor目录下,新增 prometheus文件夹,创建 prometheus.yml文件,填写如下的内容

  1. global: #全局配置
  2. scrape_interval: 15s #全局定时任务抓取性能数据间隔
  3. scrape_configs: #抓取性能数据任务配置
  4. - job_name: 'test-service' #抓取订单服务性能指标数据任务,一个job下可以配置多个抓紧的targets,比如订单服务多个实例机器
  5. scrape_interval: 10s #每10s抓紧一次
  6. metrics_path: '/actuator/prometheus' #抓取的数据url
  7. static_configs:
  8. - targets: ['192.168.124.8:5024'] #抓取的服务器地址,可以填写多个,注意修改成自己的ip和web端口
  9. labels:
  10. application: 'test-service-label' #抓取任务标签
  11. - job_name: 'prometheus' #抓取prometheus自身性能指标数据任务
  12. scrape_interval: 5s
  13. static_configs:
  14. - targets: ['localhost:9090'] # prometheus 的监控地址

2.启动prometheus

  1. # 切换到docker-monitor目录
  2. cd docker-monitor
  3. # 启动docker-compose
  4. docker-compose up -d

访问 prometheus 管理界面

prometheus 管理界面

页面如下所示

image.png

切换至status -> target

image.png

具体的页面如下

image.png
可以看出,在 prometheus.yml 中配置的两个任务,其中,监控web应用的任务,失败,state = DOWN,需要在Web服务中,添加相应的依赖,使其和prometheus整合。

修改pom.xml
  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-actuator</artifactId>
  4. </dependency>
  5. <!-- prometheus整合依赖-->
  6. <dependency>
  7. <groupId>io.micrometer</groupId>
  8. <artifactId>micrometer-registry-prometheus</artifactId>
  9. </dependency>

修改application.yml
  1. management:
  2. endpoints:
  3. promethus:
  4. enable: true
  5. web:
  6. exposure:
  7. include: '*'

修改完成之后,重启web应用,重新访问 prometheus界面,可以看到任务已经成功

image.png
访问 http://192.168.124.8:5024/actuator/prometheus 可以看到Web应用对外暴露的一些参数指标,如下所示
image.png
例如 jvm_memory_committed_bytes{area="heap",id="PS Eden Space",} 3.63331584E8 标识伊甸园的大小

还可在首页,输入对应的指标前缀,点击Execute,查询出所有该指标

image.png

并绘制相应的图标

image.png


Grafanna 部署

使用Docker部署Grafanna

修改docker-compose.yml

  1. version: "3"
  2. services:
  3. prometheus:
  4. image: prom/prometheus:v2.4.3
  5. container_name: 'prometheus'
  6. volumes:
  7. - ./prometheus/:/etc/prometheus/ #映射prometheus的配置文件
  8. - /etc/localtime:/etc/localtime:ro #同步容器与宿主机的时间,这个非常重要,如果时间不一致,会导致prometheus抓不到数据
  9. ports:
  10. - '9090:9090'
  11. grafana:
  12. image: grafana/grafana:5.2.4
  13. container_name: 'grafana'
  14. ports:
  15. - '3000:3000'
  16. volumes:
  17. - ./grafana/config/grafana.ini:/etc/grafana/grafana.ini #grafana报警邮件配置
  18. - ./grafana/provisioning/:/etc/grafana/provisioning/ #配置grafana的prometheus数据源
  19. - /etc/localtime:/etc/localtime:ro
  20. env_file:
  21. - ./grafana/config.monitoring #grafana登录配置
  22. depends_on:
  23. - prometheus #grafana需要在prometheus之后启动

新建grafanna目录,在其下创建 config.monitoring 文件

  1. # 设置登录的密码
  2. GF_SECURITY_ADMIN_PASSWORD=password
  3. # 设置不能注册
  4. GF_USERS_ALLOW_SIGN_UP=false

在grafanna 目录下,新建 config 目录,在 config 目录下,新建 grafanna.ini 文件

  1. ################################### SMTP / Emailing ##########################
  2. # 配置邮件服务器
  3. [smtp]
  4. enabled = true
  5. host = smtp.exmail.qq.com:465
  6. user = support
  7. password =
  8. from_address = support
  9. from_name = support

在grafanna 目录下,新建 provisioning/datasources 目录,在这个目录下,新建datasource.yml ,其中的内容如下

  1. # config file version
  2. apiVersion: 1
  3. deleteDatasources: #如果之前存在name为Prometheus,orgId为1的数据源先删除
  4. - name: Prometheus
  5. orgId: 1
  6. datasources: #配置Prometheus的数据源
  7. - name: Prometheus
  8. type: prometheus
  9. access: proxy
  10. orgId: 1
  11. url: http://prometheus:9090 #在相同的docker compose下,可以直接用prometheus服务名直接访问
  12. basicAuth: false
  13. isDefault: true
  14. version: 1
  15. editable: true

启动Grafanna

  1. # 切换到docker-compose.yml的所在目录
  2. cd docker-monitor
  3. # 启动
  4. docker-compose up -d

访问 Grafanna 的管理界面

http://localhost:3000/ 输入用户名(admin)和密码(在config.monitoring中配置的密码,这里为password)
image.png

登录之后的首页

image.png

导入监控json,监测web应用

image.png
选择如下附件中的json,选择 prometheus,点击import导入即可
image.png

web-dashboard.json

导入之后即可查看到当前web应用的一些运行状态
image.png

编写一个报警策略,发送邮件通知

点击Errors-> Edit
image.png
进入到如下的界面
image.png
新增报警渠道
image.png
image.png
修改如下的监控配置
image.png
配置发送给谁,及Message
image.png
报警的提示如下
image.png

至此,Grafanna的基本使用就结束了

下面介绍Grafanna如何监控MySQL 以及 Redis