# Prometheus（停止维护）
#### 插件简介
Prometheus是一套开源的系统监控报警框架。它启发于Google的borgmon监控系统，由工作在SoundCloud的Google前员工在2012年创建，作为社区开源项目进行开发，并于2015年正式发布。2016年，Prometheus正式加入Cloud Native Computing Foundation，成为受欢迎度仅次于Kubernetes的项目。
在云容器引擎CCE中，支持以插件的方式快捷安装Prometheus。
插件官网：<https://prometheus.io/>
开源社区地址：<https://github.com/prometheus/prometheus>
#### 约束与限制
CCE提供的Prometheus插件仅支持1.21及以下版本的集群。1.23及以上集群请使用[云原生监控插件](https://support.huaweicloud.com/usermanual-cce/cce_10_0406.html)替代。
#### 插件特点
作为新一代的监控框架，Prometheus具有以下特点：
- 强大的多维度数据模型：
  1. 时间序列数据通过metric名和键值对来区分。
  
  2. 所有的metrics都可以设置任意的多维标签。
  
  3. 数据模型更随意，不需要刻意设置为以点分隔的字符串。
  
  4. 可以对数据模型进行聚合，切割和切片操作。
  
  5. 支持双精度浮点类型，标签可以设为全unicode。
   

- 灵活而强大的查询语句（PromQL）：在同一个查询语句，可以对多个metrics进行乘法、加法、连接、取分数位等操作。
- 易于管理：Prometheus server是一个单独的二进制文件，可直接在本地工作，不依赖于分布式存储。
- 高效：平均每个采样点仅占 3.5 bytes，且一个Prometheus server可以处理数百万的metrics。
- 使用pull模式采集时间序列数据，这样不仅有利于本机测试而且可以避免有问题的服务器推送坏的metrics。
- 可以采用push gateway的方式把时间序列数据推送至Prometheus server端。
- 可以通过服务发现或者静态配置去获取监控的targets。
- 有多种可视化图形界面。
- 易于伸缩。
 
#### 安装插件
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
2. 单击左侧导航栏的"插件中心"，在右侧找到**Prometheus**，单击"安装"。
3. 在"规格配置"步骤中，配置以下参数： 
   表1Prometheus配置参数说明 
   | 参数       | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   |:---|:---|
   | 插件规格   | 根据业务需求，选择插件的规格，包含如下选项： - 演示规格（100容器以内）：适用于体验和功能演示环境，该规模下prometheus占用资源较少，但处理能力有限。建议在集群内容器数目不超过100时使用。  - 小规格（2000容器以内）：建议在集群中的容器数目不超过2000时使用。  - 中规格（5000容器以内）：建议在集群中的容器数目不超过5000时使用。  - 大规格（超过5000容器）：建议集群中容器数目超过5000时使用此规格。   |
   | 实例数        | 选择上方插件规格后，显示插件中的实例数，此处仅作显示。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   | 容器       | 选择插件规格后，显示插件容器的CPU和内存配额，此处仅作显示。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   | 数据保留期 | 自定义监控数据需要保留的天数，默认为15天。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   | 存储       | 支持云硬盘作为存储，按照界面提示配置如下参数： - 可用区：请根据业务需要进行选择。可用区是在同一区域下，电力、网络隔离的物理区域，可用区之间内网互通，不同可用区之间物理隔离。  - 子类型：支持普通IO、高IO和超高IO三种类型。  - 容量：请根据业务需要输入存储容量，默认10G。   说明： 若命名空间monitoring下已存在pvc，将使用此存储作为存储源。                                                                  |
      
   
   
4. 单击"安装"。安装完成后，插件会在集群中部署以下实例。 
   - prometheus-operator：根据自定义资源（Custom Resource Definition / CRDs）来部署和管理Prometheus Server，同时监控这些自定义资源事件的变化来做相应的处理，是整个系统的控制中心。
   
   - prometheus（Server）：Operator根据自定义资源Prometheus类型中定义的内容而部署的Prometheus Server集群，这些自定义资源可以看作是用来管理Prometheus Server集群的 StatefulSets 资源。
   
   - prometheus-kube-state-metrics：将Prometheus的metrics数据格式转换成K8s API接口能识别的格式。
   
   - custom-metrics-apiserver：将自定义指标聚合到原生的kubernetes apiserver。
   
   - prometheus-node-exporter：每个节点上均有部署，收集Node级别的监控数据。
   
   - grafana：可视化浏览普罗监控数据。
   
   
   
   
 
 #### 通过Metrics API提供资源指标
容器和节点的资源指标，如CPU、内存使用量，可通过Kubernetes的Metrics API获得。这些指标可以直接被用户访问，比如用kubectl top命令，也可以被HPA或者CustomedHPA使用，根据资源使用率使负载弹性伸缩。
插件可为Kubernetes提供Metrics API，但默认未开启，若要将其开启，需要创建以下APIService对象：
```
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
  labels:
    app: custom-metrics-apiserver
    release: cceaddon-prometheus
  name: v1beta1.metrics.k8s.io
spec:
  group: metrics.k8s.io
  groupPriorityMinimum: 100
  insecureSkipTLSVerify: true
  service:
    name: custom-metrics-apiserver
    namespace: monitoring
    port: 443
  version: v1beta1
  versionPriority: 100
```
可以将该对象保存为文件，命名为metrics-apiservice.yaml，然后执行以下命令：
```
kubectl create -f metrics-apiservice.yaml
```
执行kubectl top pod -n monitoring命令，若显示如下，则表示Metrics API能正常访问：
```
# kubectl top pod -n monitoring
NAME                                                      CPU(cores)   MEMORY(bytes)
......
custom-metrics-apiserver-d4f556ff9-l2j2m                  38m          44Mi
......
```
![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/notice_3.0-zh-cn.png)
卸载插件时，需要执行以下kubectl命令，同时删除APIService对象，否则残留的APIService资源将导致metrics-server插件安装失败。
```
kubectl delete APIService v1beta1.metrics.k8s.io
```
#### 参考资源
- Prometheus概念及详细配置请参阅[Prometheus 官方文档](https://prometheus.io/docs/introduction/overview/)
- Node exporter安装请参考[node_exporter github 仓库](https://github.com/prometheus/node_exporter)
 
#### 版本记录
表2Prometheus插件版本记录 
| 插件版本       | 支持的集群版本                                                                                                                                   | 更新特性                                                                                                                                            | 社区版本                                                                      |
|:---|:---|:---|:---|
| 2.23.32    | v1.17 v1.19 v1.21    | -                                                                                                                                                | [2.10.0](https://github.com/prometheus/prometheus/releases/tag/v2.10.0)  |
| 2.23.31  | v1.15                                                                                                                                   | - 适配CCE v1.15集群        | [2.10.0](https://github.com/prometheus/prometheus/releases/tag/v2.10.0)   |
| 2.23.30  | v1.17 v1.19 v1.21  | - 适配CCE v1.21集群            | [2.10.0](https://github.com/prometheus/prometheus/releases/tag/v2.10.0)    |
| 2.21.14   | v1.17 v1.19 v1.21 | - 适配CCE v1.21集群    | [2.10.0](https://github.com/prometheus/prometheus/releases/tag/v2.10.0)   |
| 2.21.12 | v1.15                                                                                                                                    | - 适配CCE v1.15集群            | [2.10.0](https://github.com/prometheus/prometheus/releases/tag/v2.10.0) |
| 2.21.11   | v1.17 v1.19                                                                   | - 适配CCE v1.19集群             | [2.10.0](https://github.com/prometheus/prometheus/releases/tag/v2.10.0)  |
| 1.15.1    | v1.15 v1.17                                                                  | - Prometheus是一个监控系统和时间序列库   | [2.10.0](https://github.com/prometheus/prometheus/releases/tag/v2.10.0)   |
   
