利用 CnosDB 构建大规模观测平台
前言
可观测性是指通过收集和分析系统的各种指标和日志数据,来深入了解系统的运行状态、性能表现和问题根源,从而提高系统的可靠性和可维护性。
在现代软件开发中,良好的可观测性可以帮助开发人员和运维人员更好地监控系统的状态、识别潜在的问题、并及时采取措施来解决这些问题。时序数据库由于其处理时序数据的高效性能,逐渐成为搭建可观测性方案的热门组件。
图 1 全栈式可观测方案
在众多时序数据库中,我们观察到 CnosDB 作为一款由社区驱动的高性能、高压缩率、高易用性的开源分布式时序数据库,为能源、制造业和金融等对实时数据洞察具有高需求的行业提供了有效的全栈式解决方案。CnosDB (https://cn.cnosdb.com)具有超大数据规模、快速的批量写入、超高数据压缩比、丰富的计算函数和优秀的生态系统等功能特性。
一、方案架构
Prometheus 和 Grafana 是一套流行的开源监控系统方案, 它们协同工作为用户提供强大的监控和可视化功能。加入 CnosDB,和 Prometheus 形成长短存储共存的生态,优化该可观测方案。
以 Amazon Managed Service for Prometheus 为例,最长可以保存数据 150 天,当遇到需要大规模历史数据的场景,比如设备故障预测、网络流量分析、预测性扩容等,此时 Prometheus 提供的数据量就显得捉襟见肘。而以 CnosDB 作为存储,则可以不为此所扰。
解决方案架构如下图所示。
图二 解决方案架构图
Prometheus 是一个开源的系统监控和警报工具箱。它可以持续地从监控目标中拉取监控数据,并将其存储在高效的时间序列数据库中。
Amazon Managed Grafana 是一项面向 Grafana 的完全托管式服务,可以与多种数据源(如 Prometheus、Elasticsearch 等)集成,并提供丰富的可视化功能,允许针对自定义指标、日志和轨迹。
二、部署实施
2.1 CnosDB 部署
CnosDB 分为开源版(https://cn.cnosdb.com/download)和企业版(https://docs.cnosdb.com/docs/enterprise),可以通过以下几种方式部署:
- 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
可以看到如下结果:
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
可见下图:![](https://cn.cnosdb.com/wp-content/uploads/2024/06/4.png)
![](https://cn.cnosdb.com/wp-content/uploads/2024/06/4.png)
![](https://cn.cnosdb.com/wp-content/uploads/2024/06/5.png)
![](https://cn.cnosdb.com/wp-content/uploads/2024/06/5.png)
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 访问地址
![](https://cn.cnosdb.com/wp-content/uploads/2024/06/13.png)
![](https://cn.cnosdb.com/wp-content/uploads/2024/06/13.png)
![](https://cn.cnosdb.com/wp-content/uploads/2024/06/14.png)
![](https://cn.cnosdb.com/wp-content/uploads/2024/06/14.png)
- 使用 CnosDB 数据源
左边栏选择 add new connection 搜索找到 CnosDB 插件
选择安装成功后,点击 add new data source 添加 cnosdb 数据源
![](https://cn.cnosdb.com/wp-content/uploads/2024/06/17.png)
![](https://cn.cnosdb.com/wp-content/uploads/2024/06/17.png)
三、总结
总的来说,CnosDB、Prometheus 和 Grafana 组成的监控系统适用于实时监控和度量、弹性扩展、数据可视化和报表、警报和警告以及容器和微服务监控等应用场景。本文中以对 metric 数据的可观测性方案部署,展示了整个可观测系统的架构。
在本方案中,可以看到,得益于 Prometheus 自带的大量 default 图表模版,用户更习惯于直接通过 Prometheus 数据源来实现可视化,CnosDB 主要作为 Prometheus 的长存来使用。同时,当用户在默认模版中无法找到想要的内容是,又可以通过 CnosDB 插件直接通过标准 sql 查询数据。
另外在 log 以及 trace 这两种监控维度下,CnosDB 可以直接接受对应采集器写入的数据,然后在 Grafana 中进行可视化展示。
本篇作者
李栋
王昀哲
李方怡
亚马逊云科技解决方案架构师,负责基于 AWS 的云计算方案架构咨询和设计,致力于 AWS 云服务在创新增长客户群体中的推广,具有丰富的解决客户实际问题的经验。
参与 CnosDB 社区交流群:
扫描下方二维码,加入 CC 进入 CnosDB 社区交流,CC 也会在群内分享直播链接哒