Istio-on-ACK集成生态1-集成TSDB助力可观测性存储

32次阅读

共计 4767 个字符,预计需要花费 12 分钟才能阅读完成。

阿里云容器服务 Kubernetes(简称 ACK)支持一键部署 Istio,可以参考文档在 ACK 上部署使用 Isito。Istio on ACK 提供了丰富的监控能力,为网格中的服务收集遥测数据,其中 Mixer 是负责提供策略控制和遥测收集的 Istio 组件。使用 Prometheus 进行监控是 Istio 提供的监控能力之一。Prometheus 是一个开源的监控和报警系统,Prometheus 依赖少,功能齐全,广泛用于 Kubernetes 集群的监控系统中。Istio 自 0.8 版本开始默认将 Prometheus 包含在内,Mixer 支持对接到 Prometheus 监控设施的 Adapter。用户可以通过查询 service 或 pod 看到 Prometheus 的运行状态和地址。也可以通过简洁明了的 Prometheus 的 UI 界面查看监测数据。

Prometheus 的存储挑战及解决方案

Prometheus 的本地存储设计可以减少其自身运维和管理的复杂度,能够满足大部分用户监控规模的需求,但是本地存储也意味着 Prometheus 无法持久化数据,无法存储大量历史数据,同时也无法灵活扩展。Prometheus 本身没有尝试解决以上问题,而是通过定义一组 remote storage adapter 标准接口,让用户可以基于这组标准接口自主决定将 Promthues 中的监控样本数据存储至第三方的远端存储服务中,来解决本地存储带来的问题。

TSDB for Prometheus 是一种高性能,低成本,稳定可靠的在线时序数据库服务,通过内置实现的 Prometheus 的 remote storage adapter,天然原生支持作为 Promtheus 的第三方在线远端存储服务。

相较于其他第三方远端存储而言,TSDB for Prometheus 具有集成程度高,同时支持读写等优势。

  • 集成程度高
    目前 Prometheus 对接第三方存储系统的主流做法是实现一个独立于第三方存储系统的 remote storage adapter, 这个 adapter 需要单独部署和运维,另外单独部署的 remote storage adapter 还存在单点故障和读写性能问题。

TSDB for Prometheus 在服务端内置实现的 Prometheus remote storage adapter,只需在 Prometheus 的配置文件 prometheus.yaml 中修改下远程读写配置,即可原生支持 Prometheus 直接读写 TSDB,集成程度高,无需额外单独部署 adapter,极大地降低了 adapter 的单点故障风险和运维成本。

  • 同时支持读写
    当前一些第三方远端存储仅支持 Prometheus 将监控样本数据写入,而不支持读取。比如对于 OpenTSDB、Graphite 和 Elasticsearch 等第三方存储,Prometheus 社区提供的 adapter 只支持写入模式,不支持读取模式。而 TSDB for Prometheus 同时支持读写。如要了解更多第三方存储系统对于 Prometheus 读写的支持程度,请参考 Remote Endpoints and Storage。

TSDB for Prometheus

时序时空数据库(Time Series & Spatial Temporal Database,简称 TSDB)是一种高性能、低成本、稳定可靠的在线时序时空数据库服务,提供高效读写、高压缩比存储、时序数据插值及聚合计算等服务。TSDB 具备秒级写入百万级时序数据的性能,提供高压缩比低成本存储、预降采样、插值、多维聚合计算、可视化查询结果等功能。

TSDB for Prometheus 是阿里云时序时空数据库 TSDB 为 Prometheus 提供的一种高性能、低成本、稳定可靠的在线远端存储服务,具备以下能力:

  • 提供高效读写、高压缩比存储的能力,可无缝被 Prometheus 集成,在协议上原生支持 Prometheus 远端存储对接至 TSDB。
  • 解决了以往需要为 Prometheus 额外开发 remote storage adapter 的问题,极大的降低了 Prometheus 远端存储对接 TSDB 的成本。
  • TSDB for Prometheus 最大程度的兼容 Prometheus 的 PromQL 查询语法,从而降低了用户的开发,迁移和维护成本。
  • 解决 Prometheus local stroge 无法存储大量历史数据的场景,且无法扩展的问题。
  • 通过内置实现的 Prometheus 的 remote storage adapter,天然原生支持作为 Promtheus 的第三方在线远端存储服务。
  • 相较于其他第三方远端存储而言,TSDB for Prometheus 具有集成程度高,同时支持读写等优势。

TSDB for Prometheus 的使用要求具体可以参见使用要求

阿里云提供的不同规格的 TSDB 实例,设置了不同的最大写入 TPS,避免过大 TPS 导致 TSDB 示例不可用,保护 TSDB 实例正常运行。当写入 TPS 超过 TSDB 实例允许的最大 TPS 时,将触发 TSDB 实例限流保护规则,会造成写入失败异常。因此需要根据 TSDB 实例规格来调整 Prometheus 的 remote_write 配置,从而实现平稳可靠的将 Prometheus 采集到的指标写入 TSDB 中。

关于 Remote Write 配置,除了参考 Prometheus 官方提供的 Remote Write 配置说明之外,还可以参考 Prometheus 对接阿里云 TSDB 时的写入配置最佳实践。

