1. 简介
Prometheus: (简称Prom)是由SoundCloud开发的开源监控报警系统。是大名鼎鼎的CNCF云原生基金会下的第二大开源项目。具有如下特点:
- 使用Go语言开发
- 内置时序数据库
- 性能足够支撑上万台规模的集群
- 多维度数据模型,灵活的查询语言
- 通过HTTP的pull方式采集时序数据
- 可以通过中间网关进行时序列数据推送
- 服务发现或者静态配置来发现被监控对象
- 支持多种多样的图表和界面展示,比如Grafana等
架构图
工作流程
- Prometheus Server通过http协议周期性的pull被监控对象的metrics,然后保存在本地的TSDB(时序数据库)中。
- Prometheus Server判断监控数据是否触发告警,如果触发,将告警发送给Alertmanager。
- Alertmanager处理告警,并通过邮件等方式进行通知。
- Prometheus监控数据也可以通过Grafana等可视化工具进行展示。
2. Prometheus环境搭建
主要组件(括号内表示搭建环境使用的docker镜像)
- Prometheus Server( prom/prometheus:v2.7.2)
- 被监控对象exporter(prom/node-exporter,输出被监控对象信息的http接口,我们叫做exporter)
- Alertmanager(prom/alertmanager,告警系统)
- Grafana (grafana/grafana, 数据可视化工具)
2.1 安装Prometheus Server
主要涉及到两个配置文件:
- prometheus.yml #主配置文件
- rules.yml #告警规则配置文件
主配置文件:prometheus.yml
global:
scrape_interval: 15s #默认采集监控数据时间间隔
external_labels:
monitor: 'codelab-monitor'
rule_files:
- /etc/prometheus/rules.yml #告警规则文件位置,后面Alertmanager章节会具体介绍
scrape_configs: #监控对象设置
- job_name: prometheus #任务名称
scrape_interval: 5s #每隔5s获取一次监控数据
static_configs: #监控对象地址
- targets: ['192.168.71.92:9090'] #prometheus将自己加入到监控对象中
- targets: ['192.168.71.92:9100'] # 监控node节点,如cpu、内存使用和磁盘等
labels:
group: 'client-node-exporter'
alerting: #告警管理器设置,后面Alertmanager章节会具体介绍
alertmanagers:
- static_configs:
- targets: ['192.168.71.92:9093']
** 告警规则配置文件**
groups:
- name: cqh
rules:
- alert: cqh测试
expr: dead_lift > 150
for: 1m
labels:
status: warning
annotations:
summary: "{{$labels.instance}}:硬拉超标! lightweight bady!!!"
description: "{{$labels.instance}}: 硬拉超标!! lightweight baby!!!"
启动prometheus服务
docker run --name=prometheus -d \ #设置容器启动名称
-p 9090:9090 \ #暴露prometheus服务端口
-v 本地绝对路径/prometheus.yml:/etc/prometheus/prometheus.yml \ #挂载本地prometheus.yaml
-v 本地绝对路径/rules.yml:/etc/prometheus/rules.yml \ #挂载本地rules.yml
prom/prometheus:v2.7.2 \ #prometheus容器镜像
--config.file=/etc/prometheus/prometheus.yml \ #设置prometheus服务使用的配置文件
--web.enable-lifecycle #用于prometheus热加载配置文件,方式:curl -X POST http://localhost:9090/-/reload