• NCC Mocha v0.1.0 发布,.NET 开发的基于 OpenTelemetry 的 APM 系统


    项目简介#

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

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

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

    项目进度#

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

    v0.1.0 发布内容#

    • 支持 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 数据。

  • 相关阅读:
    【机器学习】随机森林、AdaBoost、GBDT、XGBoost从零开始理解
    Spring Cloud Alibaba【实时监控数据、Sentinel为什么需要持久化 、Sentinel组件二次开发、认识本地事物 、事务的四大特性ACID】(九)
    Android 13 定制化开发--开启相机或麦克风时,去掉状态栏上的绿色图标
    CleanMyMac4.11.1中文完整语言版本
    【机器学习】拟合优度度量和梯度下降(红酒数据集的线性回归模型sklearn&Ridge)
    pyspark常用功能记录
    一网打尽——线粒体基因组高级分析
    【情感识别】BP神经网络语音情感识别【含Matlab源码 349期】
    计算机二级备考:Word 部分_1文件操作
    Live800:一个优秀的客服应具备哪些技能?
  • 原文地址:https://www.cnblogs.com/eventhorizon/p/17979677