Kubernetes部署Prometheus
系统环境
- Kubernetes 版本: 1.20.0
- Docker 版本: 19.03.13
- 操作系统: CentOS 7.6
Prometheus 版本: 2.36.0
参考地址
Prometheus 简介
Prometheus 是什么
Prometheus 是在 SoundCloud 上构建并开源的系统监视和警报工具包。自 2012 年成立以来,许多公司和组织都采用 Prometheus,该项目拥有非常活跃的开发人员和用户社区。不过它现在已经成为一个独立的开源项目,并且独立于任何公司进行维护。为了强调这一点并澄清项目的治理结构,Prometheus 于 2016 年加入了云原生计算基金会,成为继 Kubernetes 之后的第二个毕业项目
Prometheus 特征
Prometheus 主要特征如下:
- 多维数据模型(时序列数据由 metric 名和一组 key/value 组成)
- 提供 PromQL,这是一种灵活的查询语言,可以利用多维数据完成复杂的查询
- 不依赖 分布式存储,支持服务器 本地存储
- 基于 HTTP 的 Pull 方式采集时间序列数据
- 通过 PushGateway 可以支持 Push 模式推送 时间序列
- 可以通过 动态服务发现 或 静态配置 等方式发现目标对象
- 多种可视化和仪表盘支持
Prometheus 组成
Prometheus 生态系统包含多个组件,其中许多是可选的:
- Prometheus 主服务器: 用于抓取指标、存储时间序列数据
- Client libraries: 用于检测应用程序代码
- PushGateway: 支持短期工作的推送网关
- Alertmanager: 用于处理报警的组件
- 支持 HAProxy、StatsD、Graphite 等服务的特殊用途出口商
- …(其它工具)
Prometheus架构
Prometheus 直接或者通过中间件 PushGateway 中获取指标数据,它将所有收集到的指标样本存储在本地,并对这些数据按照一定规则进行运算,以汇总和记录现有的数据组的新的时间序列或者生成报警规则。而 Grafana 或者其它 API 使用者可以通过这些收集的指标数据进行可视化展示
Promethues适合场景
什么时候适合使用 Prometheus
Prometheus 非常适合记录任何纯数字时间序列。它既适合以机器为中心的监控,也适合监控高度动态的面向服务的体系结构。在微服务世界中,其对多维数据收集和查询的支持是一种特别的优势。 Prometheus 是为可靠性而设计的,在出现故障时,你可以使用该系统快速诊断问题。每个 Prometheus 服务器都是独立的,而不依赖于网络存储或其他远程服务。当基础结构的其他部分损坏时单独依赖它就行,而且不需要设置大量的基础设施来使用它
什么时候不适合使用 Prometheus
Prometheus 注重可靠性。可以随时查看有关系统的可用统计信息,集成在出现故障的情况下也是如此。如果需要保证 100% 的数据准确性(例如按照请求数进行收费)则 Prometheus 并不是一个很好的选择,因为收集的数据可能不够详细和完整
k8s部署prometheus
本文通过两种方式部署,分别为Deployment和StatefulSet,具体选择请根据业务实际情况决定
部署prometheus RBAC
创建 Prometheus 部署 Kubernetes 所需的 RBAC 资源文件 prometheus-rbac.yam
部署prometheus存储
本文采用nfs动态生成pvc存储
创建prometheus配置
prometheus配置文件是经常改动的文件,推荐将该配置文件内容存储到kubernetes的 ConfigMap中,方便进行更改配置内容,创建 Prometheus 配置文件 prometheus-config.yaml
部署prometheus
Deployment部署
创建 Prometheus 部署文件 prometheus-deploy.yaml
部署的 Deployment 资源文件中的 containers 部分配置了两个容器,分别是:
- prometheus: Prometheus 容器是主容器,用于运行 Prometheus 进程
- configmap-reload: 用于监听指定的 ConfigMap 文件中的内容,如果内容发生更改,则执行 webhook url 请求,因为 Prometheus 支持通过接口重新加载配置文件,所以这里使用这个容器提供的机制来完成 Prometheus ConfigMap 配置文件内容一有更改,就执行 Prometheus 的 /-/reload 接口,进行更新配置操作
上面资源文件中 Prometheus 参数说明:
- –web.enable-lifecycle: 启用 Prometheus 用于重新加载配置的 /-/reload 接口
- –config.file: 指定 Prometheus 配置文件所在地址,这个地址是相对于容器内部而言的
- –storage.tsdb.path: 指定 Prometheus 数据存储目录地址,这个地址是相对于容器而言的
- –storage.tsdb.retention.time: 指定删除旧数据的时间,默认为 15d
- –web.console.libraries: 指定控制台组件依赖的存储路径
- –web.console.templates: 指定控制台模板的存储路径
StatefulSet部署
创建Prometheus部署文件 prometheus-statefulset.yaml
访问prometheus UI界面
部署 Prometheus 中设置其 Service 模式为 NodePort 模式,端口号为 30089,可以使用 NodePort 的端口访问 Prometheus,输入IP:30089 访问Prometheus页面
上述web页面就是prometheus提供的看板,可以通过页面很方便的执行PromQL查询 Prometheus中的时间序列数据,还能够通过该页面查看Prometheus配置内容与告警规则