Prometheus最佳实践

一、 埋点思路(上报什么数据

  1. 在线服务: RED 方法, Requests(请求量), Errors(错误量), Duration(耗时);
  2. 最好将原始指标暴露给 Prometheus,  比如不需要在进程中计算错误率,  上报总量和错误量两个 counter, 查询时用 PromQL 处理原始数据, 相除得到错误率

二、指标命名(如何定义指标)

指标命名的整体结构建议使用 name_unit_suffix , 指标名符合正则 [a-zA-Z*][a-zA-Z0-9_]\*

name:

  1. name 要做到望文生义, 类似变量名, 应具有良好的可读性. 如 http_requests_total, process_resident_memory_bytes, queue_size, queue_limit. ;
  2. 指标名称是全局的, 携带命名空间可以有效避免命名冲突. 如 process_xxx 表示进程指标, rpc_xxx 表示 RPC 指标, followsys_xxx 表示关注系统业务指标;
  3. 指标名称不要带环境名/应用名, 这些元信息适合用 label 承载, Prometheus 在抓取指标时自动附加, 不需要在埋点代码中定义;

unit:

  1. 指标名可以带上单位, 如 request_bytes_total , request_latency_seconds;
  2. 值总是使用基本单位, 如 秒/米/字节, 单位展示可读性的事情则交给 Grafana 等展示 UI 来处理。

suffix:

  1. counter 必须以_total 为后缀,OpenMetrics 规范定义;
  2. 信息类指标以_info 为后缀;
  3. 指标名称不要带 _sum _count _bucket 后缀,以免与 histogram/summary 类型生成的指标名混淆。

三、label命名(如何定义维度)  

label 对于多维监控非常有用,一个指标的基数是指标中所有 label 枚举值组合的笛卡尔乘积 (比如一个指标有三个label,每个label都有10个可能的值,最终的基数就是10*10*10 = 1000)。 一般一个指标一千的基数是合理的上限。一个进程的总基数是所有指标的基数之和, 一个进程一万总基数是合理的上限,因此:

  1. label 中不适合放 用户 ID/设备 ID/URL 参数/时间戳 等高基数的值. 单个 label 值不超过 128 个字符;

  2. 避免一个指标过多的 label 组合, 不必要的组合 label 可以拆解为多个指标, 以便降低指标基数, 提高该指标的查询性能. 

  3. Metrics 更关注系统级别的高效指标而不是单个请求级别, 不要在 Metrics 中放过多的细节 label, 单独 Metrics 无法解决所有的可观测性问题, 详细的信息应记录 Logs 和Trace中,或者使用ck,mysql等存储详细情况

四、查询性能

  1. Prometheus 查询性能与查询语句计算所命中的时间序列数量、样本数以及返回的数据大小 强相关. 正常小查询响应是毫秒级的. 界面展示的大查询(涉及时间序列超过 10k 以上的), 这些大查询需要用 recording_rule 定时计算好, 将查询所需的时间序列数降低;

  2. 展示单个信息或表格使用 instantQuery 即时查询, 只返回最新时刻计算的数据即可. 展示时间图形才需要使用 rangeQuery 范围查询, 返回时间区间内计算的所有数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值