基于 Prometheus 的边缘计算监控实践

基于 Prometheus 的边缘计算监控实践,第1张

基于 Prometheus 的边缘计算监控实践

监控作为边缘计算基础设施的重要组成部分,是边缘稳定性的基本保障。本文主要介绍火山引擎边缘计算的监控实践,分享火山引擎如何进行监控技术选型以及构建监控服务体系。主要内容如下:

    边缘计算监控初衷

    基于 Prometheus 的监控系统

    落地实践

    总结

01 边缘计算监控初衷

监控作为边缘计算基础设施的重要组成部分,是边缘稳定性的基本保障。在面对低时延、高带宽、异构汇聚等特点的边缘环境时,如何更加清晰的展现出边缘集群的运行状态,应对边缘环境复杂多变的线上挑战?为此,火山引擎边缘计算需要构建一套完善的边缘计算监控和服务体系。

02 基于 Prometheus 的监控系统

火山引擎边缘计算采用了云原生架构,而 Prometheus 作为云原生时代的指标监控利器,有其先天的优势。相较于其他监控方案,Prometheus 具有以下优点:

    原生支持 Kubernetes(以下简称 K8s) 监控,具有 K8s 对象服务发现能力,而且核心组件提供了 Prometheus 的采集接口;基于 HTTP 的 pull 方式采集时序数据,可以满足边缘多集群的监控需求;无依赖存储,支持 local 和 remote 存储模式;提供有数据查询语言 PromQL,用户可以直接通过 PromQL 从 Prometheus 里查询到需要的聚合数据。支持多种多样的图表和界面展示,比如 Grafana 等。

基于 Prometheus 的监控系统的架构如图所示,这里详细分享一下数据源和 Prometheus Server 两部分。

数据源

在监控系统中,数据源部分包含:

node-exporter:采集物理节点指标;

kube-state-metrics:采集k8s相关指标,包括资源使用情况,以及各种对象的状态信息;

cadvisor:采集容器相关指标;

apiserver, etcd, scheduler, k8s-lvm,gpu 等核心组件的监控数据;

其他自定义 metrics,通过在 pod yaml 文件 annotations 添加 prometheus.io/scrape: "true" 可实现自动抓取提供的 metrics;

Prometheus Server

Prometheus Server 是 Prometheus 最核心的模块。它主要包含抓取、存储和查询这3个功能:

抓取:Prometheus Server 通过服务发现组件,周期性地从 Exporter 中通过 HTTP 轮询的形式拉取监控指标数据。

存储:抓取到的监控数据通过一定的规则清理和数据整理(抓取前使用服务发现提供的 relabel_configs 方法,抓取后使用作业内的 metrics_relabel_configs 方法),把得到的结果存储到新的时间序列中进行持久化。

查询:Prometheus 持久化数据以后,客户端就可以通过 PromQL 语句对数据进行查询了。

 

03 落地实践

整体监控架构

边缘计算基于 Prometheus、M3DB、自研 Metrix 等构建起一套监控架构,架构图如下:

整个边缘计算监控架构主要由数据采集、Prometheus、M3DB、Grafana、Metrix 几个核心模块构成。

数据采集

Prometheus 对接组件监控信息通常使用 exporter。exporter 不会主动推送监控数据到 server 端,而是等待 server 端定时来收集数据,即所谓的主动监控。边缘计算使用的 exporter 包含:node_exporter、xlb_exporter、kubevirt-exporter 等。

然后通过 Endpoints 对象定义需要监控的设备IP及端口,Prometheus Pod 根据 ServiceMonitor 配置向分布在各设备上的 exporter 拉取 metrics 数据;

Prometheus

Prometheus Pod 将采集上来的数据根据 record-rules 进行 relabel、预聚合等 *** 作,然后将所有数据打上 externalLabels(例如 cluster: bdcdn-bccu)remote write 写入远端的 M3DB;

M3DB

M3DB 是分布式时序数据库,实现了 Pometheus 的 remote_read 和 remote_write 接口,同时支持 PromQL 等查询语言。我们使用了 M3DB 作为保存边缘计算相关的监控数据,用于对接报警及展示。

Metrix 和 Grafana

通过 PromQL 语句向 M3DB 查询数据,对接报警系统 Metrix 和视图展示。

监控组件

通过以 Prometheus 为主的若干组件实现 K8s 全组件监控及业务监控,组件列表如下:

监控组件

功能点

prometheus

一套开源的监控&报警&时间序列数据库的组合;

prometheus-adapter

转换成 prometheus 的监控;

grafana

一个开源的度量分析与可视化套件;

cAdvisor

机器上的资源及容器进行实时监控和性能数据采集,包括 CPU 使用情况、内存使用情况、网络吞吐量及文件系统使用情况。现在已经集成到 kubelet 里了;

node-exporter

收集 *NIX 系统中硬件、系统指标;

eventrouter

事件采集,可以采集集群中的 event 到 es 中;

blackbox-exporter

主动监测主机与服务状态;

存储 M3DB

分布式时序数据库;

Metrix

自研产品,用于报警;

存储后端

存储后端主要是 M3DB。M3DB 是原生的分布式时序数据库,提供高度灵活和性能的聚合服务、查询引擎等。M3DB 能够通过提供不同的组件进行分离,让分布式时序数据库进行很好的扩展。

分布式数序数据存储(M3DB):提供可水平扩展的时序数据存储和反向索引;

一个 Sidecar 程序(M3Coordinator):可以使 M3DB 作为 Prometheus 的远程存储使用;

分布式查询引擎(M3Query):支持 PromQL, Graphit 和 自研的 M3Query 语法;

聚合服务(M3Aggregator):对数据进行聚合和降级,以实现对不同指标执行不同存储策略。

 

监控指标

K8s 的资源指标分类:

资源指标:metrics-server 内建 API;

自定义指标:通过 Prometheus 来采集,需要组件 k8s-prometheus-adapter;

 

(1)metrics-server:API server

kubectl api-versions 中默认不包含 metrics.k8s.io/v1beta1;

使用时需要添加 kube-aggregator 前缀;

可以使用 kubectl top nodes 来获取信息。

(2)自定义指标

如 node_exporter 用来暴露 node 信息,当然还有其他的 exporter;

PromQL 查询语句,不能直接被 K8s 直接解析,需要通过 kube-state-metrics 组件转 k8s-promethues-adpater 转为 Custom Metrics API;

(3)HPA --- 基于资源值指标的伸缩

指定 Deployment、ReplicaSet 或 ReplicationController,并创建已经定义好资源的自动伸缩器。使用自动伸缩器可以根据需要自动增加或减少系统中部署的 pod 数量。

Metrics Server:集群级别的核心资源使用聚合器,通过各个节点的 `/stats/summary` 接口提供的数据来收集节点和 Pod 的 CPU 和内存使用情况。Summary API 是一种内存高效的 API,用于将数据从 kubelet/cAdvisor 传递到 Metrics Server。

API Server:聚合 Metrics Server 提供的核心资源指标,通过 http://metrics.k8s.io/v1beta1 API提供给 HPA 做自动扩缩。

 

同时,我们采用 Grafana 将采集的数据进行查询和可视化。通过对系统拆解,分别在物理机、网络、K8s、存储等层级做了监控汇聚及展示。以上是整个边缘计算监控服务体系的主要模块。

04 总结

回顾一下本文介绍的主要内容:

首先,介绍了边缘计算场景下的监控,包括边缘计算监控场景面临的挑战及监控的重要性;

然后,介绍了如何实现边缘计算的监控,基于 Prometheus 的监控系统;

最后,介绍了边缘计算监控的落地实践场景,包括监控架构及监控组件、存储后端、监控指标等;

基于 Prometheus 构建的监控系统,不仅满足了多样化业务对监控的需求,还提升了火山引擎边缘计算对边缘集群的管控、运维能力。而 Prometheus 作为新生代的开源监控系统,已成为云原生体系的事实标准,也证明了其设计很受欢迎。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5709125.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存