From 2433fa47b5b5fad9453e2a137ff7f4347f62d1ec Mon Sep 17 00:00:00 2001 From: EventHorizon <772552754@qq.com> Date: Thu, 8 Jan 2026 13:10:23 +0800 Subject: [PATCH 1/8] move dockerignore --- Mocha.sln | 2 +- .dockerignore => docker/.dockerignore | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename .dockerignore => docker/.dockerignore (100%) diff --git a/Mocha.sln b/Mocha.sln index c3090b3..934fbd3 100644 --- a/Mocha.sln +++ b/Mocha.sln @@ -16,7 +16,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mocha.Core.Tests", "tests\M EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{71D20701-E657-443F-8000-7958FB5E6BD7}" ProjectSection(SolutionItems) = preProject - .dockerignore = .dockerignore .editorconfig = .editorconfig .gitignore = .gitignore .gitmodules = .gitmodules @@ -46,6 +45,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docker", "docker", "{D59886 ProjectSection(SolutionItems) = preProject docker\docker-compose.yml = docker\docker-compose.yml docker\docker-compose-mysql-influxdb.yml = docker\docker-compose-mysql-influxdb.yml + docker\.dockerignore = docker\.dockerignore EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "distributor", "distributor", "{959DCB4E-A070-4C66-A27F-D83CB933F0D8}" diff --git a/.dockerignore b/docker/.dockerignore similarity index 100% rename from .dockerignore rename to docker/.dockerignore From de1c327557de051b7580a0ca0741c8879f1b1051 Mon Sep 17 00:00:00 2001 From: EventHorizon <772552754@qq.com> Date: Thu, 8 Jan 2026 13:59:07 +0800 Subject: [PATCH 2/8] Update Mocha.Protocol.Generated.csproj --- src/Mocha.Protocol.Generated/Mocha.Protocol.Generated.csproj | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Mocha.Protocol.Generated/Mocha.Protocol.Generated.csproj b/src/Mocha.Protocol.Generated/Mocha.Protocol.Generated.csproj index fc516fd..deacf23 100644 --- a/src/Mocha.Protocol.Generated/Mocha.Protocol.Generated.csproj +++ b/src/Mocha.Protocol.Generated/Mocha.Protocol.Generated.csproj @@ -17,8 +17,6 @@ + ProtoRoot="..\..\proto\otlp" /> From f8d29adfd2a2a955be29fbfb5174c752a67b0e05 Mon Sep 17 00:00:00 2001 From: EventHorizon <772552754@qq.com> Date: Thu, 8 Jan 2026 15:26:57 +0800 Subject: [PATCH 3/8] Update Mocha.Antlr4.Generated.csproj --- src/Mocha.Antlr4.Generated/Mocha.Antlr4.Generated.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mocha.Antlr4.Generated/Mocha.Antlr4.Generated.csproj b/src/Mocha.Antlr4.Generated/Mocha.Antlr4.Generated.csproj index ceabae6..1d35b3a 100644 --- a/src/Mocha.Antlr4.Generated/Mocha.Antlr4.Generated.csproj +++ b/src/Mocha.Antlr4.Generated/Mocha.Antlr4.Generated.csproj @@ -8,7 +8,7 @@ - + From 24fa421f7ed630bfe5860905b97598ad6253d860 Mon Sep 17 00:00:00 2001 From: Event Horizon <772552754@qq.com> Date: Thu, 8 Jan 2026 21:02:48 +0800 Subject: [PATCH 4/8] try fix docker file --- docker/.dockerignore | 3 ++- docker/distributor/Dockerfile | 2 ++ docker/query/Dockerfile | 2 ++ src/Mocha.Distributor/Mocha.Distributor.csproj | 4 ++-- .../Mocha.Protocol.Generated.csproj | 10 ++++++---- 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/docker/.dockerignore b/docker/.dockerignore index 38bece4..e1c132c 100644 --- a/docker/.dockerignore +++ b/docker/.dockerignore @@ -21,5 +21,6 @@ **/obj **/secrets.dev.yaml **/values.dev.yaml +**/*.db +**/*.md LICENSE -README.md \ No newline at end of file diff --git a/docker/distributor/Dockerfile b/docker/distributor/Dockerfile index 47201f7..89f46f2 100644 --- a/docker/distributor/Dockerfile +++ b/docker/distributor/Dockerfile @@ -10,6 +10,8 @@ COPY ["src/Mocha.Protocol.Generated/Mocha.Protocol.Generated.csproj", "src/Mocha COPY ["src/Mocha.Storage/Mocha.Storage.csproj", "src/Mocha.Storage/"] RUN dotnet restore "src/Mocha.Distributor/Mocha.Distributor.csproj" COPY . . +WORKDIR "src/Mocha.Protocol.Generated" +RUN dotnet build "Mocha.Protocol.Generated.csproj" -c $BUILD_CONFIGURATION WORKDIR "/src/src/Mocha.Distributor" RUN dotnet build "Mocha.Distributor.csproj" -c $BUILD_CONFIGURATION -o /app/build diff --git a/docker/query/Dockerfile b/docker/query/Dockerfile index b6101a6..8915dc7 100644 --- a/docker/query/Dockerfile +++ b/docker/query/Dockerfile @@ -18,6 +18,8 @@ COPY ["src/Mocha.Protocol.Generated/Mocha.Protocol.Generated.csproj", "src/Mocha COPY ["src/Mocha.Storage/Mocha.Storage.csproj", "src/Mocha.Storage/"] RUN dotnet restore "src/Mocha.Query/Mocha.Query.csproj" COPY . . +WORKDIR "src/Mocha.Antlr4.Generated" +RUN dotnet build "Mocha.Antlr4.Generated.csproj" -c $BUILD_CONFIGURATION WORKDIR "/src/src/Mocha.Query" RUN dotnet build "Mocha.Query.csproj" -c $BUILD_CONFIGURATION -o /app/build diff --git a/src/Mocha.Distributor/Mocha.Distributor.csproj b/src/Mocha.Distributor/Mocha.Distributor.csproj index fbdcda1..8f04d3f 100644 --- a/src/Mocha.Distributor/Mocha.Distributor.csproj +++ b/src/Mocha.Distributor/Mocha.Distributor.csproj @@ -9,8 +9,8 @@ - - + + diff --git a/src/Mocha.Protocol.Generated/Mocha.Protocol.Generated.csproj b/src/Mocha.Protocol.Generated/Mocha.Protocol.Generated.csproj index deacf23..bcc15b1 100644 --- a/src/Mocha.Protocol.Generated/Mocha.Protocol.Generated.csproj +++ b/src/Mocha.Protocol.Generated/Mocha.Protocol.Generated.csproj @@ -8,15 +8,17 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive + ProtoRoot="..\..\proto\otlp" + OutputDir="%(RelativePath)generated" + CompileOutputs="false" /> From 00ff2de07636fb3b05367e94e1223a022a0d797d Mon Sep 17 00:00:00 2001 From: EventHorizon <772552754@qq.com> Date: Fri, 9 Jan 2026 08:32:47 +0800 Subject: [PATCH 5/8] optimize dockerfile --- docker/distributor/Dockerfile | 16 ++++++++-------- docker/query/Dockerfile | 18 +++++++++--------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/docker/distributor/Dockerfile b/docker/distributor/Dockerfile index 89f46f2..a35a366 100644 --- a/docker/distributor/Dockerfile +++ b/docker/distributor/Dockerfile @@ -4,15 +4,15 @@ WORKDIR /app FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build ARG BUILD_CONFIGURATION=Release WORKDIR /src -COPY ["src/Mocha.Distributor/Mocha.Distributor.csproj", "src/Mocha.Distributor/"] -COPY ["src/Mocha.Core/Mocha.Core.csproj", "src/Mocha.Core/"] -COPY ["src/Mocha.Protocol.Generated/Mocha.Protocol.Generated.csproj", "src/Mocha.Protocol.Generated/"] -COPY ["src/Mocha.Storage/Mocha.Storage.csproj", "src/Mocha.Storage/"] -RUN dotnet restore "src/Mocha.Distributor/Mocha.Distributor.csproj" -COPY . . -WORKDIR "src/Mocha.Protocol.Generated" +COPY ["src/Mocha.Distributor/Mocha.Distributor.csproj", "Mocha.Distributor/"] +COPY ["src/Mocha.Core/Mocha.Core.csproj", "Mocha.Core/"] +COPY ["src/Mocha.Protocol.Generated/Mocha.Protocol.Generated.csproj", "Mocha.Protocol.Generated/"] +COPY ["src/Mocha.Storage/Mocha.Storage.csproj", "Mocha.Storage/"] +RUN dotnet restore "Mocha.Distributor/Mocha.Distributor.csproj" +COPY src/ . +WORKDIR "/src/Mocha.Protocol.Generated" RUN dotnet build "Mocha.Protocol.Generated.csproj" -c $BUILD_CONFIGURATION -WORKDIR "/src/src/Mocha.Distributor" +WORKDIR "/src/Mocha.Distributor" RUN dotnet build "Mocha.Distributor.csproj" -c $BUILD_CONFIGURATION -o /app/build FROM build AS publish diff --git a/docker/query/Dockerfile b/docker/query/Dockerfile index 8915dc7..92b27c0 100644 --- a/docker/query/Dockerfile +++ b/docker/query/Dockerfile @@ -11,16 +11,16 @@ RUN apt-get update && \ rm -rf /var/lib/apt/lists/* WORKDIR /src -COPY ["src/Mocha.Query/Mocha.Query.csproj", "src/Mocha.Query/"] -COPY ["src/Mocha.Antlr4.Generated/Mocha.Antlr4.Generated.csproj", "src/Mocha.Antlr4.Generated/"] -COPY ["src/Mocha.Core/Mocha.Core.csproj", "src/Mocha.Core/"] -COPY ["src/Mocha.Protocol.Generated/Mocha.Protocol.Generated.csproj", "src/Mocha.Protocol.Generated/"] -COPY ["src/Mocha.Storage/Mocha.Storage.csproj", "src/Mocha.Storage/"] -RUN dotnet restore "src/Mocha.Query/Mocha.Query.csproj" -COPY . . -WORKDIR "src/Mocha.Antlr4.Generated" +COPY ["src/Mocha.Query/Mocha.Query.csproj", "Mocha.Query/"] +COPY ["src/Mocha.Antlr4.Generated/Mocha.Antlr4.Generated.csproj", "Mocha.Antlr4.Generated/"] +COPY ["src/Mocha.Core/Mocha.Core.csproj", "Mocha.Core/"] +COPY ["src/Mocha.Protocol.Generated/Mocha.Protocol.Generated.csproj", "Mocha.Protocol.Generated/"] +COPY ["src/Mocha.Storage/Mocha.Storage.csproj", "Mocha.Storage/"] +RUN dotnet restore "Mocha.Query/Mocha.Query.csproj" +COPY src/ . +WORKDIR "/src/Mocha.Antlr4.Generated" RUN dotnet build "Mocha.Antlr4.Generated.csproj" -c $BUILD_CONFIGURATION -WORKDIR "/src/src/Mocha.Query" +WORKDIR "/src/Mocha.Query" RUN dotnet build "Mocha.Query.csproj" -c $BUILD_CONFIGURATION -o /app/build FROM build AS publish From 68d468f19fdc97fc1cc9422817b339ed6f4834dd Mon Sep 17 00:00:00 2001 From: Event Horizon <772552754@qq.com> Date: Mon, 12 Jan 2026 21:24:49 +0800 Subject: [PATCH 6/8] try disable codecov/project check --- Mocha.sln | 1 + codecov.yml | 3 +++ 2 files changed, 4 insertions(+) create mode 100644 codecov.yml diff --git a/Mocha.sln b/Mocha.sln index 934fbd3..550b725 100644 --- a/Mocha.sln +++ b/Mocha.sln @@ -23,6 +23,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution README.md = README.md .github\workflows\dotnet-build.yml = .github\workflows\dotnet-build.yml README.zh-CN.md = README.zh-CN.md + codecov.yml = codecov.yml EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mocha.Storage", "src\Mocha.Storage\Mocha.Storage.csproj", "{8EEB6697-B975-430D-9CC3-3048E76C5ECA}" diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 0000000..1c76b01 --- /dev/null +++ b/codecov.yml @@ -0,0 +1,3 @@ +coverage: + status: + project: off From eca109f6723f2f4cd8b0e2b7dd2ab2639f446e7b Mon Sep 17 00:00:00 2001 From: Event Horizon <772552754@qq.com> Date: Tue, 13 Jan 2026 22:11:56 +0800 Subject: [PATCH 7/8] fix dockerignore --- docker/.dockerignore => .dockerignore | 0 Mocha.sln | 14 +++- docker/docker-compose-mysql-influxdb.yml | 4 +- docker/docker-compose.yml | 3 +- .../datasources/mocha-datasources.yaml | 23 ++++++ docker/query/Dockerfile | 2 - .../docker-compose/quick-start.en-US.md | 68 +++++++++-------- .../docker-compose/quick-start.zh-CN.md | 73 ++++++++++--------- .../EFToJaegerSpanConversionExtensions.cs | 9 ++- ...LiteDBToJaegerSpanConversionExtensions.cs} | 12 +-- 10 files changed, 131 insertions(+), 77 deletions(-) rename docker/.dockerignore => .dockerignore (100%) create mode 100644 docker/grafana/provisioning/datasources/mocha-datasources.yaml rename src/Mocha.Storage/LiteDB/Trace/Readers/Jaeger/{LiteToJaegerSpanConversionExtensions.cs => LiteDBToJaegerSpanConversionExtensions.cs} (92%) diff --git a/docker/.dockerignore b/.dockerignore similarity index 100% rename from docker/.dockerignore rename to .dockerignore diff --git a/Mocha.sln b/Mocha.sln index 550b725..d7977ed 100644 --- a/Mocha.sln +++ b/Mocha.sln @@ -16,6 +16,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mocha.Core.Tests", "tests\M EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{71D20701-E657-443F-8000-7958FB5E6BD7}" ProjectSection(SolutionItems) = preProject + .dockerignore = .dockerignore .editorconfig = .editorconfig .gitignore = .gitignore .gitmodules = .gitmodules @@ -46,7 +47,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docker", "docker", "{D59886 ProjectSection(SolutionItems) = preProject docker\docker-compose.yml = docker\docker-compose.yml docker\docker-compose-mysql-influxdb.yml = docker\docker-compose-mysql-influxdb.yml - docker\.dockerignore = docker\.dockerignore EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "distributor", "distributor", "{959DCB4E-A070-4C66-A27F-D83CB933F0D8}" @@ -65,6 +65,15 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mocha.Antlr4.Generated", "s EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mocha.Storage.Benchmarks", "tests\Mocha.Storage.Benchmarks\Mocha.Storage.Benchmarks.csproj", "{4B63E7B0-C8C8-4206-A113-A3D4EFB7533E}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "grafana", "grafana", "{5B280BB9-A7AE-46E6-B735-CF484965A736}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "provisioning", "provisioning", "{C6E71F9B-BB5B-4946-9732-96CBA0B366B3}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "datasources", "datasources", "{8FAF9AF6-7399-41FC-96C9-43756AAD16CB}" + ProjectSection(SolutionItems) = preProject + docker\grafana\provisioning\datasources\mocha-datasources.yaml = docker\grafana\provisioning\datasources\mocha-datasources.yaml + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -86,6 +95,9 @@ Global {D56CA47A-A948-4FB5-9E16-C61E12535521} = {24F9E34A-D92A-4C0A-851F-1E864181BF97} {904CC523-A2D4-4982-8A7B-A6A0F5A5EB19} = {6983D239-07DA-4DFA-9AAA-F6876029FF8D} {4B63E7B0-C8C8-4206-A113-A3D4EFB7533E} = {24F9E34A-D92A-4C0A-851F-1E864181BF97} + {5B280BB9-A7AE-46E6-B735-CF484965A736} = {D598862A-999C-40FD-A190-EBD00376D077} + {C6E71F9B-BB5B-4946-9732-96CBA0B366B3} = {5B280BB9-A7AE-46E6-B735-CF484965A736} + {8FAF9AF6-7399-41FC-96C9-43756AAD16CB} = {C6E71F9B-BB5B-4946-9732-96CBA0B366B3} EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {DCA600F0-4D6C-44DA-A493-F63097CCE74E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU diff --git a/docker/docker-compose-mysql-influxdb.yml b/docker/docker-compose-mysql-influxdb.yml index 6c676b0..6113947 100644 --- a/docker/docker-compose-mysql-influxdb.yml +++ b/docker/docker-compose-mysql-influxdb.yml @@ -49,7 +49,9 @@ services: container_name: mocha-grafana ports: - "3000:3000" -# volumes: + volumes: + - ./grafana/provisioning:/etc/grafana/provisioning +# If you want to persist Grafana data, uncomment the following lines # - ./grafana:/var/lib/grafana restart: always networks: diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index a4e5641..33fe9c0 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -12,8 +12,9 @@ services: container_name: mocha-grafana ports: - "3000:3000" + volumes: + - ./grafana/provisioning:/etc/grafana/provisioning # If you want to persist Grafana data, uncomment the following lines -# volumes: # - ./grafana:/var/lib/grafana restart: always networks: diff --git a/docker/grafana/provisioning/datasources/mocha-datasources.yaml b/docker/grafana/provisioning/datasources/mocha-datasources.yaml new file mode 100644 index 0000000..98ffb1a --- /dev/null +++ b/docker/grafana/provisioning/datasources/mocha-datasources.yaml @@ -0,0 +1,23 @@ +apiVersion: 1 + +datasources: + # Tracing (Jaeger) + - name: mocha-tracing + type: jaeger + uid: mocha-tracing + access: proxy + url: http://query:5775/jaeger + isDefault: false + editable: false + + # Metrics (Prometheus API) + - name: mocha-metrics + type: prometheus + uid: mocha-metrics + access: proxy + url: http://query:5775/prometheus + isDefault: true + editable: false + + jsonData: + httpMethod: POST diff --git a/docker/query/Dockerfile b/docker/query/Dockerfile index 92b27c0..90fb357 100644 --- a/docker/query/Dockerfile +++ b/docker/query/Dockerfile @@ -18,8 +18,6 @@ COPY ["src/Mocha.Protocol.Generated/Mocha.Protocol.Generated.csproj", "Mocha.Pro COPY ["src/Mocha.Storage/Mocha.Storage.csproj", "Mocha.Storage/"] RUN dotnet restore "Mocha.Query/Mocha.Query.csproj" COPY src/ . -WORKDIR "/src/Mocha.Antlr4.Generated" -RUN dotnet build "Mocha.Antlr4.Generated.csproj" -c $BUILD_CONFIGURATION WORKDIR "/src/Mocha.Query" RUN dotnet build "Mocha.Query.csproj" -c $BUILD_CONFIGURATION -o /app/build diff --git a/docs/quick-start/docker-compose/quick-start.en-US.md b/docs/quick-start/docker-compose/quick-start.en-US.md index af13312..08c0f0c 100644 --- a/docs/quick-start/docker-compose/quick-start.en-US.md +++ b/docs/quick-start/docker-compose/quick-start.en-US.md @@ -29,13 +29,25 @@ Configure the OTLP exporter of the SDK as `http://localhost:4317` to send data t ## Query Data +Visit http://localhost:3000/ to see the grafana login page. Both the username and password are admin. + ### Trace -#### Configure Jaeger Data Source +#### Query Trace Data -We have implemented an API that supports the Jaeger query protocol, so you can configure the Jaeger data source directly in Grafana. +We have implemented an API that supports the Jaeger query protocol, so you can configure mocha as a Jaeger data source in Grafana to query Trace data. -Visit http://localhost:3000/ to see the grafana login page. Both the username and password are admin. +The Jaeger data source has been pre-configured in `docker/grafana/provisioning/datasources/mocha-datasources.yaml`. + +Click the menu on the left, select Explore, and then select the mocha-tracing data source to see the Trace data. + +![](./assets/query-trace.png) + +![](./assets/query-trace-2.png) + +#### Configure Jaeger Data Source + +If you need to manually configure the Trace data source, you can refer to the following steps. After logging in, click the menu on the left, select Data Sources, and then click Add data source. @@ -61,21 +73,35 @@ If no data has been sent to the distributor yet, the following warning message w ![](./assets/add-jaeger-data-source-warning.png) -#### Query Trace Data +### Metrics -Click the menu on the left, select Explore, and then select the mocha-tracing data source to see the Trace data. +#### Query Metrics Data -![](./assets/query-trace.png) +We have implemented an API that supports the PromQL query protocol, so you can configure mocha as a Prometheus data source in Grafana to query Metrics data. -![](./assets/query-trace-2.png) +The Prometheus data source has been pre-configured in `docker/grafana/provisioning/datasources/mocha-datasources.yaml`. -### Metrics +Click the menu on the left, select Explore, and then select the Prometheus data source to see the Metrics data. -#### Configure Prometheus Data Source +![](./assets/query-metrics.png) -We have implemented an API that supports the PromQL query protocol, so you can configure the Prometheus data source directly in Grafana. +Click the menu on the left, select Dashboards, and then create a new dashboard. -Visit http://localhost:3000/ to see the grafana login page. Both the username and password are admin. +![](./assets/create-metrics-dashboard.png) + +![](./assets/create-metrics-dashboard-2.png) + +Select the mocha-metrics data source that we just created. + +![](./assets/create-metrics-dashboard-3.png) + +After that, you can add panels as needed to display Metrics data. + +![](./assets/create-metrics-dashboard-4.png) + +#### Configure Prometheus Data Source + +If you need to manually configure the Metrics data source, you can refer to the following steps. After logging in, click the menu on the left, select Data Sources, and then click Add data source. @@ -96,23 +122,3 @@ Configure the HTTP Method as POST. Click Save & Test. If the following information is displayed, the configuration is successful. ![](./assets/add-prometheus-data-source-4.png) - -#### Query Metrics Data - -Click the menu on the left, select Explore, and then select the Prometheus data source to see the Metrics data. - -![](./assets/query-metrics.png) - -Click the menu on the left, select Dashboards, and then create a new dashboard. - -![](./assets/create-metrics-dashboard.png) - -![](./assets/create-metrics-dashboard-2.png) - -Select the mocha-metrics data source that we just created. - -![](./assets/create-metrics-dashboard-3.png) - -After that, you can add panels as needed to display Metrics data. - -![](./assets/create-metrics-dashboard-4.png) 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 aa449ef..5832396 100644 --- a/docs/quick-start/docker-compose/quick-start.zh-CN.md +++ b/docs/quick-start/docker-compose/quick-start.zh-CN.md @@ -28,15 +28,27 @@ docker-compose up --build -d ## 数据的查询 +访问 http://localhost:3000/ 即可看到grafana的登录页面。用户名和密码都是admin。 + ### Trace -#### 配置 Jaeger 数据源 +#### Trace 数据的查询 -我们实现了支持 Jaeger 查询协议的 API,因此可以直接在 Grafana 中配置 Jaeger 数据源。 +我们实现了支持 Jaeger 查询协议的 API,因此可以在 Grafana 中配置 mocha 作为 Jaeger 数据源就可以查询 Trace 数据。 -访问 http://localhost:3000/ 即可看到grafana的登录页面。用户名和密码都是admin。 +在 `docker/grafana/provisioning/datasources/mocha-datasources.yaml` 中已经预配置好了 Jaeger 数据源。 -登录后,点击左侧的菜单,选择 Data Sources,然后点击 Add data source。 +点击左侧的菜单,选择 Explore,然后选择 mocha-tracing 数据源,即可看到 Trace 数据。 + +![](./assets/query-trace.png) + +![](./assets/query-trace-2.png) + +#### 配置 Trace 数据源 + +如果需要手动配置 Trace 数据源,可以参考下面的步骤。 + +登录 grafana 后,点击左侧的菜单,选择 Data Sources,然后点击 Add data source。 ![](./assets/add-jaeger-data-source.png) @@ -60,23 +72,38 @@ docker-compose up --build -d ![](./assets/add-jaeger-data-source-warning.png) -#### Trace 数据的查询 +### Metrics -点击左侧的菜单,选择 Explore,然后选择 mocha-tracing 数据源,即可看到 Trace 数据。 +#### Metrics 数据的查询 -![](./assets/query-trace.png) +我们实现了支持 PromQL 查询协议的 API,因此可以在 Grafana 中配置 mocha 作为 Prometheus 数据源就可以查询 Metrics 数据。 -![](./assets/query-trace-2.png) +在 `docker/grafana/provisioning/datasources/mocha-datasources.yaml` 中已经预配置好了 Prometheus 数据源。 -### Metrics +点击左侧的菜单,选择 Explore,然后选择 mocha-metrics 数据源,即可看到 Metrics 数据。 -#### 配置 Prometheus 数据源 +![](./assets/query-metrics.png) -我们实现了支持 PromQL 查询协议的 API,因此可以直接在 Grafana 中配置 Prometheus 数据源。 +点击左侧的菜单,选择 Dashboards,即可创建一个 Dashboard。 -访问 http://localhost:3000/ 即可看到grafana的登录页面。用户名和密码都是admin。 +![](./assets/create-metrics-dashboard.png) + +![](./assets/create-metrics-dashboard-2.png) -登录后,点击左侧的菜单,选择 Data Sources,然后点击 Add data source。 +选择我们刚刚创建的 Prometheus 数据源。 + +![](./assets/create-metrics-dashboard-3.png) + +接下来就可以根据需要添加 Panel,展示 Metrics 数据了。 + +![](./assets/create-metrics-dashboard-4.png) + + +#### 配置 Prometheus 数据源 + +如果需要手动配置 Prometheus 数据源,可以参考下面的步骤。 + +登录 grafana 后,点击左侧的菜单,选择 Data Sources,然后点击 Add data source。 选择 Prometheus。 @@ -95,23 +122,3 @@ docker-compose up --build -d 点击 Save & Test,如果显示如下信息,则说明配置成功。 ![](./assets/add-prometheus-data-source-4.png) - -#### Metrics 数据的查询 - -点击左侧的菜单,选择 Explore,然后选择 mocha-metrics 数据源,即可看到 Metrics 数据。 - -![](./assets/query-metrics.png) - -点击左侧的菜单,选择 Dashboards,即可创建一个 Dashboard。 - -![](./assets/create-metrics-dashboard.png) - -![](./assets/create-metrics-dashboard-2.png) - -选择我们刚刚创建的 Prometheus 数据源。 - -![](./assets/create-metrics-dashboard-3.png) - -接下来就可以根据需要添加 Panel,展示 Metrics 数据了。 - -![](./assets/create-metrics-dashboard-4.png) diff --git a/src/Mocha.Storage/EntityFrameworkCore/Trace/Readers/Jaeger/EFToJaegerSpanConversionExtensions.cs b/src/Mocha.Storage/EntityFrameworkCore/Trace/Readers/Jaeger/EFToJaegerSpanConversionExtensions.cs index 3c32d17..a82b439 100644 --- a/src/Mocha.Storage/EntityFrameworkCore/Trace/Readers/Jaeger/EFToJaegerSpanConversionExtensions.cs +++ b/src/Mocha.Storage/EntityFrameworkCore/Trace/Readers/Jaeger/EFToJaegerSpanConversionExtensions.cs @@ -61,11 +61,14 @@ public static IEnumerable ToJaegerTraces( { resourceAttributesBySpanId.TryGetValue(span.SpanID, out var attributes); attributes ??= Array.Empty(); + var serviceName = attributes + .FirstOrDefault(a => a.Key == "service.name")?.Value ?? string.Empty; var process = new JaegerProcess { - ProcessID = span.ProcessID, - ServiceName = attributes - .FirstOrDefault(a => a.Key == "service.name")?.Value ?? string.Empty, + ProcessID = string.IsNullOrWhiteSpace(span.ProcessID) + ? serviceName + : span.ProcessID, + ServiceName = serviceName, Tags = Array.ConvertAll(attributes, ToJaegerTag) }; diff --git a/src/Mocha.Storage/LiteDB/Trace/Readers/Jaeger/LiteToJaegerSpanConversionExtensions.cs b/src/Mocha.Storage/LiteDB/Trace/Readers/Jaeger/LiteDBToJaegerSpanConversionExtensions.cs similarity index 92% rename from src/Mocha.Storage/LiteDB/Trace/Readers/Jaeger/LiteToJaegerSpanConversionExtensions.cs rename to src/Mocha.Storage/LiteDB/Trace/Readers/Jaeger/LiteDBToJaegerSpanConversionExtensions.cs index 7dacdae..27cb58f 100644 --- a/src/Mocha.Storage/LiteDB/Trace/Readers/Jaeger/LiteToJaegerSpanConversionExtensions.cs +++ b/src/Mocha.Storage/LiteDB/Trace/Readers/Jaeger/LiteDBToJaegerSpanConversionExtensions.cs @@ -6,7 +6,7 @@ namespace Mocha.Storage.LiteDB.Trace.Readers.Jaeger; -internal static class LiteToJaegerSpanConversionExtensions +internal static class LiteDBToJaegerSpanConversionExtensions { public static IEnumerable ToJaegerTraces( this IEnumerable spans) @@ -22,7 +22,11 @@ public static IEnumerable ToJaegerTraces( var process = new JaegerProcess { ServiceName = span.ServiceName, - ProcessID = span.ServiceInstanceId, + // service.instance.id may be null + ProcessID = + string.IsNullOrWhiteSpace(span.ServiceInstanceId) + ? span.ServiceName + : span.ServiceInstanceId, Tags = span.Resource.Attributes.Select(a => a.ToJaegerTag()).ToArray() }; @@ -79,9 +83,7 @@ private static IEnumerable ToJaegerSpanTags( yield return new JaegerTag { - Key = "span.kind", - Type = JaegerTagType.String, - Value = span.SpanKind.ToJaegerSpanKind() + Key = "span.kind", Type = JaegerTagType.String, Value = span.SpanKind.ToJaegerSpanKind() }; foreach (var attribute in spanAttributes) From 3348741a829261cbf5b8337d222e5f8fb046c193 Mon Sep 17 00:00:00 2001 From: Event Horizon <772552754@qq.com> Date: Tue, 13 Jan 2026 22:13:53 +0800 Subject: [PATCH 8/8] format --- .../Readers/Jaeger/LiteDBToJaegerSpanConversionExtensions.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Mocha.Storage/LiteDB/Trace/Readers/Jaeger/LiteDBToJaegerSpanConversionExtensions.cs b/src/Mocha.Storage/LiteDB/Trace/Readers/Jaeger/LiteDBToJaegerSpanConversionExtensions.cs index 27cb58f..3d2dfba 100644 --- a/src/Mocha.Storage/LiteDB/Trace/Readers/Jaeger/LiteDBToJaegerSpanConversionExtensions.cs +++ b/src/Mocha.Storage/LiteDB/Trace/Readers/Jaeger/LiteDBToJaegerSpanConversionExtensions.cs @@ -83,7 +83,9 @@ private static IEnumerable ToJaegerSpanTags( yield return new JaegerTag { - Key = "span.kind", Type = JaegerTagType.String, Value = span.SpanKind.ToJaegerSpanKind() + Key = "span.kind", + Type = JaegerTagType.String, + Value = span.SpanKind.ToJaegerSpanKind() }; foreach (var attribute in spanAttributes)