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

本文涉及的产品
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
性能测试 PTS,5000VUM额度
应用实时监控服务-应用监控,每月50GB免费额度
简介: 使用Prometheus进行监控是Istio提供的监控能力之一,通过集成TSDB有效地解决持久化存储的问题。

阿里云容器服务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有效地解决持久化存储的问题。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
存储 Kubernetes 容器
Kubernetes 存储选项:持久化卷与存储类
【8月更文第29天】随着容器化的普及,越来越多的应用程序需要持久化数据以保持状态信息。Kubernetes 提供了一套完整的解决方案来管理和配置持久化存储,包括持久卷 (Persistent Volume, PV)、持久卷声明 (Persistent Volume Claim, PVC) 和存储类 (StorageClass)。本文将详细介绍这些概念,并通过实际示例来演示如何在 Kubernetes 中配置存储。
306 1
|
3月前
|
存储 Kubernetes 容器
k8s创建NFS动态存储
k8s创建NFS动态存储
|
4月前
|
消息中间件 监控 Kafka
AutoMQ 生态集成 Redpanda Console
今天分享的内容是如何通过 Redpanda Console对 AutoMQ 集群状态进行监控,以提高系统的可维护性和稳定性。
57 2
AutoMQ 生态集成 Redpanda Console
|
4月前
|
存储 Kubernetes 应用服务中间件
k8s使用rbd作为存储
k8s使用rbd作为存储
63 6
|
3月前
|
存储 Kubernetes 数据安全/隐私保护
在K8S中,如果后端nfs存储的ip发生变化如何解决?
在K8S中,如果后端nfs存储的ip发生变化如何解决?
|
3月前
|
存储 缓存 Kubernetes
在K8S中,业务Pod数据如何存储?
在K8S中,业务Pod数据如何存储?
|
3月前
|
存储 JSON Kubernetes
在K8S中,存储敏感信息方式有哪些?
在K8S中,存储敏感信息方式有哪些?
|
3月前
|
存储 Kubernetes 容器
在k8S中,所支持的存储供应模式有哪些?
在k8S中,所支持的存储供应模式有哪些?
|
3月前
|
存储 Kubernetes 调度
在k8S中,共享存储的作用是什么?
在k8S中,共享存储的作用是什么?
|
3月前
|
存储 Kubernetes 测试技术
在k8s中,有哪些存储?
在k8s中,有哪些存储?
下一篇
无影云桌面