Prometheus “活学活用”,大牛总结了一套避坑指南( 二 )


以 Pod 方式运行在集群内是不需要证书的(In- 模式) , 但集群外需要声明 token之类的证书 , 并替换 , 即使用Proxy采集 , 以 采集为例 , Job 配置为:
需要提前生成 , 这个参考官方文档即可 。记得解码 。
对于来说 , 可以转换为/api/v1/nodes/${1}/proxy// , 代表 proxy 到  , 如果网络能通 , 其实也可以直接把的10255作为  , 可以直接写为:
${1}:10255// , 代表直接请求 , 规模大的时候还减轻了的压力 , 即服务发现使用  , 采集不走。
因为是暴露主机端口 , 配置相对简单 , 如果是 kube-state- 这种  , 以形式暴露 , 写法应该是:
对于类型 , 需要转换为/api/v1//${1}//${2}:${3}/proxy/ , 需要替换 、svc 名称端口等 , 这里的写法只适合接口为/的 , 如果你的不是/接口 , 需要替换这个路径 。或者像我们一样统一约束都使用这个地址 。
这里的来源就是部署时写的那个  , 大多数文章中只提到.io/: 'true' , 但也可以定义端口、路径、协议 。以方便在采集时做替换处理 。
其他的一些如 是为了保留原始信息 , 方便做查询时的筛选条件 。
如果是多集群 , 同样的配置多写几遍就可以了 , 一般一个集群可以配置三类job:
GPU 指标的获取
-smi可以查看机器上的 GPU 资源 , 而 其实暴露了来表示容器使用 GPU 情况 , 
如果要更详细的 GPU 数据 , 可以安装dcgm  , 不过K8S 1.13 才能支持 。
更改的显示时区
为避免时区混乱 , 在所有组件中专门使用 Unix Time 和 Utc 进行显示 。不支持在配置文件中设置时区 , 也不能读取本机 /etc/ 时区 。
其实这个限制是不影响使用的:
2.16 版本:
修改源码更改的时区问题:
关于的讨论 , 可以看这个issue 。
issue:
如何采集 LB 后面的 RS 的
假如你有一个负载均衡 LB , 但网络上只能访问到 LB 本身 , 访问不到后面的 RS , 应该如何采集 RS 暴露的 ?
版本的选择
当前最新版本为 2.16 ,  还在不断迭代 , 因此尽量用最新版 , 1.X版本就不用考虑了 。
2.16 版本上有一套实验 UI , 可以查看 TSDB 的状态 , 包括Top 10的 Label、 。
大内存问题
随着规模变大 ,  需要的 CPU 和内存都会升高 , 内存一般先达到瓶颈 , 这个时候要么加内存 , 要么集群分片减少单机指标 。这里我们先讨论单机版的内存问题 。
原因:
我的指标需要多少内存:

Prometheus “活学活用”,大牛总结了一套避坑指南

文章插图
计算公式:
以我们的一个为例 , 本地只保留 2 小时数据 , 95 万  , 大概占用的内存如下:
有什么优化方案:
内存占用分析:
相关 issue:
容量规划
容量规划除了上边说的内存 , 还有磁盘存储规划 , 这和你的的架构方案有关 。
每2小时将已缓冲在内存中的数据压缩到磁盘上的块中 。包括、、、 , 这些占用了一部分存储空间 。一般情况下 , 中存储的每一个样本大概占用1-2字节大小(1.7Byte) 。可以通过来查看每个样本平均占用多少空间: