项目简介

Mocha 是一个基于 .NET 开发的 APM 系统,同时提供可伸缩的可观测性数据分析和存储平台。

项目地址:https://github.com/dotnetcore/mocha

注意:使用 git clone --recursive 克隆本仓库以及子模块。

项目进度

目前项目处于早期阶段,已经完成了对 Trace 的基础支持,可以通过 OTel SDK 上报数据到 Mocha Distributor,然后通过 Grafana 展示。

v0.10 发布内容

  • 支持 OTel Trace 数据上报
  • 支持通过 Grafana 展示 Trace 数据
  • 提供 Docker Compose 本地体验方案

项目背景

近年来,可观测性概念被提出和逐渐流行,OpenTelemetry 也逐渐成为最流行的可观测性框架,OTel 很好的解决了多语言系统中Metrics\Trace\Log 的收集和标准化问题,但对于如何存储和分析使用收集到的 M.T.L 数据,业界并没有统一的方案,一般来说大家需要

  1. 使用 Jaeger、Prometheus、Loki 等不同的后端系统搭配,但引入了相当的复杂度
  2. 或者引入 SkyWalking 、ElasticAPM 等 APM 系统
  3. 或者使用 Datadog、SLS 等 SaaS 可观测性平台,需要支付昂贵的流量和数据存储费用

同时上述提到的开源 APM 后端,除 SkyWalking [Java实现]外,其余无一例外使用 Golang 实现。

而从 .NET 5 以来,到目前的 .NET 8,每一个版本都对 CLR 和 BCL做了大量性能优化和提供了面向高性能场景的新语言特性,.NET 的演进很适合开发高性能的云原生中间件。所以我们发起 mocha 项目,使用 .NET 实现一个面向大规模可观测性数据分析和存储的平台。

平台功能



Mocha 将要提供的功能集合:

  • APM 和 分布式追踪

    • 服务概览、R.E.D 指标和可用性监控
    • 服务拓扑
    • 调用监控,包括 HTTP、RPC、Cache、DB、MQ 等
    • 调用链路查询和检索
  • 基础设施监控
    • 主机监控
    • 容器和 Kubernetes 监控
    • 主流中间件监控
  • 日志
    • 日志查询
    • 日志聚合分析
  • 报警
    • 报警规则管理
    • 报警通知
  • M.T.L 数据探索 [Data Explore / Inspect]

技术架构

Mocha 整体架构由下面的部分组成

  • Mocha Distributor Cluster:作为 mocha 系统的数据入口,负责接收 OTel SDK 和 Collector 上报的数据,并通过一致性Hash 将数据路由到对应的 aggregator 节点上。为了保证数据不丢失,最终 Distributor 应该具备本地 FIFO 队列的能力。
  • Mocha Streaming Cluster:mocha 的核心组件,通过读取预配置或者用户配置的 aggr rule dsl 生成对应的 streaming data flow 并执行。Streaming 是具备分布式 shuffle 的能力的有状态组件,需要将自身信息注册到ETCD中。
  • Storage:mocha M.T.L 存储,可以选用开源存储组件,如 ClickHouse、ElasticSearch、victoriametrics 等。
  • Mocha Querier + Grafana: 从存储查询数据并提供给 grafana 做展示。因此要兼容 promql / jeager / loki 等数据源的查询。
  • Mocha Manager : 包括 manager server、dashboard和ETCE组件,集群元数据和 M.T.L 数据分析规则存储。
  • OTel SDK / Collector : 开源 OpenTelemetry 采集套件。

v0.10 快速体验

启动项目

在项目根目录下的docker目录中,执行以下命令启动项目:

docker-compose up -d

启动成功后,可以看到以下容器:

  • distributor: 提供用于接收 OTLP 数据的 gRPC API
  • jaeger-query: 提供用于接收 Jaeger 查询协议的 HTTP API
  • mysql: 用于存储数据
  • grafana: 用于展示数据

Trace 数据的发送

将 SDK 的 OTLP exporter 配置为 http://localhost:4317 即可将数据发送到 distributor。

配置 Jaeger 数据源

我们实现了支持 Jaeger 查询协议的 API,因此可以直接在 Grafana 中配置 Jaeger 数据源。

访问 http://localhost:3000/ 即可看到grafana的登录页面。用户名和密码都是admin。

登录后,点击左侧的菜单,选择 Data Sources,然后点击 Add data source。

选择 Jaeger。

配置 Jaeger 数据源的 URL 为 http://jaeger-query:5775。

点击 Save & Test,如果显示如下信息,则说明配置成功。

如果还没往 distributor 发送过数据,会显示如下警告信息。

Trace 数据的查询

点击左侧的菜单,选择 Explore,然后选择 Jaeger 数据源,即可看到 Trace 数据。