创建 TSDB 实例

创建一个 TSDB 实例非常简单,登录 TSDB 控制台,参照创建实例文档即可创建。
获取开通的 TSDB 实例的地址,可以参考 TSDB 官方文档快速入门

确认 Prometheus 所在机器能够正常访问 TSDB 实例。直接使用 http 访问 TSDB 实例的地址,如果能够得到包含”Welcome to use the TSDB”的字符串,表示 Prometheus 所在机器能够正常访问 TSDB 实例。

设 TSDB 实例的公网地址为:ts-xxxxxxxxxxxx.hitsdb.rds.aliyuncs.com:3242,在启用了 Prometheus 的 Istio 所在 Kubernetes 集群下,执行命令:
kubectl exec -it -n istio-system $(kubectl get pods -n istio-system -l app=prometheus -o jsonpath='{.items[0].metadata.name}') sh

进入到 Prometheus 容器之后,执行命令wget -S ts-xxxxxxxxxxxx.hitsdb.rds.aliyuncs.com:3242,可以得到如下结果:

Connecting to ts-bp1839ak5uf20igcw.hitsdb.rds.aliyuncs.com:3242 (101.37.143.44:3242)
  HTTP/1.1 200 OK
  Content-Type: Content-Type

index.html           100% |*****************************************************************************************|   361   0:00:00 ETA

然后执行命令 cat index.html,可以得到如下结果:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv=content-type content="text/html;charset=utf-8"><title>TSDB</title>
<style><!--
body{font-family:arial,sans-serif;margin-left:2em}A.l:link{color:#6f6f6f}A.u:link{color:green}.fwf{font-family:monospace;white-space:pre-wrap}//--></style><div>Welcome to use the TSDB!</div>

集成 TSDB 到 Istio on ACK

第一次部署 Istio

阿里云容器服务 Kubernetes(简称 ACK)支持一键部署 Istio,可以参考文档在 ACK 上部署 Isito。
如果是第一次部署使用 Isito,可以直接按照文档步骤进行部署。
注意,勾选 启用 Prometheus 度量日志收集 选项,默认情况下启用,并勾选 持久化存储,提示需要提供可以访问的 TSDB 地址。此处填写在上述步骤中已经验证可以使用的 TSDB 实例的地址,例如 ts-xxxxxxxxxxxx.hitsdb.rds.aliyuncs.com:3242。

然后单击 部署 Istio,启动部署。部署成功之后,Prometheus 的监控数据将持久化到对应的 TSDB 实例中。

更改已有 Isito 部署配置

如果之前已经部署过 Istio,但没有启用 Prometheus 的持久化存储,则可以按照如下步骤进行配置。

  • 登录容器服务管理控制台。
  • 在 Kubernetes 菜单下,单击左侧导航栏的应用 > 发布,进入发布页面。
  • 单击 Helm,选择所需的集群,选择待更新的 Istio,单击操作列的更新。

  • 在弹出的对话框中,对 Istio 的 Prometheus 参数进行修改:
配置 说明
enabled true 或者 false,表示是否启用 Prometheus 收集度量日志。默认情况下启用,即值为 true。
replicaCount prometheus 容器组的副本数,默认值为 1。
persist true 或者 false,表示是否启用持久化存储。设置为 true 时,必须指定 TSDB 实例地址。
tsdbEndpoint TSDB 实例地址,启用持久化存储时必须指定。
retention 默认的数据保留时间,8760h0m0s 即为 24*365 小时,即 1 年
scrapeInterval 全局默认抓取时间间隔,默认为 15s

  • 修改完毕之后,单击 更新

查看 Prometheus 配置

登录容器服务管理控制台,单击左侧导航栏中的 应用配置 下的 配置项,进入配置项列表页面。点击名称为 prometheus 的配置项,进入配置项明细页面,如下图所示,可以看到对应的 TSDB 实例的地址:

TSDB 写入和读取验证

TSDB 写入验证

可以简单的通过 TSDB 实例的管理控制台界面的“实例监控”界面,观察写入的 TPS 是否有所变化来验证。一般刚开始没有任何数据写入时,写入的 TPS 为 0;若 TPS 开始从 0 变为正数时,则说明 Prometheus 已经将数据上报到了 TSDB 中,如下图所示。

读取验证

在启用了 Prometheus 的 Istio 所在 Kubernetes 集群下,执行命令:
kubectl port-forward -n istio-system svc/prometheus 9090:9090

打开浏览器,输入地址 http://localhost:9090,进入 Prometheus 控制台页面。

Istio 提供了一系列的默认监控指标,以 Prometheus 采集到 Istio 的一个监控指标 istio_request_bytes_count 为例进行查询认证,结果如下图所示。

至此,一个完整集成 TSDB 到 Istio 可观性 Prometheus 服务的过程已经结束。

总结

在阿里云 Kubernetes 容器服务基础之上,快速搭建一套用于连接、管理以及安全化微服务的开放平台 Istio,为应用引入和配置多个相关服务。使用 Prometheus 进行监控是 Istio 提供的监控能力之一,通过集成 TSDB 有效地解决持久化存储的问题。


本文作者:osswangxining

原文链接

本文为云栖社区原创内容,未经允许不得转载。

正文完
 0