写点什么

上手后才知道,这套仪表盘系统用起来是真的爽!

用户头像
尔达Erda
关注
发布于: 4 小时前


​作者|张安哲(落羽)

来源|尔达Erda公众号


导读:为了让大家更好的了解 MSP 中 APM 系统的设计实现,我们决定编写一个《详聊微服务观测》系列文章,深入 APM 系统的产品、架构设计和基础技术。本文为该系列文章的第二篇,主要分享了我们自研的仪表盘系统 Erda DashBoard 的使用操作及未来愿景。


《详聊微服务观测》系列文章:


引言

容器化与微服务,使系统扩展性与鲁棒性相比以往提升了许多,但随之也带来了问题:运维的任务与工作量日渐繁重。


构成这一应用的微服务以及支撑这一应用的所有基础设施,都会有各自的日志、指标数据,以及构建在上游的监控、日志系统。各处分散的数据和系统,会给支持团队造成极大的负担,最终也会成为开发运维工作的拦路虎。​

我们的思考

我们已经统一了不同服务的日志、数据、指标等的分析与聚合及存储,但不同租户、应用、服务、实例可能都需要一套自己的具像化监控用以分析排查,这给监控灵活性带来了极大挑战。


时至今日,市面上已然出现了许多自定义、可视化的开源表盘,如 Kibana、Grafana、Dash 等,也有一定的缺憾,如使用上手难度大,学习成本高等,但最大的问题是操作不连贯导致无法快速排查问题。还有一些系统自带的监控图表,但这些数据范围与查询规则、排列组合都是程序固定好的,遇到一些复杂情况,还是需要用到第三方工具进行分析排查,不仅费时还费力。作为 PaaS 平台,我们研发了 Erda Dashboard,统一了使用体验。​

简介

Erda DashBoard 是一套自研的仪表盘系统,前端基于 Echarts 和 React-grid-layout,后端采用 Influxql 时序查询语言与自研的 Metrics Search Engine,被 Erda 上绝大多数图表所采用,包含了自定义仪表盘等功能。​


架构简图


出于需要对大量数据进行存储与分析的考虑,且大多数场景需要借助时间生成时序图、需要在数千万条数据中进行搜索,压力非常大;除此之外,我们还有定制化的需求,这就决定了组件必须是开源的。结合以上种种原因,我们采用了分布式开源的 ElasticSearch 进行存储,并对其进行了改造,结构如下:​


    {        "_index": "spot-application_cache-full_cluster-r-000001",        "_type": "spot",        "_id": "xxx",        "_score": 1,        "_source": {          "name": "application_cache",          "timestamp": 1621564500000000000,          "tags": {            "_meta": "true",            "source_application_id": "9",            "source_application_name": "xxx",            "source_org_id": "1",            "source_project_id": "5",            "source_project_name": "xxx",            "source_runtime_id": "26",            "source_runtime_name": "xxx",            "source_service_id": "xxx",            "source_service_instance_id": "xxx",            "source_service_name": "xxx",            "source_workspace": "DEV",          },          "fields": {            "elapsed_count": 2,            "elapsed_max": 345831,            "elapsed_mean": 331554,            "elapsed_min": 317277,            "elapsed_sum": 663108          },          "@timestamp": 1621564500000        }    }
复制代码


考虑到易用性与通用性,我们摒弃了原生的 DSL 查询方式,封装了时序查询语言 Influxql 并对其做了定制化作为高级功能,用以实现复杂的查询与分析。对与普通的分析,我们使用 Low Code + 自定义函数表达式的搭配快速产出分析图表。​

初步使用

在 Erda MSP 中,我们提供了大量的内置表盘来帮助排查系统的常见问题,如进程分析、错误分析、链路追踪、事务分析等。


这些表盘由多个不同的图表组成,我们可以对其单个图表进行操作与调整时间范围:



当时间跨度大,数据量繁多的情况下,可以全屏查看用以统计走势或具体分析:​



产品特性

运维大盘

运维大盘,也称之为仪表盘,用以给开发人员与运维人员产生高度可定制化的分析图表,目前存在于多云管理平台与微服务治理平台中,提供高自由度、可扩展、高定制化的图表。​



进入新建运维大盘 ->> 添加图表后,即可进入图表编辑器,提供丰富的配置功能:​



如指标分组(FROM)、维度(GROUP BY)、值(SELECT)、结果筛选器(WHERE)、结果排序(ORDER BY)、结果截取(LIMIT)等,与 SQL 一一对应,简单配置后产生图表,保存即可生成表盘。​



多种不同的时序图,可以无缝切换图表类型展现:​



为支持更多复杂查询与分析,提供 SQL 方式查询,自由排列组合:​



提供导出功能,一键生成表盘快照、用以共享:​



扩展与自定义函数

Erda Dashboard 提供了丰富的自定义扩展方法,例如:​


  • diffps:用以计算磁盘 IO、网络 IO 等速率值。



如 docker container 的一些原生指标是没有速率值,只有 Counter 值,比如网络 IO,这个时候就需要对 Counter 值进行处理以计算速率,一般的解决方案是用流计算引擎类似 Flink 进行二次聚合,但并不通用且会造成依赖,如自定义指标,我们选择在查询端实现,并且支持分组。​


   SELECT time(),application_name::tag,diffps(rx_bytes::field)   FROM docker_container_summary    GROUP BY time(),application_name::tag   Limit 5
复制代码



  • 使用时序图+自定义表达式后,更加直观清晰。


愿景

未来,Erda Dashboard 将会统一 Erda MSP 上所有图表,并且会扩展更多丰富的图表类型与自定义方法,以及支持更多的数据源,在规划中的模板市场可以实现秒建表盘、组织内分享、公开市场等,使运维与开发效率达到极大提升。并且与告警系统联动形成分析报告,早日达成 “1 分钟发现问题,3 分钟定位故障跟因” 的目标。​

欢迎参与开源

Erda 作为开源的一站式云原生 PaaS 平台,具备 DevOps、微服务观测治理、多云管理以及快数据治理等平台级能力。点击下方链接即可参与开源,和众多开发者一起探讨、交流,共建开源社区。欢迎大家关注、贡献代码和 Star!​


发布于: 4 小时前阅读数: 5
用户头像

尔达Erda

关注

还未添加个人签名 2021.06.16 加入

还未添加个人简介

评论

发布
暂无评论
上手后才知道,这套仪表盘系统用起来是真的爽!