做者|张安哲(落羽)
来源|尔达Erda公众号前端
导读:为了让你们更好的了解 MSP 中 APM 系统的设计实现,咱们决定编写一个《详聊微服务观测》系列文章,深刻 APM 系统的产品、架构设计和基础技术。本文为该系列文章的第二篇,主要分享了咱们自研的仪表盘系统 Erda DashBoard 的使用操做及将来愿景。
《详聊微服务观测》系列文章:git
容器化与微服务,使系统扩展性与鲁棒性相比以往提高了许多,但随之也带来了问题:运维的任务与工做量日渐繁重。github
构成这一应用的微服务以及支撑这一应用的全部基础设施,都会有各自的日志、指标数据,以及构建在上游的监控、日志系统。各处分散的数据和系统,会给支持团队形成极大的负担,最终也会成为开发运维工做的拦路虎。
docker
咱们已经统一了不一样服务的日志、数据、指标等的分析与聚合及存储,但不一样租户、应用、服务、实例可能都须要一套本身的具像化监控用以分析排查,这给监控灵活性带来了极大挑战。segmentfault
时至今日,市面上已然出现了许多自定义、可视化的开源表盘,如 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 + 自定义函数表达式的搭配快速产出分析图表。
app
在 Erda MSP 中,咱们提供了大量的内置表盘来帮助排查系统的常见问题,如进程分析、错误分析、链路追踪、事务分析等。运维
这些表盘由多个不一样的图表组成,咱们能够对其单个图表进行操做与调整时间范围:
当时间跨度大,数据量繁多的状况下,能够全屏查看用以统计走势或具体分析:
运维大盘,也称之为仪表盘,用以给开发人员与运维人员产生高度可定制化的分析图表,目前存在于多云管理平台与微服务治理平台中,提供高自由度、可扩展、高定制化的图表。
进入新建运维大盘 ->> 添加图表后,便可进入图表编辑器,提供丰富的配置功能:
如指标分组(FROM)、维度(GROUP BY)、值(SELECT)、结果筛选器(WHERE)、结果排序(ORDER BY)、结果截取(LIMIT)等,与 SQL 一一对应,简单配置后产生图表,保存便可生成表盘。
多种不一样的时序图,能够无缝切换图表类型展示:
为支持更多复杂查询与分析,提供 SQL 方式查询,自由排列组合:
提供导出功能,一键生成表盘快照、用以共享:
Erda Dashboard 提供了丰富的自定义扩展方法,例如:
如 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!