open-telemetry - OpenTelemetry 导出到 Collector Contrib
问题描述
本周我一直在尝试使用 opentelemetry,我希望能得到一些建议。
我已经使用以下 opentelemetry 库检测了一个用 C# 编写的 .net Core API 应用程序,并最初安装了 Jaeger 来收集和显示结果。我在本地机器上的 docker 容器中运行 jaeger。
我在 StartUp.cs 文件中添加到 ConfigureServices 的代码如下:
services.AddOpenTelemetryTracing(builder =>
{
builder.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.AddSqlClientInstrumentation()
.AddSource(nameof(CORSBaseController))
.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("MyAppAPI"))
.AddJaegerExporter(opts =>
{
opts.AgentHost = Configuration["Jaeger:AgentHost"];
opts.AgentPort = Convert.ToInt32(Configuration["Jaeger:AgentPort"]);
});
});
在 Jaeger 前端,当我搜索过去一小时内收到的跟踪时,在使用连接到 API 'jaeger-query' 和'MyAppAPI' 的前端后,我得到了两个列出的服务。我可以深入了解“MyAppAPI”并查看显示已收集的遥测数据的跨度。到目前为止,一切都很好。
我在我的机器上安装了 opentelemetry-collector-contrib。我使用了 contrib,因为我最终想将结果导出到 newrelic 并需要他们的库。我使用示例 docker-compose yaml 文件使用 docker 启动了控制器:
version: "3"
services:
# Jaeger
jaeger:
image: jaegertracing/all-in-one:latest
ports:
- "16686:16686"
- "14268"
- "14250"
#Zipkin
zipkin:
image: openzipkin/zipkin
container_name: zipkin
ports:
- 9411:9411
otel-collector:
build:
context: ../..
dockerfile: examples/tracing/Dockerfile
command: ["--config=/etc/otel-collector-config.yml"]
volumes:
- ./otel-collector-config.yml:/etc/otel-collector-config.yml
ports:
- "1888:1888" # pprof extension
- "8888:8888" # Prometheus metrics exposed by the collector
- "8889:8889" # Prometheus exporter metrics
- "13133:13133" # health_check extension
- "9411" # Zipkin receiver
- "55679:55679" # zpages extension
depends_on:
- jaeger
- zipkin
# Expose the frontend on http://localhost:8081
frontend:
image: openzipkin/example-sleuth-webmvc
command: Frontend
environment:
JAVA_OPTS: -Dspring.zipkin.baseUrl=http://otel-collector:9511
ports:
- 8081:8081
depends_on:
- otel-collector
# Expose the backend on http://localhost:9000
backend:
image: openzipkin/example-sleuth-webmvc
command: Backend
environment:
JAVA_OPTS: -Dspring.zipkin.baseUrl=http://otel-collector:9511
ports:
- 9000:9000
depends_on:
- otel-collector
docker compose 文件中引用的 otel-collector-config.yml 文件如下所示,将“otlp”和“zipkin”都公开为接收者。
receivers:
otlp:
protocols:
grpc:
zipkin:
exporters:
logging:
zipkin:
endpoint: "http://zipkin:9411/api/v2/spans"
processors:
batch:
extensions:
health_check:
pprof:
zpages:
service:
extensions: [pprof, zpages, health_check]
pipelines:
traces:
receivers: [otlp, zipkin]
exporters: [zipkin, logging]
processors: [batch]
我将 .Net 项目中的代码更改为以下代码,以使用 otlp 导出器将数据发送到收集器,如下所示:
services.AddOpenTelemetryTracing(builder =>
{
builder.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.AddSqlClientInstrumentation()
.AddAspNetCoreInstrumentation()
.AddSource(nameof(CORSBaseController))
.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("MyAppAPI"))
.AddZipkinExporter(opts =>
{
opts.Endpoint = new Uri("http://localhost:9411/api/v2/spans");
});
});
现在,当我使用前端向 API 发送请求时,再也无法将 MyAppAPI 视为 jaeger 中的服务之一(应该一直使用 zipkin)。我只能看到与我使用前端的时间相对应的 jaeger-query 跨度。
编辑:我有这个工作。这是由于在 startup.cs 文件中对 zipkin 收集器的调用不正确。另外,当我写出问题时,我意识到我正在导出到 zipkin 而不是 jaeger,所以我现在可以在 http://localhost:9411 上的 zipkin 前端看到我的踪迹。
上面的代码已被更正,因此可以正常工作。
解决方案
推荐阅读
- sql-server - 存储过程重新编译 SQL Server 2016
- mysql - MariaDB (Xampp) 唯一约束
- go - 在 Go 中,是否有类似 Python 中的“f-string”的功能?
- apache-poi - 使用数据创建excel表
- pandas - 如果列表中存在熊猫计数列,则按部分和不区分大小写的匹配添加
- python - 如何将一个包含 +1.048.576 行的数据框导出到多个 excel 文件/工作表中
- javascript - 使用平滑滚动条点击移动到 Div
- sql - 在sql server中将行转换为列
- sql - 高效迭代是指在 SQL Server 中,对每一行进行特定操作后检索数据
- python - 如何修复 Python 散点图中的“列表索引超出范围”错误?