前两天,我应腾讯小伙伴的邀请,参加了第二期的 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 方式采集以下指标:
当被监控对象部署在 CVM 或者 自建 IDC 时,可以通过 Agent 的方式把监控数据remote_rewrite到云监控托管服务。 云监控基础实践 配置说明 Prometheus 主要通过 Pull 的方式来抓取目标服务暴露出来的监控接口,因此需要配置对应的抓取任务来请求监控数据并写入到 Prometheus 提供的存储中,目前 Prometheus 服务提供了如下几个任务的配置:
应用接入 自开发应用以开源 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 配置文档中找到:
这里就用最简单的配置做示例:
修改完成重启 Prometheus 使配置生效。此时打开 Grafana,即可查看到我们自建监控中的数据。 接管自建的 K8S 集群 云监控可以关联腾讯云容器服务,通过以原生的方式获取监控数据,包括 PodMonitors、ServiceMonitors 和原生 Job 的方式,这些都可以在云监控面板中配置。 如果之前在其他公有云厂商、或者自己数据中心的 IDC 中有自建的或者托管的 Kubernetes 集群,也可以方便的接入云监控做多集群统一管理。 该功能得益于云原生分布式云中心 TDCC,借助其多集群管理的能力,可以方便快速将自建集群接入云监控服务。 腾讯云已经将 TDCC 的核心功能实现开源为 Clusternet 多集群应用治理项目。
这个项目的强大之处在于即使集群运行在 VPC 内网中、边缘或防火墙后,Clusternet 仍可建立网络隧道连接管理集群。打通无论是公共云、私有云、混合云还是边缘运行的集群,并且提供了 Kubernetes 原生风格的 API。 下面将通过详细步骤展示自建集群,或者其他云厂商托管集群接入云监控。 首先需要去容器服务->注册集群中开启 TDCC 功能: 输入网络、地域等信息后,保存将生成 Hub Cluster(可以理解为一个上层管理集群,用于和注册集群通信) Hub 集群创建好之后,在注册集群页面,新建“注册集群”。 保存之后,显示为如下“等待注册”,复制“查看注册命令”,在弹窗中选择外网访问并复制 Yaml 代码块。 接下来我们转到目标集群中操作。保存成agent.yaml文件,提交到自建 K8S 集群中: 等待 Pod 状态变为 Running:
在“注册集群”页面查看已经注册的集群,状态如果从“待注册”变为“运行中”表示自建集群注册成功: 切换到云监控页面,在集成容器服务页签,点击“集群监控”,“关联集群”,集群类型选择“注册集群”,采集方式“公网”,选择上面注册的集群,保存即可。 在“集群监控”页面查看到关联成功的自建集群,点击“数据采集配置” 可以看到各指标的详情。到这里,恭喜自己!接入自建集群成功。 接下来就像本地一样,可以到 Grafana 监控面板中查看监控大盘。 结语 通过体验腾讯云云监控,我看到了腾讯云产品的完善,基本覆盖了云计算所有的场景。在监控这个领域,对开源项目进行增强,和性能优化,以更便捷易用的方式为客户带来近乎完美的体验,统筹兼顾各产品的打通,完全自主,注重开源影响力,不愧是互联网大厂,公有云中流砥柱。 最后,想要了解更多云监控相关技术原理的朋友,可以下载这次 Techo Day 技术开放日的课件材料《腾讯云原生工具指南》。 尤其推荐给关注微服务领域的朋友,里面涵盖了云原生网关、开源百万级服务发现和治理中心“北极星”等相关产品的深入解析,更有腾讯文档、英特尔、招商局等大型企业及爆款产品的云原生实践案例,让你轻松从理论到实践对云原生有更全面、更多维度的感知。 👇 |
|