- 应用变动相当频繁的场景
- cncf - 云原生场景
- 核心组件
prometheus server
、alertmanager
、exporter
—- 不支持prometheus指标格式的应用web UI
、discover
、pushgateway
- prometheus的服务发现机制
- 方法1:基于文件
- 方法2:基于主机dns
- 方法3:基于(微服务场景)服务注册中心
- 方法4:基于k8s的服务发现
基本概念
```bash 1.组件解析: exporter - 将宿主机的数据格式转换成 prometheus的监控数据格式 adapter - 适配器,收到prometheus的监控数据,根据实际的监控指标来做一些自动化操作
2.数据指标 metrics 简单样式:key value 常见样式:key{label 表达式 value,label2=xxx} value 拓展样式:{“name“ — key表达式}
3.指标的获取 任务job - 采集一系列的metrics
- 有可能是多台主机上的数据
实例instance - 每台主机上的数据
4.prometheus采集的数据如何使用 实时数据 - 瞬时数据 - 时间点采集到的数据 范围数据 - 区间数据 - 时间范围采集到的数据集合
5.数据的应用 分析 统计 聚合 简单运算 策略 告警 自动化措施
<a name="LCpUq"></a>
### 环境搭建
```bash
1.监控配置 Prometheus server
global 监控的全局配置,数据的周期性采集
alertmanager 告警机制
rules 告警的规则
scrape_configs 监控的目标 - 主机级别
job -- 可以简单的理解为 主机组
instance -- 可以简单理解为一个目标主机或应用服务
2.可视化工具 - grafana
3.采集工具 - exporter
- prometheus提供的
- 第三方提供的exporter
promQL基础
学习promQL的捷径:
1 定制自己业务场景的metrics
2 根据别人的promQL语句,学习promeQL的基本运算方法
加减乘除
最大值、最小值、topn值、变化率等
1.metrics
瞬时值 - 时间点
最新值 metrics{label}
偏移值 metrics{label} offset 3m
范围值 metrics{label}[5m]
问题:当前时间 之前 5-7分钟之内的数据metrics{label} [2m] offset 5m
2.运算 - 定位:在获取到的数据集中进行简单的二元运算或者聚合
①二元运算 + - * / %
②聚合
普通方法:max min count top
专用函数:进阶
比率、变化率、百分位等
③逻辑 and or unless
定制专属metrics
方式1:开发的时候,自己定制暴露的数据格式
方法2:在prometheus的rules中定制分析的指标 因为手工分析指标的表达式太长,所以要固化下来
granfa图形绘制
流程:
1 定制业务的专属metrics
2 根据业务需求定制监控指标
metrics表达式
情况1:
简单表达式,直接进入到3
情况2:
复杂表达式,直接固化 - 监控规则
3 开始绘图
3.1 选择要绘制的图类型
3.2 拷贝可用的metrics表达式
3.3 图形修改
- 图例、标题、颜色
3.4 dashboard保存
- 图形的保存、dashboard保存
告警实践
问题1:我们在绘制图形的时候,有的表达式太复杂,写起来不方便
告警规则
- 生成专用的指标
作用:
1 快速输入
2 告警规则的表达精简
告警环境
告警逻辑
规则 - 表达式 - 阈值 - alertmanager - 插件 - 通知
告警细节:
告警去重
- 标签
告警分组
- 标签
告警路由
- 告警通知人
告警抑制
- 避免重复性告警
- 避免依赖告警
告警演示 - 邮箱
alertmanager定制
1 邮箱授权码
2 alertmanager软件安装
配置、服务文件
3 alertmanager 和 prometheus集成
告警模板:
问题:默认的alertmanager内容不是我们想要的
实践:
1 alertmanager模板配置
2 alertmanager模板导入和引用
3 prometheus传递模板用到的值
如何把docker应用迁移到k8s里面
实践1 - 纯原生的资源清单文件创建prometheus环境
实践2 - 借助于operator创建prometheus新环境
operator
1 定制的管理体系
CRD、controller
2 定制资源清单文件