Prometheus是一个全能选手 原生支持容器监控 也支持传统应用程序 它具备所有监控系统都具备的流程 数据采集 --》数据处理 --》数据存储 --》数据展示 --》警告
prometheus中文名字普罗米修斯最初在soundCloud上构建的监控系统,自2012年称为社区开源项目 用户非常活跃的开发人员和用户社区2016年加入cncf称为继kubernetes之后的第二个托管项目 官方地址https://prometheus.io/
Prometheus 特点展开目录
多维数据模型:由度量名称和键值对标识的时间序列数据 PromSQL: — 种灵活的查询语言,可以利用多维数据完成复杂的查询 不依赖分布式存储,单个服务器节点可直接工作 基于 HTTP 的 pull 方式釆集时间序列数据 推送时间序列数据通过 PushGateway 组件支持 通过服务发现或静态配罝发现目标 多种图形模式及仪表盘支持 (grafana)
Prometheus的数据模型
Prometheus 将所有数据存储为时间序列,具有相同度量名称以及标签属于同个指标,也就是说 Prometheus 从数据源拿到数据之后都会存到内置的 TSDB 中,这里存储的就是时间序列数据,它存储的数据会有一个度量名称,譬如你现在监控一个 nginx,首先你要给他起个名字,这个名称也就是度量名,还会有 N 个标签,你可以理解名称为表名,标签为字段,所以,每个时间序列都由度量标准名称和一组键值对 (也称为标签) 唯一标识。 时间序列的格式是这样的,
<metricename> {<labelname>=<labelvalue>,...}
metrice name 指的就是度量标准名称,label name 也就是标签名,这个标签可以有多个,例子
jvm_memory_max_bytes{area="heap",id="Eden Space",}
这个度量名称为 jvm_memory_max_bytes,后面是两个标签,和他们各对应的值,当然你还可以继续指定标签,你指定的标签越多查询的维度就越多。
指标类型
类型名称 说明 Counter 递增计数器,适合收集接口请求次数 Guage 可以任意变化的数值,适用 CPU 使用率 Histogram 对一段时间内数据进行采集,并对有所数值求和于统计数量 Summary 与 Histogram 类型类似
任务和实例
实例指的就是你可以抓取的目标target,这个会在 Prometheus 配置文件中体现,任务是具有相同目标的实例集合,可以理解为一个map这个map的值是string的key list类型的值 任务就是key 任务中的内容就是list
Prometheus 部署
使用docker来安装Prometheus 首先新建目录随便起名字比如叫aa 然后在这个新建的目录里创建一个yml类型的文件 文件名字随便起比如起am.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'
然后在aa目录下新增prometheus目录在里面创建prometheus配置文件prometheus.yml 然后内容写
global: #全局配置
scrape_interval: 15s #全局定时任务抓取性能数据间隔
scrape_configs: #抓取性能数据任务配置
- job_name: 'tulingmall-order' #抓取订单服务性能指标数据任务,一个job下可以配置多个抓紧的targets,比如订单服务多个实例机器
scrape_interval: 10s #每10s抓取一次
metrics_path: '/actuator/prometheus' #抓取的数据url 这里写死/actuator/prometheus就行
static_configs:
- targets: ['192.168.31.60:8844'] #抓取的服务器地址 这里写的是我项目的访问地址
labels:
application: 'tulingmall-order-label' #抓取任务标签
- job_name: 'prometheus' #抓取prometheus自身性能指标数据任务
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
项目中首先加入依赖
<!-- 开启springboot的应用监控 -->
<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>
在项目的配置文件中加入
management: #开启SpringBoot Admin的监控
endpoints:
promethus:
enable: true
web:
exposure:
include: '*'
endpoint:
health:
show-details: always
在aa目录下执行如下命令启动prometheus
docker-compose up -d
Grafana
Grafana是自动化监控工具的ui prometheus自带ui非常难看 所以引入Grafana当做ui界面
Grafana 部署 先用docker来安装下grafana,在上面的am.yml文件里加入grafana的安装配置
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之后启动
在aa目录下新增grafana目录,在里面创建文件config.monitoring,内容如下:
GF_SECURITY_ADMIN_PASSWORD=password #grafana管理界面的登录用户密码,用户名是admin
GF_USERS_ALLOW_SIGN_UP=false #grafana管理界面是否允许注册,默认不允许
在grafana目录下创建目录provisioning,在里面创建datasources目录,在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
在grafana目录下创建目录config,在里面创建文件grafana.ini,内容如下: 当触发警告时并且是邮件发送时就会使用下面配置的邮箱地址给管理人员发送邮件
#################################### SMTP / Emailing ##########################
# 配置邮件服务器
[smtp]
enabled = true
# 发件服务器
host = smtp.qq.com:465
# smtp账号
user = **************@qq.com
# smtp 授权码,授权码获取请参看课上视频演示
password = test123
# 发信邮箱
from_address = **************@qq.com
# 发信人
from_name = **************
用docker compose启动grafana,访问grafana页面:http://192.168.31.60:3000,用户名为admin,密码为password
监控mysql性能指标
1、下载mysql客户端的exporter镜像
docker pull prom/mysqld-exporter 2、启动监控的数据库连接,容器创建的时候需要指定
docker run -d -p 9104:9104 -e DATA_SOURCE_NAME=“root:password@(mysql服务器ip:3306)/databaseName” prom/mysqld-exporter
3、在prometheus.yml文件末尾追加如下配置:
- job_name: ‘mysql’ // 这就是任务
scrape_interval: 5s static_configs:
- targets: [‘192.168.50.60:9104’]// 这里就是实例
labels: instance: mysql
4、重新启动Prometheus镜像,查看Prometheus是否启动完成,访问:http://服务器ip:9090
docker-compose up --force-recreate -d
5、导入Prometheus模板,添加mysql-dashboard.json格式模板,更多模板下载地址:
https://grafana.com/grafana/dashboards https://github.com/percona/grafana-dashboards.git
监控Redis性能指标
1、下载redis客户端的exporter镜像
docker pull oliver006/redis_exporter
2、启动监控的数据库连接,容器创建的时候需要指定
docker run -d -p 9121:9121 oliver006/redis_exporter --redis.addr redis://redis连接IP:6379
3、在prometheus.yml文件末尾追加如下配置:
- job_name: ‘redis’
scrape_interval: 5s static_configs:
- targets: [‘192.168.50.60:9121’]
labels: instance: redis
4、重新启动Prometheus镜像,查看Prometheus是否启动完成,访问:http://服务器ip:9090
docker-compose up --force-recreate -d
5、导入Prometheus模板,添加redis-dashboard.json格式模板
|