您的位置:首页 > 运维架构

如何优雅地使用云原生 Prometheus 监控集群

2020-12-22 22:25 786 查看

作者陈凯烨,腾讯云前端开发工程师。负责 TKE 集群,弹性集群和云原生监控等模块控制台开发。

概述

Prometheus 是一套开源的系统监控报警框架。2016 年,Prometheus 正式加入 Cloud Native Computing Foundation,成为受欢迎度仅次于 Kubernetes 的项目。

2020年11月20日,腾讯云云原生 Prometheus 服务正式开始免费公测。针对容器集群监控场景,提供了一整套包括监控、采集、存储、告警、图表等能力的监控服务。通过独立部署与被监控对象解耦合,使得不受监控对象性能、稳定性、可靠性等因素的影响,托管模式使得用户无需部署运维 Prometheus 监控实例,解放了运维人力,而新推出的模板功能可以解决在多个集群之间粘贴复制配置的重复性工作问题,实现一键同步多个集群配置,使得整个流程更专业、更可靠。本文会详细介绍云原生监控服务的基本功能以及使用方式。

腾讯云容器团队的云原生监控服务,产品目前已正式公测,欢迎读者试用(传送门:https://console.cloud.tencent.com/tke2/prometheus )。

基本功能

实例管理

创建实例

  1. 登录容器服务控制台,选择左侧导航栏中的【云原⽣监控】
  2. 点击⻚⾯上⽅的【新建】按钮,进⼊【创建监控实例】⻚⾯。如下图所示:
  3. 在【创建监控实例⻚⾯】,根据提示设置集群信息。如下图所示:
  • 地域: 选择您希望部署该实例的地域,实例创建后 地域⽆法修改,建议您根据所在地理位置选择靠近业务的地域,可降低访问延迟,提高数据上报速度。

  • ⽹络:需选择当前地域下已有的私有网络和子网,创建后不可修改。若在该地域下没有 vpc 资源可跳转到私有⽹络控制台新建 vpc。实例默认情况下只能监控本 vpc 网络的集群,若您希望监控其他 vpc 集群,您需要使⽤云联⽹等服务进⾏ vpc ⽹络打通。

  • 数据存储时间:选择数据存储时间,可选 15天/ 3个⽉/ 6个⽉/⼀年。实例创建成功后将⾃动为您创建对象存储 COS 存储桶并按照实际资源使⽤情况计费。详情请参见对象存储计费概述。

  • Grafana组件:此处需要设置登录用户名和密码用于 Grafana 登陆。Grafana 默认只支持 vpc 内访问,实例创建后,您可以根据业务需要开通 Grafana 外网访问。

  • AlertManger:您可通过添加⾃定义的 AlertManger 地址,将实例产⽣的告警发往自建的 AlertManger。

基础信息

实例创建完成后,将处于运行中状态,您可点击实例查看其基本信息。除了创建时指定的⼀些信息外,还包含⼀些创建完成后提供的信息:

  • 对象存储桶:云原⽣监控使⽤对象存储在进⾏数据持久化存储,实例将在您账号下创建⼀个对象存储的桶⽤于存储数据。
  • Prometheus 数据查询地址:该接⼝⽤于提供数据查询,targets 查询,rules 查询等。您可以使⽤该地址对接⾃建的 Grafana

  • Grafana:默认为您提供了内⽹地址,您可以选择性开启外⽹访问,开启后将⽣成固定的外⽹域名。

Prometheus数据查询接口

Prometheus 数据查询地址目前可支持以下几个 path。

  • /api/v1/query:查询最近⼀次抓取的数据。

  • /api/v1/query_range:查询⼀段时间的数据。

  • /api/v1/targets:查询监控目标的信息。

由于实例可能关联了多个集群,您需要添加 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:查询告警状态。

  • /api/v1/rules:查询聚合和告警规则。

默认监控面板

实例创建的 Grafana 会提供⼀些常用的监控面板,包含了集群综合信息,节点,工作负载,Pod 等。当您后续进行了集群关联后,被关联集群的数据就可以在默认监控面板中查看。

多集群管理

关联集群

实例创建完成后,您需要需要监控的集群进行关联。关联之后,您就可以在集群中通过创建 SerivceMonitor,PodMonitor 等进行采集配置。

TKE 的标准集群以及弹性集群需要与该实例 Prometheus 所属同一个 VPC 网络,边缘集群则不受这个限制。

采集配置

Prometheus Operator

云原生监控为用户提供了与 Prometheus Operator 兼容的能力,您可以修改 Prometheus Operator 所定义的采集相关的 CRD,例如 Prometheus CRD,ServiceMonitor,PodMonitor 等。具体可以参考【prometheus operator】

修改采集周期和额外 labels

当成功关联集群后,会在被关联集群的 prom-xxx 命名空间下创建⼀个名如【tke-cls-xxx】的 Prometheus CRD 资源。可以通过修改此资源来修改全局采集配置,额外的 labels 等等。

ServiceMonitor

云原⽣监控⽀持创建【ServiceMonitor】,您可以通过控制台创建,也可以直接在集群⾥创建 ServiceMonitor。


选择该集群中的任意 service 自动聚和成 Yaml。

PodMonitor

云原监控支持创建【PodMonitor】,您可以通过控制台创建,也可以直接在集群⾥创建 PodMonitor。

Rawjob

云原⽣监控⽀持直接创建 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】组件。

  • node exporter: 在 kube-system 下将安装【node exporter】组件。

将添加以下采集项:

将添加以下聚合规则:

查看 targets

您可以通过控制台【查看 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=""

  • 若您创建的是告警规则,可通过添加以下 annotation 来指定告警渠道:
    prometheus.tke.tencent.cloud.com/notification-inject="渠道id"

    其中,渠道 id 即为控制台创建告警规则时所⽣成的告警 id。

    因此,若您想使⽤集群内告警规则,您需要在控制台⾄少创建⼀起告警。

模板功能

简介

模板一共分成两种类型,聚合规则和告警策略模板、数据采集模板。用于管理多集群 prometheus 配置,并支持一键同步升级等功能。

创建模板

您可以通过控制台来创建模板,既可以复制已有模板,也可以创建一个空模板,然后添加自定义配置。

其中聚合规则和告警策略模板、数据采集等配置写法保持一致。

  • 名称:模板名称。

  • 类型:默认模板只允许进行复制,不允许编辑和删除。

  • 关联 Prometheus 实例数目:模板绑定了 Prometheus 实例的数目。

  • 关联 Prometheus Agent 数目:模板绑定了 Prometheus 实例的数目。

  • 版本:代表当前模板的版本。

关联实例列表

告警和聚合模板的关联实例列表,在这个列表中,能够对绑定的多个 Prometheus 实例进行同步告警策略和聚合规则。

关联实例


支持同时关联多个地域的 Prometheus 实例或者多个地域的集群,从而达到一键同步,管理多个集群的效果。

如果对模板解除关联则所有模板相关配置被清除且不可恢复。

总结

本文详细介绍了云原生监控服务的基本功能和使用方式,在原有监控、采集、存储、告警、图表等能力的基础上再增加了模板功能,使得支持对多集群架构服务进行监控。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: