分享

神仙儿级一站式云监控系统,活该你红!

 网罗灯下黑 2022-11-01 发布于河南

前两天,我应腾讯小伙伴的邀请,参加了第二期的 Techo Day 线上活动,让我知道了很多腾讯更底层的云原生成果,如,云监控

随着微服务架构和云原生生态的不断发展,系统整体复杂程度也在变高。一个服务的故障可能会产生雪崩效应。因此,如何监控微服务,出现异常时快速报警,提前降低风险,面临很大挑战。

Prometheus 是什么?

Prometheus 是一个时间序列数据存储,可用于管理任何基于时间的顺序数据。常用于监控其他应用程序的指标,并与其他项目集成以支持可视化仪表板。

在过去的十年中,Prometheus 迅速发展,在云原生监控领域大放异彩,使其成为现代应用程序的理想监控技术栈。

云监控

自建开源 Prometheus 需要前期调研、中期搭建、后期维护,人力成本较高。而且随着系统整体复杂度在上升,对监控系统的可靠性、扩展性,资源使用、磁盘规划,都是巨大的考验和成本的增加。

为此,腾讯云大展身手,推出云监控 Prometheus (TMP)产品,旨在为企业提供一站式全方位的方便、快速、高效、高可用的监控体系。

恰逢最近腾讯云举行的 Techo Day 技术开放日活动里,就有对其云监控 Prometheus 产品的深入解析,借此机会,让我们好好展开讲讲。

基本介绍

Prometheus 云监控服务是基于开源 Prometheus 构建的高可用、全托管的服务,与腾讯云容器服务(TKE)高度集成,兼容开源生态丰富多样的应用组件,结合云监控告警和 Prometheus Alertmanager 能力,为您提供免搭建的高效运维能力,减少开发及运维成本。

功能特性与优势

易用性:可一键安装监控腾讯云容器及其他云产品,免搭建。与云监控告警体系打通,可复用告警通知渠道。预设常用的 Grafana Dashboard 及告警规则模板。

成本控制:全托管,无需额外采购云资源,按量使用,节省资源和运维成本。

可扩展性:结合腾讯云自研的分片和调度技术,实现动态扩缩,满足用户的弹性需求,同时支持负载均衡。数据存储能力高上限,不受限于内存与本地磁盘。

性能与资源占用:Agent 部署在用户侧。只保留原生采集能力,数据不做存储,更省资源。开源 Prometheus 一般会占用几十 GB 的内存,而 Agent 监控服务仅占用几百 M 内存即可完成数据抓取。

主动式探测服务:多种开源没有的增强监控运维能力,如健康巡检、Agent 管理等。

基础架构

腾讯云在开源 Prometheus 上进行扩展。自研并开源了轻量级横向扩缩容方案 Kvass,将服务发现与采集过程分离,并用 Sidecar 动态给 Prometheus 生成配置文件,达到无侵入式支持 Prometheus 采集横向扩容的效果,并且支持自动负载均衡。


Kvass coordinator 引用原生 prometheus discovery 模块,提前探测 target sample 数量,并提前执行 relabel,管控采集 shard 扩缩容并协调 target 在 shard 之间进行迁移。

存储模块,采用多租户多集群多副本架构,并深入优化 TSDB 内存占用、倒排索引、索引落盘、wal replay 加速。

应用场景

云监控 Prometheus 可以方便的通过 Pull 方式采集以下指标:

  • 对现有数据库中间件集成 Exporter 暴露监控指标

  • 对于业务应用,可以使用 Prometheus SDK 的方式集成暴露监控指标。

  • 对于 TKE 容器集群、其他云厂商和自建 Kubernetes 集群

当被监控对象部署在 CVM 或者 自建 IDC 时,可以通过 Agent 的方式把监控数据remote_rewrite到云监控托管服务。

云监控基础实践

配置说明

Prometheus 主要通过 Pull 的方式来抓取目标服务暴露出来的监控接口,因此需要配置对应的抓取任务来请求监控数据并写入到 Prometheus 提供的存储中,目前 Prometheus 服务提供了如下几个任务的配置:

  • 原生 Job 配置:提供 Prometheus 原生抓取 Job 的配置。

  • Pod Monitor:在 K8S 生态下,基于 Prometheus Operator 提供的 CRD,来动态发现,抓取 Pod 上对应的监控数据。

  • Service Monitor:在 K8S 生态下,基于 Prometheus Operator 提供的 CRD,来动态发现,抓取 Service 对应 Endpoints 上的监控数据。

应用接入

自开发应用以开源 SDK 的方式集成和暴露 Prometheus 格式的指标,并提供/metrics接口。一般针对业务应用,都通过创建Service Monitor的方式,触发 Prometheus operator 对 Prometheus 的 Target 动态更新,从而 Pull 应用 Endpoint metrics 接口。

监控数据展示

云监控 Prometheus 和 Grafana 服务高度集成,一个 Grafana 实例可同时被多个 Prometheus 实例绑定,用于实现 Prometheus 数据的统一可视化。

绑定后,可以在 Prometheus 实例页面,点击 Grafana 图标打开访问 Dashboard。

告警

云监控与告警系统深度融合,我们可以通过监控平台一站式配置告警规则和策略,并指定多种通知渠道。

告警规则的创建方式兼容开源版本 PrometheusRule。

告警策略可以在云监控页面中新建,使用内置策略或者自定义策略,还可以选择提前创建的通知模板。

已支持推送到微信、邮件、短信、企业微信群机器人、钉钉群机器人、飞书群、slack 群等渠道,指定时间窗口,通知给设定的用户和用户组。

云监控最佳实践

接管自建的 Prometheus

Prometheus 的本地存储设计可以减少其自身运维和管理的复杂度,但是本地存储也意味着无法存储大量历史数据,同时也无法灵活扩展和迁移。

为了保持 Prometheus 的简单性,它通过定义两个标准接口remote_write/remote_read。

基于这个灵活性,我们可以将数据发送到云监控 Prometheus 服务中,作为自建 Prometheus 的 Remote Storage。

下面将采用该方案,将自建 Prometheus 数据接入到云监控中。

首先需要在“云监控 Prometheus”实例基本信息中获取Remote Write地址:

此时切换到自建 prometheus 所在主机操作,修改配置文件 prometheus.yml,Prometheus 的 remote_write 的所有配置项可以从 Prometheus 官网得到,不同的配置,会影响写入效率,具体可以在remote_write 配置文档中找到:

https:///docs/prometheus/latest/configuration/configuration/#remote_write

这里就用最简单的配置做示例:

remote_write:
    # Remote write 的名称
  - name: tmp
    # 基本信息中获取到的 Remote Write 地址,建议加上双引号避免特殊字符解析错误
    url: "http://10.0.0.8:9090/api/v1/prom/write"
    # 根据实际情况设置 remote_timeout: 30s
    # 基本信息中获取 Token 信息
    bearer_token: xxx*****xxx

修改完成重启 Prometheus 使配置生效。此时打开 Grafana,即可查看到我们自建监控中的数据。

接管自建的 K8S 集群

云监控可以关联腾讯云容器服务,通过以原生的方式获取监控数据,包括 PodMonitors、ServiceMonitors 和原生 Job 的方式,这些都可以在云监控面板中配置。

如果之前在其他公有云厂商、或者自己数据中心的 IDC 中有自建的或者托管的 Kubernetes 集群,也可以方便的接入云监控做多集群统一管理。

该功能得益于云原生分布式云中心 TDCC,借助其多集群管理的能力,可以方便快速将自建集群接入云监控服务。

腾讯云已经将 TDCC 的核心功能实现开源为 Clusternet 多集群应用治理项目。

https://github.com/clusternet/clusternet

这个项目的强大之处在于即使集群运行在 VPC 内网中、边缘或防火墙后,Clusternet 仍可建立网络隧道连接管理集群。打通无论是公共云、私有云、混合云还是边缘运行的集群,并且提供了 Kubernetes 原生风格的 API。

下面将通过详细步骤展示自建集群,或者其他云厂商托管集群接入云监控。

首先需要去容器服务->注册集群中开启 TDCC 功能:

输入网络、地域等信息后,保存将生成 Hub Cluster(可以理解为一个上层管理集群,用于和注册集群通信)

Hub 集群创建好之后,在注册集群页面,新建“注册集群”。


保存之后,显示为如下“等待注册”,复制“查看注册命令”,在弹窗中选择外网访问并复制 Yaml 代码块。

接下来我们转到目标集群中操作。保存成agent.yaml文件,提交到自建 K8S 集群中:

等待 Pod 状态变为 Running:

# kubectl get pod -n clusternet-system
NAME READY STATUS RESTARTS AGE
clusternet-agent-28444874d7-xsi91 1/1     Running 0          12s
clusternet-agent-28444874d7-op01a 1/1     Running 0          12s
clusternet-agent-28444874d7-kia91 1/1     Running 0          12s

在“注册集群”页面查看已经注册的集群,状态如果从“待注册”变为“运行中”表示自建集群注册成功:

切换到云监控页面,在集成容器服务页签,点击“集群监控”,“关联集群”,集群类型选择“注册集群”,采集方式“公网”,选择上面注册的集群,保存即可。

在“集群监控”页面查看到关联成功的自建集群,点击“数据采集配置”

可以看到各指标的详情。到这里,恭喜自己!接入自建集群成功。

接下来就像本地一样,可以到 Grafana 监控面板中查看监控大盘。

结语

通过体验腾讯云云监控,我看到了腾讯云产品的完善,基本覆盖了云计算所有的场景。在监控这个领域,对开源项目进行增强,和性能优化,以更便捷易用的方式为客户带来近乎完美的体验,统筹兼顾各产品的打通,完全自主,注重开源影响力,不愧是互联网大厂,公有云中流砥柱。

最后,想要了解更多云监控相关技术原理的朋友,可以下载这次 Techo Day 技术开放日的课件材料《腾讯云原生工具指南》。

尤其推荐给关注微服务领域的朋友,里面涵盖了云原生网关、开源百万级服务发现和治理中心“北极星”等相关产品的深入解析,更有腾讯文档、英特尔、招商局等大型企业及爆款产品的云原生实践案例,让你轻松从理论到实践对云原生有更全面、更多维度的感知。

👇

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多