NCC Mocha v0.10 发布, .NET 开发的基于 OpenTelemetry 的 APM 系统的更多相关文章

  1. 《深入浅出Windows 10通用应用开发》

        <深入浅出Windows 10通用应用开发>采用Windows 10的SDK进行重新改版,整合了<深入浅出Windows Phone 8.1应用开发>和<深入解析 ...

  2. Upstart 1.10 发布,系统初始化守护进程

    Upstart 是一个用以替换 /sbin/init 守护进程的软件,基于事件机制开发.可用来处理启动过程中的任务和服务启动. Upstart 1.10 发布,改进记录: New bridges: u ...

  3. [转]Birdfont 2.10 发布,字体编辑器

    最近在忙大数据.黑天鹅算法实盘测试 许久没有更新字库方面的资料,汗一个... 今天转一个 :Birdfont 2.10 发布,字体编辑器 字体编辑器,向来很少,除了fontlab的几个昂贵的商业版,就 ...

  4. JavaScript 工具库:Cloudgamer JavaScript Library v0.1 发布

    JavaScript 工具库:Cloudgamer JavaScript Library v0.1 发布   研究了一年多的js,也差不多写一个自己的js库了.我写这个不算框架,只是一个小型的js工具 ...

  5. 【我的Android进阶之旅】快速创建和根据不同的版本类型(Dev、Beta、Release)发布Android 开发库到Maven私服

    前言 由于项目越来越多,有很多公共的代码都可以抽取出一个开发库出来传到公司搭建好的Maven私服,以供大家使用. 之前搭建的Maven仓库只有Release和Snapshot两个仓库,最近由于开发库有 ...

  6. React Native v0.4 发布,用 React 编写移动应用

    React Native v0.4 发布,自从 React Native 开源以来,包括超过 12.5k stars,1000 commits,500 issues,380 pull requests ...

  7. Ubuntu 19.10 发布 | 云原生生态周报 Vol. 24

    作者 | 木苏.进超.冬岛.元毅.心水.衷源 业界要闻 1.云原生编程语言 Pulumi 1.0 pulumi ,一款中立的开源云开发平台,Pulumi 支持多语言.混合云环境.完全可扩展.初期支持 ...

  8. 10款html5开发工具,实用+好用

    利用HTML5工具不仅可以帮助设计师和开发者创建更具吸引力的网站,还能增加网站的可用性和可访问性.本文收集了10款HTML5开发工具让你在网页中搭建特效.动画.视频.音频等诸多功能,为你节省更多开发时 ...

  9. CentOS安装NodeJS v0.10.25 + Express

    安装必需组件 yum -y install gcc make gcc-c++ openssl-devel wget cd ~wget http://nodejs.org/dist/v0.10.25/n ...

  10. 10 款提高开发效率的 jQuery/CSS3 组件

    前端开发是一项十分繁琐而又耗体力的工作,如何更有效率的开发我们的应用,很多人会选择适当地使用一些jQuery插件.今天就要给大家分享10款可以提高开发效率的jQuery/CSS3组件.部分插件可以下载 ...

随机推荐

  1. pinia入门案例-获取频道分类列表并渲染

    使用pinia的action异步获取频道分类列表数据并渲染到页面中. 接口: GET请求,http://geek.itheima.net/v1_0/channels store/channel.js ...

  2. 安装了华企盾DSC防泄密,所有进程的加密文件都无法打开

    用pchunter等工具查看系统回调中是否有文件厂商不存在的(system目录的除外),在恢复模式删除掉,或者用360系统急救箱查杀一下

  3. Python——第一章:循环语句while——break和continue

    while True: content = input("请输入你要发送的内容(q结束):") print("发送内容:", content) 这样的代码会无限 ...

  4. 斯坦福课程 UE4 C++ ActionRoguelike游戏实例教程 01.基础AI与行为树

    斯坦福课程 UE4 C++ ActionRoguelike游戏实例教程 0.绪论 前言&摘要 本篇文章是基于斯坦福UE4 C++课程的学习记录.因为B站用户surkea由于学业原因,暂停了课程 ...

  5. 神经网络基础篇:详解导数(Derivatives)

    导数 一个函数\(f(a)=3a\),它是一条直线.下面来简单理解下导数.让 看看函数中几个点,假定\(a=2\),那么\(f(a)\)是\(a\)的3倍等于6,也就是说如果\(a=2\),那么函数\ ...

  6. 一图看懂华为云CodeArts Link六大特性

    本文分享自华为云社区<一图看懂华为云CodeArts Link六大特性,带你体验一站式跨平台数据互联>,作者:华为云PaaS服务小智 . 能够打破不同研发工具之间的壁垒,实现数据的无缝集成 ...

  7. 【API进阶之路】太秃然了,老板要我一周内检测并导入一万个小时的视频

    摘要:假期结束后回来上班,走进电梯都有一种特别的感觉,电梯那个植发广告里的大哥看我的眼神好像和之前不太一样- 上回说到,老板奖励7天带薪假,我就回家玩耍了几天,顺便还帮兄弟发不脱当了一回"A ...

  8. 云小课|手把手教您在PyCharm中连接云端资源进行代码调试

    摘要:让我们看看如何在PyCharm中连接云端资源进行代码调试吧! 本文分享自华为云社区<[云小课]EI第54课 手把手教您在PyCharm中连接云端资源进行代码调试>,作者:Hello ...

  9. DevCloud加持下的青软,让教育“智”上云端

    摘要:构建多体系人才云实践环境,提供企业所需人才培养平台,构建以学习为中心的全新教育生态. 本文分享自华为云社区<[云享·伙伴]第5期:华为云DevCloud加持下的青软,让教育"智& ...

  10. Flutter加固原理及加密处理

    ​ 引言 为了保护Flutter应用免受潜在的漏洞和攻击威胁,加固是必不可少的措施之一.Flutter加固原理主要包括代码混淆.数据加密.安全存储.反调试与反分析.动态加载和安全通信等多个方面.通过综 ...