做者陈凯烨,腾讯云前端开发工程师。负责 TKE 集群,弹性集群和云原生监控等模块控制台开发。前端
Prometheus 是一套开源的系统监控报警框架。2016 年,Prometheus 正式加入 Cloud Native Computing Foundation,成为受欢迎度仅次于 Kubernetes 的项目。node
2020年11月20日,腾讯云云原生 Prometheus 服务正式开始免费公测。针对容器集群监控场景,提供了一整套包括监控、采集、存储、告警、图表等能力的监控服务。经过独立部署与被监控对象解耦合,使得不受监控对象性能、稳定性、可靠性等因素的影响,托管模式使得用户无需部署运维 Prometheus 监控实例,解放了运维人力,而新推出的模板功能能够解决在多个集群之间粘贴复制配置的重复性工做问题,实现一键同步多个集群配置,使得整个流程更专业、更可靠。本文会详细介绍云原生监控服务的基本功能以及使用方式。git
腾讯云容器团队的云原生监控服务,产品目前已正式公测,欢迎读者试用(传送门:https://console.cloud.tencent.com/tke2/prometheus )。github
地域: 选择您但愿部署该实例的地域,实例建立后 地域⽆法修改,建议您根据所在地理位置选择靠近业务的地域,可下降访问延迟,提升数据上报速度。api
⽹络:需选择当前地域下已有的私有网络和子网,建立后不可修改。若在该地域下没有 vpc 资源可跳转到私有⽹络控制台新建 vpc。实例默认状况下只能监控本 vpc 网络的集群,若您但愿监控其余 vpc 集群,您须要使⽤云联⽹等服务进⾏ vpc ⽹络打通。网络
数据存储时间:选择数据存储时间,可选 15天/ 3个⽉/ 6个⽉/⼀年。实例建立成功后将⾃动为您建立对象存储 COS 存储桶并按照实际资源使⽤状况计费。详情请参见对象存储计费概述。架构
Grafana组件:此处须要设置登陆用户名和密码用于 Grafana 登录。Grafana 默认只支持 vpc 内访问,实例建立后,您能够根据业务须要开通 Grafana 外网访问。框架
实例建立完成后,将处于运行中状态,您可点击实例查看其基本信息。除了建立时指定的⼀些信息外,还包含⼀些建立完成后提供的信息:运维
Prometheus 数据查询地址:该接⼝⽤于提供数据查询,targets 查询,rules 查询等。您能够使⽤该地址对接⾃建的 Grafanaide
Prometheus 数据查询地址目前可支持如下几个 path。
/api/v1/query:查询最近⼀次抓取的数据。
/api/v1/query_range:查询⼀段时间的数据。
因为实例可能关联了多个集群,您须要添加 cluster=[集群类型]-[集群id]参数,用于指定目标集群:
TKE 集群:/api/v1/targets?cluster=tke-cls-xxx
弹性集群:/api/v1/targets?cluster=eks-cls-xxx
边缘集群:/api/v1/targets?cluster=tkeedge-cls-xxx
/api/v1/alerts:查询告警状态。
实例建立的 Grafana 会提供⼀些经常使用的监控面板,包含了集群综合信息,节点,工做负载,Pod 等。当您后续进行了集群关联后,被关联集群的数据就能够在默认监控面板中查看。
实例建立完成后,您须要须要监控的集群进行关联。关联以后,您就能够在集群中经过建立 SerivceMonitor,PodMonitor 等进行采集配置。
TKE 的标准集群以及弹性集群须要与该实例 Prometheus 所属同一个 VPC 网络,边缘集群则不受这个限制。
云原生监控为用户提供了与 Prometheus Operator 兼容的能力,您能够修改 Prometheus Operator 所定义的采集相关的 CRD,例如 Prometheus CRD,ServiceMonitor,PodMonitor 等。具体能够参考【prometheus operator】
当成功关联集群后,会在被关联集群的 prom-xxx 命名空间下建立⼀个名如【tke-cls-xxx】的 Prometheus CRD 资源。能够经过修改此资源来修改全局采集配置,额外的 labels 等等。
云原⽣监控⽀持建立【ServiceMonitor】,您能够经过控制台建立,也能够直接在集群⾥建立 ServiceMonitor。
选择该集群中的任意 service 自动聚和成 Yaml。
云原监控支持建立【PodMonitor】,您能够经过控制台建立,也能够直接在集群⾥建立 PodMonitor。
云原⽣监控⽀持直接建立 Prometheus 原⽣的 job,您能够经过控制台建立,也能够经过修改集群中 prom-xxx 命名空间下的 promtheus-config secret 来达到一样效果
您能够在控制台的集群数据采集配置右上⻆看到最终⽣成的 Prometheus 配置⽂件
您也能够在被关联集群的 prom-xxx 命名空间下,经过查看 prometheus-tke-cls-xxx 的 secret 来查看最终配置
在配置采集项的时候,您可能须要为配置提供⼀些⽂件,例如证书,您能够经过如下⽅式向采集器挂载⽂件,⽂件的更新会实时同步到采集器内:
prom-xxx 命名空间下的 configmap 打上如下的 label:prometheus.tke.tencent.cloud.com/scrape-mount = "true"
。
其中全部的 key 就会被挂载到采集器的路径 /etc/prometheus/configmaps/[configmap-name]/
。
prom-xxx 命名空间下的 secret 打上如下的 label:prometheus.tke.tencent.cloud.com/scrape-mount = "true"
其中全部的 key 就会被挂载到采集器的路径/etc/prometheus/secret/[secret-name]/
集群被关联后,云原⽣监控会在被关联集群内建立默认的采集配置。将安装如下两个组件
kube-state-metrics:在 kube-system 下将安装【kube-state-metrics】组件。
将添加如下采集项:
将添加如下聚合规则:
您能够经过控制台【查看 targets ⽬标】来查看当前全部被监控的对象的状态。
聚合规则⽤于使⽤ PromQL 来⽣成新的指标,聚合规则将以 30 秒为周期进⾏计算。
告警规则⽤于定义告警,告警规则将以 30 秒为周期进⾏计算。
您能够经过控制台来建立告警规则,⼀个告警能够配置多条规则:
名称:为⽤户⾃定义告警名称
规则名称:⽤于识别规则,可经过该名称在 Grafana 中查看其告警状态
PromQL:规则语句
Labels:在发送告警时将额外带上,这⾥的 Labels ⽆法在告警内容中引⽤
告警内容:⽤于⽣成告警内容的模板,您能够使⽤ {{$value}} 来引⽤告警触发时的值,也能够使⽤ {{$labels.label-name}} 来引⽤某个 label 的值
您能够在告警历史界⾯查询告警历史记录,默认查询近 24 ⼩时的告警记录,您能够经过时间筛选来查询⽬标范围内的记录,您能够经过经过右边搜索栏进⾏模糊过滤。
您能够经过在集群内直接建立【PrometheusRule】来建立告警和聚合规则
默认会⾃动在规则的 PromQL 中注⼊ Prometheus CRD 中的 externalLables,从⽽使得该规则只对本集群⽣效,关闭 externalLabels 注⼊能够经过在【PrometheusRule】中打上如下 annottation 来关闭注⼊:prometheus.tke.tencent.cloud.com/disable-labels-inject=""
prometheus.tke.tencent.cloud.com/notification-inject="渠道id"
模板一共分红两种类型,聚合规则和告警策略模板、数据采集模板。用于管理多集群 prometheus 配置,并支持一键同步升级等功能。
您能够经过控制台来建立模板,既能够复制已有模板,也能够建立一个空模板,而后添加自定义配置。
其中聚合规则和告警策略模板、数据采集等配置写法保持一致。
名称:模板名称。
类型:默认模板只容许进行复制,不容许编辑和删除。
关联 Prometheus 实例数目:模板绑定了 Prometheus 实例的数目。
关联 Prometheus Agent 数目:模板绑定了 Prometheus 实例的数目。
告警和聚合模板的关联实例列表,在这个列表中,可以对绑定的多个 Prometheus 实例进行同步告警策略和聚合规则。
支持同时关联多个地域的 Prometheus 实例或者多个地域的集群,从而达到一键同步,管理多个集群的效果。
若是对模板解除关联则全部模板相关配置被清除且不可恢复。
本文详细介绍了云原生监控服务的基本功能和使用方式,在原有监控、采集、存储、告警、图表等能力的基础上再增长了模板功能,使得支持对多集群架构服务进行监控。