diff --git a/Mocha.sln b/Mocha.sln index 8b63932..7acd0a3 100644 --- a/Mocha.sln +++ b/Mocha.sln @@ -23,7 +23,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution LICENSE = LICENSE README.md = README.md .github\workflows\dotnet-build.yml = .github\workflows\dotnet-build.yml - docker-compose.yml = docker-compose.yml + README.zh-CN.md = README.zh-CN.md EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mocha.Storage", "src\Mocha.Storage\Mocha.Storage.csproj", "{8EEB6697-B975-430D-9CC3-3048E76C5ECA}" @@ -41,6 +41,21 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "mysql", "mysql", "{1DCDFC33 scripts\mysql\init.sql = scripts\mysql\init.sql EndProjectSection EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docker", "docker", "{D598862A-999C-40FD-A190-EBD00376D077}" + ProjectSection(SolutionItems) = preProject + docker\docker-compose.yml = docker\docker-compose.yml + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "distributor", "distributor", "{959DCB4E-A070-4C66-A27F-D83CB933F0D8}" + ProjectSection(SolutionItems) = preProject + docker\distributor\Dockerfile = docker\distributor\Dockerfile + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "jaeger-query", "jaeger-query", "{C7222A9C-C50C-4FF0-A02D-778A9BB4DD2C}" + ProjectSection(SolutionItems) = preProject + docker\jaeger-query\Dockerfile = docker\jaeger-query\Dockerfile + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -57,6 +72,8 @@ Global {FC0D810E-4ACC-4567-95D8-D7F617E412FE} = {24F9E34A-D92A-4C0A-851F-1E864181BF97} {DC281C3B-455F-4391-92EF-D5D99FC2B9AA} = {6983D239-07DA-4DFA-9AAA-F6876029FF8D} {1DCDFC33-1401-4CCA-AAAE-FC150AD147F5} = {53AF2923-4CB8-44C8-885B-B0EEB8574FEB} + {959DCB4E-A070-4C66-A27F-D83CB933F0D8} = {D598862A-999C-40FD-A190-EBD00376D077} + {C7222A9C-C50C-4FF0-A02D-778A9BB4DD2C} = {D598862A-999C-40FD-A190-EBD00376D077} EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {DCA600F0-4D6C-44DA-A493-F63097CCE74E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU diff --git a/README.md b/README.md index 4296e70..28d7283 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,18 @@ Mocha ===== -[![codecov](https://codecov.io/gh/dotnetcore/mocha/branch/main/graph/badge.svg)](https://app.codecov.io/gh/dotnetcore/mocha) +[![codecov](https://codecov.io/gh/dotnetcore/mocha/graph/badge.svg?token=v9OE7dV8ZS)](https://codecov.io/gh/dotnetcore/mocha) + +[English](./README.md) | [简体中文](./README.zh-CN.md) Mocha is an application performance monitor tools based on [OpenTelemetry](https://opentelemetry.io), which also provides a scalable platform for observability data analysis and storage. ## Quick Start In the beta phase, we provide a Docker Compose file for users to experience our system locally. -[Quick Start 简体中文](./docs/quick-start/docker-compose/quick-start.zh-CN.md) ++ [Quick Start](./docs/quick-start/docker-compose/quick-start.en-US.md) -## Functional architecture +## Functional Architecture ![](./docs/assets/functional_architecture.png) The set of features that Mocha will provide: @@ -30,7 +32,7 @@ The set of features that Mocha will provide: - Alert notifications - Metrics/Logs/Traces data explore -## Technical architecture +## Technical Architecture ![](./docs/assets/technical_architecture.png) The components of Mocha are as follows: diff --git a/README.zh-CN.md b/README.zh-CN.md new file mode 100644 index 0000000..7361caa --- /dev/null +++ b/README.zh-CN.md @@ -0,0 +1,50 @@ +Mocha +===== + +[![codecov](https://codecov.io/gh/dotnetcore/mocha/graph/badge.svg?token=v9OE7dV8ZS)](https://codecov.io/gh/dotnetcore/mocha) + +[English](./README.md) | [简体中文](./README.zh-CN.md) + +Mocha 是一个基于 [OpenTelemetry](https://opentelemetry.io) 的 APM 系统,同时提供可伸缩的可观测性数据分析和存储平台。 + +## 快速开始 +现阶段,我们提供了 Docker Compose 文件,方便用户在本地体验我们的系统。 + ++ [快速开始](./docs/quick-start/docker-compose/quick-start.zh-CN.md) + +# 平台功能 +![](./docs/assets/functional_architecture.png) +Mocha 将要提供的功能集合: +- APM 和 分布式追踪 + - 服务概览、R.E.D 指标和可用性监控 + - 服务拓扑 + - 调用监控,包括 HTTP、RPC、Cache、DB、MQ 等 + - 调用链路查询和检索 +- 基础设施监控 + - 主机监控 + - 容器和 Kubernetes 监控 + - 主流中间件监控 +- 日志 + - 日志查询 + - 日志聚合分析 +- 报警 + - 报警规则管理 + - 报警通知 +- M.T.L 数据探索 [Data Explore / Inspect] + +# 技术架构 +![](./docs/assets/technical_architecture.png) + +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 采集套件。 + +## 参与贡献 +参与贡献的最简单的方式是参与讨论并讨论问题。您也可以通过提交代码更改的拉取请求来进行贡献。 + +## 许可证 +Mocha 是在 MIT 许可下发布的。有关详细信息,请参阅 [LICENSE](LICENSE) 文件。 diff --git a/src/Mocha.Distributor/Dockerfile b/docker/distributor/Dockerfile similarity index 100% rename from src/Mocha.Distributor/Dockerfile rename to docker/distributor/Dockerfile diff --git a/docker-compose.yml b/docker/docker-compose.yml similarity index 84% rename from docker-compose.yml rename to docker/docker-compose.yml index 3ee4e52..70dba7f 100644 --- a/docker-compose.yml +++ b/docker/docker-compose.yml @@ -3,6 +3,8 @@ version: "3.8" +name: mocha + services: mysql: image: mysql:8.2.0 @@ -17,8 +19,9 @@ services: expose: - "3306" volumes: - - ./scripts/mysql/init.sql:/docker-entrypoint-initdb.d/init.sql + - ../scripts/mysql/init.sql:/docker-entrypoint-initdb.d/init.sql # - ./mysql:/var/lib/mysql + restart: always networks: - mocha @@ -29,13 +32,14 @@ services: - "3000:3000" # volumes: # - ./grafana:/var/lib/grafana + restart: always networks: - mocha distributor: build: - context: . - dockerfile: ./src/Mocha.Distributor/Dockerfile + context: .. + dockerfile: ./docker/distributor/Dockerfile container_name: mocha-distributor ports: - "4317:4317" @@ -53,8 +57,8 @@ services: jaeger-query: build: - context: . - dockerfile: ./src/Mocha.Query.Jaeger/Dockerfile + context: .. + dockerfile: ./docker/jaeger-query/Dockerfile container_name: mocha-jaeger-query ports: - "5775:5775" @@ -66,6 +70,7 @@ services: - Logging__LogLevel__Microsoft.EntityFrameworkCore=Warning depends_on: - mysql + restart: always networks: - mocha diff --git a/src/Mocha.Query.Jaeger/Dockerfile b/docker/jaeger-query/Dockerfile similarity index 100% rename from src/Mocha.Query.Jaeger/Dockerfile rename to docker/jaeger-query/Dockerfile diff --git a/docs/quick-start/docker-compose/asserts/add-jaeger-data-source-error.png b/docs/quick-start/docker-compose/asserts/add-jaeger-data-source-warning.png similarity index 100% rename from docs/quick-start/docker-compose/asserts/add-jaeger-data-source-error.png rename to docs/quick-start/docker-compose/asserts/add-jaeger-data-source-warning.png diff --git a/docs/quick-start/docker-compose/asserts/query-trace-2.png b/docs/quick-start/docker-compose/asserts/query-trace-2.png new file mode 100644 index 0000000..ef7fa6e Binary files /dev/null and b/docs/quick-start/docker-compose/asserts/query-trace-2.png differ diff --git a/docs/quick-start/docker-compose/asserts/query-trace.png b/docs/quick-start/docker-compose/asserts/query-trace.png new file mode 100644 index 0000000..4d7b080 Binary files /dev/null and b/docs/quick-start/docker-compose/asserts/query-trace.png differ diff --git a/docs/quick-start/docker-compose/quick-start.en-US.md b/docs/quick-start/docker-compose/quick-start.en-US.md new file mode 100644 index 0000000..a2cc02b --- /dev/null +++ b/docs/quick-start/docker-compose/quick-start.en-US.md @@ -0,0 +1,53 @@ +## Start the Project + +Execute the following command in the docker directory under the project root directory to start the project: + +```bash +docker-compose up -d +``` + +After the startup is successful, you can see the following containers: + ++ distributor: Provides gRPC API for receiving OTLP data ++ jaeger-query: Provides HTTP API for receiving Jaeger query protocol ++ mysql: Used to store data ++ grafana: Used to display data + +## Send Trace Data + +Configure the OTLP exporter of the SDK as `http://localhost:4317` to send data to the distributor. + +## Configure Jaeger Data Source + +We have implemented an API that supports the Jaeger query protocol, so you can configure the Jaeger data source directly in Grafana. + +Visit http://localhost:3000/ to see the grafana login page. Both the username and password are admin. + +After logging in, click the menu on the left, select Data Sources, and then click Add data source. + +![](./asserts/add-jaeger-data-source.png) + +![](./asserts/add-jaeger-data-source-2.png) + +Select Jaeger. +![](./asserts/add-jaeger-data-source-3.png) + +Configure the URL of the Jaeger data source as `http://jaeger-query:5775`. + +![](./asserts/add-jaeger-data-source-4.png) + +Click Save & Test. If the following information is displayed, the configuration is successful. + +![](./asserts/add-jaeger-data-source-5.png) + +If no data has been sent to the distributor yet, the following warning message will be displayed. + +![](./asserts/add-jaeger-data-source-warning.png) + +## Query Trace Data + +Click the menu on the left, select Explore, and then select the Jaeger data source to see the Trace data. + +![](./asserts/query-trace.png) + +![](./asserts/query-trace-2.png) \ No newline at end of file diff --git a/docs/quick-start/docker-compose/quick-start.zh-CN.md b/docs/quick-start/docker-compose/quick-start.zh-CN.md index 9dc67f5..769db3d 100644 --- a/docs/quick-start/docker-compose/quick-start.zh-CN.md +++ b/docs/quick-start/docker-compose/quick-start.zh-CN.md @@ -1,6 +1,6 @@ ## 启动项目 -在项目根目录下,执行以下命令启动项目: +在项目根目录下的docker目录中,执行以下命令启动项目: ```bash docker-compose up -d @@ -17,7 +17,7 @@ docker-compose up -d 将 SDK 的 OTLP exporter 配置为 `http://localhost:4317` 即可将数据发送到 distributor。 -## Trace 数据的查询 +## 配置 Jaeger 数据源 我们实现了支持 Jaeger 查询协议的 API,因此可以直接在 Grafana 中配置 Jaeger 数据源。 @@ -38,5 +38,12 @@ docker-compose up -d 点击 Save & Test,如果显示如下信息,则说明配置成功。 ![](./asserts/add-jaeger-data-source-5.png) -这边建议先往 Distributor 发送一些数据,然后再点击 Save & Test,否则会报错。 -![](./asserts/add-jaeger-data-source-error.png) +如果还没往 distributor 发送过数据,会显示如下警告信息。 +![](./asserts/add-jaeger-data-source-warning.png) + +## Trace 数据的查询 + +点击左侧的菜单,选择 Explore,然后选择 Jaeger 数据源,即可看到 Trace 数据。 +![](./asserts/query-trace.png) + +![](./asserts/query-trace-2.png) \ No newline at end of file diff --git a/src/Mocha.Distributor/Mocha.Distributor.csproj b/src/Mocha.Distributor/Mocha.Distributor.csproj index 4915fe2..fbdcda1 100644 --- a/src/Mocha.Distributor/Mocha.Distributor.csproj +++ b/src/Mocha.Distributor/Mocha.Distributor.csproj @@ -19,10 +19,4 @@ - - - .dockerignore - - - diff --git a/src/Mocha.Query.Jaeger/Mocha.Query.Jaeger.csproj b/src/Mocha.Query.Jaeger/Mocha.Query.Jaeger.csproj index 247bbde..778dcf6 100644 --- a/src/Mocha.Query.Jaeger/Mocha.Query.Jaeger.csproj +++ b/src/Mocha.Query.Jaeger/Mocha.Query.Jaeger.csproj @@ -14,14 +14,8 @@ - - - - - - - .dockerignore - + +