文章目录
相同技术栈的路人甲
一、聊聊监控
1、为什么要监控?
- 对系统不间断实时监控
- 实时反馈系统当前状态
- 保证业务持续性运行
2、怎么来监控
- 监控工具 free df top …
- 监控系统 Zabbix --> Nightingale —> Prometheus
3、要监控什么
监控项 | 内容 |
---|---|
硬件 | 温度 硬件故障等 |
系统 | CPU 内存 硬盘 网卡流量 TCP状态 进程数 |
应用 | Nginx Tomcat PHP MySQL Redis |
日志 | 系统 服务 访问 错误 |
安全 | WAF 敏感文件 |
API | 可用性 接口请求 响应时间 |
业务 | 电商网站,每分钟产生多少订单 注册多少用户 多少活跃用户 推广活动效果 |
流量 | 根据流量获取用户相关信息,用户地理位置、某页面访问状况、页面停留时间 |
4、Promethus监控范畴
- 熟悉被监控对象,思考这个问题,它的类是什么?想好了给我留言
- 整理监控指标
目前行业内提供的数据远远超出你对机器、内核的想象,走best practice 就好;
业务的话,你就多参与业务内容 必须深入进去才能贴切的落地,SRE路线?走走就知道了。
- 告警阈值定义
个人认为这个是最有意思的点,多看看统计学的思想 。有了统计的美 ,落地才显得更有意义,不是么
呵呵,只有思想还不行,看看线性代数是怎么给你高效的解决的,算法?
- 故障处理流程
作为一名优秀的SRE,只走DevOps还不够优秀
有了告警 让后呢? 看告警处理故障呗,流程和规范是不是更让别人省心呢
二、Prometheus概述
1、是什么
【官网】【中文文档】【prometheus-book】【github】
- 多维数据模型:由度量名称和键值对标识的时间序列数据
- PromQL: 一种灵活的查询语言,可以利用多维数据完成复杂的查询
- 不依赖分布式存储,单个服务器节点可直接工作
- 基于HTTP的pull方式采集时间序列数据
- 推送时间序列数据通过PushGateway组件支持
- 通过服务发现或静态配置发现目标(尽量不要用static,不要问我为什么)
- 多种图形模式及仪表盘支持(仪表盘的标准,军刀—grafana)
2、组成与架构
- Prometheus Server: 收集指标和存储时间序列数据,并提供查询接口
- PushGateway: 短期存储指标数据。主要用于临时性的任务,后期实践起来很有用
- Exporters: 采集监控指标并暴露metrics
- Alertmanager: 告警,神器 — 多多品尝
- Web UI: 简单的Web控制台
3、监控指标数据模型
- 在 Prometheus 里一个数据点由 Metric(metric + labelsets) + timestamp + value 组成。
数据点,具体是在 Prometheus pull 采集的数据后处理并存储后形成的。所以 timestamp 时间戳是针对于 pull 后的时间,并不是在客户端采集时候的的时间戳。
# TYPE http_requests_total counter
|--------------------------- Metric ----------------------------|-timestamp -|-value-|
|--- metric name --|------------------ labelsets ---------------|
http_requests_total{
code="200",handler="prometheus",method="get"} 721
# labelsets 代表了这个 metric name 下的一个维度,可以有多个维度,后期方便做聚合操作
- Prometheus将所有数据存储为时间序列
- 每个时间序列都由度量标准名称和一组键值对(标签)唯一标识;具有相同度量名称以及标签属于同一个指标
<metric name>{
<label name>=<label value>,...}
eg: api_http_requests_total{
method="POST",handler="/messages"}
- time-series 中的每一行数据称为一个 sample
指标(metric) :metric name 和描述当前样本特征的 labelset
时间戳(timestamp):一个精确到毫秒的时间戳。(截图中因为获取的是即时指,没有打印时间戳)
样本值(value):一个 float64 的浮点型数据表示当前样本的值。
4、监控指标数据类型
- Counter: 递增的计数器。例如 rpc 请求总数。http请求总数
- Gauge: 可以任意变化的数值。例如内存/cup占用,goroutine数量等。
- Histogram: 对一段时间范围内数据进行采样,并对所有数值求和与统计数量,
反应样本的随机正态分布数据,例如rpc请求延迟分布。
prometheus的直方图是累计的。原因:想象一下,如果 histogram 类型的指标中加入了额外的标签,或者划分了更多的 bucket,那么样本数据的分析就会变得越来越复杂。如果 histogram 是累积的,在抓取指标时就可以根据需要丢弃某些 bucket,这样可以在降低 Prometheus 维护成本的同时,还可以粗略计算样本值的分位数。通过这种方法,用户不需要修改应用代码,便可以动态减少抓取到的样本数量。
- Summary: 根据样本统计百分位,分位数由客户端计算
Counter 以及 Gauge 都是对收集的样本 value 采用 atomic 方式操作
Histogram 以及 Summary 则加入了统计操作相关算法