Prometheus
插件简介
Prometheus是一套开源的系统监控报警框架。它启发于Google的borgmon监控系统,由工作在SoundCloud的Google前员工在2012年创建,作为社区开源项目进行开发,并于2015年正式发布。2016年,Prometheus正式加入Cloud Native Computing Foundation,成为受欢迎度仅次于Kubernetes的项目。
在云容器引擎CCE中,支持以插件的方式快捷安装Prometheus。
约束与限制
CCE提供的Prometheus插件仅支持1.21及以下版本的集群。
插件特点
作为新一代的监控框架,Prometheus具有以下特点:
- 强大的多维度数据模型:
- 时间序列数据通过metric名和键值对来区分。
- 所有的metrics都可以设置任意的多维标签。
- 数据模型更随意,不需要刻意设置为以点分隔的字符串。
- 可以对数据模型进行聚合,切割和切片操作。
- 支持双精度浮点类型,标签可以设为全unicode。
- 灵活而强大的查询语句(PromQL):在同一个查询语句,可以对多个metrics进行乘法、加法、连接、取分数位等操作。
- 易于管理:Prometheus server是一个单独的二进制文件,可直接在本地工作,不依赖于分布式存储。
- 高效:平均每个采样点仅占 3.5 bytes,且一个Prometheus server可以处理数百万的metrics。
- 使用pull模式采集时间序列数据,这样不仅有利于本机测试而且可以避免有问题的服务器推送坏的metrics。
- 可以采用push gateway的方式把时间序列数据推送至Prometheus server端。
- 可以通过服务发现或者静态配置去获取监控的targets。
- 有多种可视化图形界面。
- 易于伸缩。
安装插件
- 登录CCE控制台,单击集群名称进入集群,单击左侧导航栏的“插件中心”,在右侧找到Prometheus,单击“安装”。
- 在“规格配置”步骤中,配置以下参数:
表1 Prometheus配置参数说明 参数
参数说明
插件规格
根据业务需求,选择插件的规格,包含如下选项:
- 演示规格(100容器以内):适用于体验和功能演示环境,该规模下prometheus占用资源较少,但处理能力有限。建议在集群内容器数目不超过100时使用。
- 小规格(2000容器以内):建议在集群中的容器数目不超过2000时使用。
- 中规格(5000容器以内):建议在集群中的容器数目不超过5000时使用。
- 大规格(超过5000容器):建议集群中容器数目超过5000时使用此规格。
实例数
选择上方插件规格后,显示插件中的实例数,此处仅作显示。
容器
选择插件规格后,显示插件容器的CPU和内存配额,此处仅作显示。
数据保留期
自定义监控数据需要保留的天数,默认为15天。
存储
支持云硬盘作为存储,按照界面提示配置如下参数:
- 可用区:请根据业务需要进行选择。可用区是在同一区域下,电力、网络隔离的物理区域,可用区之间内网互通,不同可用区之间物理隔离。
- 子类型:支持普通IO、高IO和超高IO三种类型。
- 容量:请根据业务需要输入存储容量,默认10G。
说明:若命名空间monitoring下已存在pvc,将使用此存储作为存储源。
- 单击“安装”。安装完成后,插件会在集群中部署以下实例。
- 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 ......
卸载插件时,需要执行以下kubectl命令,同时删除APIService对象,否则残留的APIService资源将导致metrics-server插件安装失败。
kubectl delete APIService v1beta1.metrics.k8s.io
参考资源
- Prometheus概念及详细配置请参阅Prometheus 官方文档
- Node exporter安装请参考node_exporter github 仓库