亚马逊AWS官方博客

利用 CnosDB 构建大规模观测平台

前言

可观测性是指通过收集和分析系统的各种指标和日志数据,来深入了解系统的运行状态、性能表现和问题根源,从而提高系统的可靠性和可维护性。

在现代软件开发中,良好的可观测性可以帮助开发人员和运维人员更好地监控系统的状态、识别潜在的问题、并及时采取措施来解决这些问题。时序数据库由于其处理时序数据的高效性能,逐渐成为搭建可观测性方案的热门组件。

图 1 全栈式可观测方案

在众多时序数据库中,我们观察到 CnosDB 作为一款由社区驱动的高性能、高压缩率、高易用性的开源分布式时序数据库,为能源、制造业和金融等对实时数据洞察具有高需求的行业提供了有效的全栈式解决方案。CnosDB 具有超大数据规模、快速的批量写入、超高数据压缩比、丰富的计算函数和优秀的生态系统等功能特性。

本文主要介绍使用 Prometheus 和 Grafana,结合 CnosDB 搭建可观测性系统的最佳实践。

一、方案架构

Prometheus 和 Grafana 是一套流行的开源监控系统方案, 它们协同工作为用户提供强大的监控和可视化功能。加入 CnosDB,和 Prometheus 形成长短存储共存的生态,优化该可观测方案。

以 Amazon Managed Service for Prometheus 为例,最长可以保存数据 150 天,当遇到需要大规模历史数据的场景,比如设备故障预测、网络流量分析、预测性扩容等,此时 Prometheus 提供的数据量就显得捉襟见肘。而以 CnosDB 作为存储,则可以不为此所扰。

解决方案架构如下图所示。

图二 解决方案架构图

Prometheus 是一个开源的系统监控和警报工具箱。它可以持续地从监控目标中拉取监控数据,并将其存储在高效的时间序列数据库中。

Amazon Managed Grafana 是一项面向 Grafana 的完全托管式服务,可以与多种数据源(如 Prometheus、Elasticsearch 等)集成,并提供丰富的可视化功能,允许针对自定义指标、日志和轨迹。

CnosDB 在图中作为时序数据库,存储 Prometheus 拉取的 Metric 数据,同时为 Prometheus server 提供数据读取接口。用户通过 Grafana 既可以使用 prometheus 作为数据源,获取 prometheus 自带的 dashboard,又可以使用 CnosDB 插件提供的 CnosDB 数据源,通过 sql 获取自定义的 dashboard。

二、部署实施

2.1 CnosDB 部署

CnosDB 分为开源版企业版,可以通过以下几种方式部署:

  • Docker
  • Amazon EC2
  • Amazon EKS

本文使用 helm 在 EKS 部署 CnosDB。创建好 EKS 集群后,运行以下命令:

helm repo add cnosdb https://cnosdb.github.io/helm-chart/
helm repo update cnosdb 
helm install my-cnosdb cnosdb/cnosdb -n cnosdb -f bundle.yaml

yaml 文件如下:

image:
pullPolicy: IfNotPresent
cnosdbMeta:
tag: community-2.3.5.2
cnosdb:
tag: community-2.3.5.2
architecture: separation
tskv:
persistence:
storageClass: "gp3"
enabled: true
size: 10Gi
meta:
persistence:
storageClass: "gp3"
enabled: true
size: 10Gi

部署成功后,执行命令 kubectl get all -n cnosdb 可以看到如下结果:

进入 query pod 中,执行 cnosdb-cli,通过创建 Prometheus 数据库,用以接受 Prometheus 的数据。

2.2 EKS 中的 Prometheus 部署

使用 helm 创建 Prometheus 的 yaml 文件如下:

server:
  remoteWrite:
    - url: "http://my-cnosdb-query-svc.cnosdb.svc.cluster.local:8902/api/v1/prom/write?db=prometheus"
      basic_auth:
        username: 'root'
        password: ''
  remoteRead:
    - url: "http://my-cnosdb-query-svc.cnosdb.svc.cluster.local:8902/api/v1/prom/read?db=prometheus"
      basic_auth:
        username: 'root'
        password: ''

remoteWrite 和 remoteRead 中 IP 都是上一步部署的 CnosDB 的 query 的 svc 地址,db 参数值是 上一步创建的存储 Prometheus 的数据库名称。

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
kubectl create ns prometheus
helm install prometheus-for-amp prometheus-community/prometheus -n prometheus -f deploy.yaml

部署成功后执行 kubectl get all -n prometheus 可见下图:

再去 CnosDB 中查看 Prometheus 数据库,可以在库中发现 Prometheus 写入数据后创建的的多个数据表。

2.3 Amazon MSG 部署

  • 在 Amazon Managed Grafana 里创建一个工作区。

    此处创建了一个名为 eks-metric 的工作区。authentication 选择的 IAM identity center。

  • 为 IAM identity center 创建访问用户
  • 为创建的工作区分配创建 user 的 access 权限
  • 插件配置(可选)CnosDB 在 grafana 社区贡献过专用的插件,以方便用户直接从 CnosDB 读取数据进行可视化展示,如果需要使用该插件,需要在 AMG 工作区开启 plugin management
  • 配置 vpc outbound connection 为 AMG 配置 eks 所在 vpc 的连接权限

2.4 可视化展示

通过第三步中创建的用户登录 AMG web 页面,在左边栏找到 datasource,点击 add data source

  • 使用 Prometheus 数据源

选择 prometheus,添加之前在 EKS 集群中部署的 prometheus-server 访问地址

这里为 prometheus-server 配置了一个 loadbalancer 类型的 service。连接成功后,就可以使用采集到的 metric 数据通过 Grafana 做可视化展示。

点击 building a dashboard,在界面中选择 prometheus 数据源,选择一个 metrics 类型,然后执行 run queries,就可得到对应的可视化结果。

  • 使用 CnosDB 数据源

左边栏选择 add new connection 搜索找到 CnosDB 插件

选择安装成功后,点击 add new data source 添加 CnosDB 数据源

database 选择存放 Prometheus 采集数据的数据库,user 默认 root,密码为空,同样为 my-cnosdb-query-svc 配置 loadbalancer 类型,url 选择 svc external-ip 加上 8902 端口

数据源配置成功后,通过 sql 拼接,可以直接从 CnosDB 查询得到数据,然后生成可视化图表。

三、总结

总的来说,CnosDB、Prometheus 和 Grafana 组成的监控系统适用于实时监控和度量、弹性扩展、数据可视化和报表、警报和警告以及容器和微服务监控等应用场景。本文中以对 metric 数据的可观测性方案部署,展示了整个可观测系统的架构。

在本方案中,可以看到,得益于 Prometheus 自带的大量 default 图表模版,用户更习惯于直接通过 Prometheus 数据源来实现可视化,CnosDB 主要作为 Prometheus 的长存来使用。同时,当用户在默认模版中无法找到想要的内容是,又可以通过 CnosDB 插件直接通过标准 sql 查询数据。

另外在 log 以及 trace 这两种监控维度下,CnosDB 可以直接接受对应采集器写入的数据,然后在 Grafana 中进行可视化展示。

本篇作者

李栋

CnosDB 首席云工程师

王昀哲

亚马逊云科技行业解决方案架构师

李方怡

亚马逊云科技解决方案架构师,负责基于 AWS 的云计算方案架构咨询和设计,致力于 AWS 云服务在创新增长客户群体中的推广,具有丰富的解决客户实际问题的经验。