探索链路追踪在.NET6工业物联网项目中的应用

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了探索链路追踪在.NET6工业物联网项目中的应用相关的知识,希望对你有一定的参考价值。

如果觉得有用,请留言学到了。

已经会了的老哥,请留言就这?

可能遇到的问题

工业物联网系统自上而下一般分为ERP、Mes、SCADA、WCS、边缘网关、设备等

一个生产订单从SAP发送到设备要经过上述多个系统,当某个环节出现问题,可能需要各个团队共同查找问题,最传统的做法是翻阅各个系统的日志文件,这无疑是非常糟糕和低效的。

APM系统既可以帮你查找问题,又可以定位整个系统的瓶颈。

应用性能监控

APM(Application Performance Monitor),用来监控你的软件性能及行为。通常包括:

  • Metrics 指标

    如CPU、内存、磁盘I/O、网络I/O等

  • Logs 日志

    通常程序输出的不同等级日志Debug、Info、Error等

  • Traces 分布式追踪

    包含请求中每个子操作的调用链路、开始和结束时间、传递的参数、对数据库的操作等

OpenTelemetry


OpenTelemetry是谷歌和微软推出的一套平台无关、厂商无关的协议标准,使得开发人员能够方便的添加或更换底层APM的实现。我们可以使用它的数据收集中间件:

生成、收集数据(Metrics,Logs and traces)

将数据推送到Jaeger(或Zipkin、SkyWalking等后端)

支持.Net、C++、Go、Java、js、Python等11种语言(平台)

可以采集.Net项目的AspNetCore、Http、EFCore、HttpClient、Grpc等诊断数据

官方代码段

// Define some important constants and the activity source
var serviceName = "MyCompany.MyProduct.MyService";
var serviceVersion = "1.0.0";
var builder = WebApplication.CreateBuilder(args);
// Configure important OpenTelemetry settings, the console exporter, and automatic instrumentation
builder.Services.AddOpenTelemetryTracing(b =>

    b
    .AddConsoleExporter()
    .AddSource(serviceName)
    .SetResourceBuilder(
        ResourceBuilder.CreateDefault()
            .AddService(serviceName: serviceName, serviceVersion: serviceVersion))
    .AddHttpClientInstrumentation()
    .AddAspNetCoreInstrumentation();
);
var app = builder.Build();
var httpClient = new HttpClient();
app.MapGet("/hello", async () =>

    var html = await httpClient.GetStringAsync("https://example.com/");
    if (string.IsNullOrWhiteSpace(html))
        return "Hello, World!";
    else
        return "Hello, World!";
);

app.Run();

Jaeger

Jaeger是开源的分布式追踪系统,OpenTelemetry可以将收集到的数据导入到这个里面进行存储和查询。

Seq

项目使用seq作为日志平台,它轻量且对.Net友好,支持sql查询以及图表展示,你也可以使用Nlog+Elasticsearch+Kibana

项目目录

.
├──WebApp //webapp
├──WebApi //webapi
├──IoTGatewayService //模拟网关
├──Device //模拟设备
└──LogService //日志消费服务

项目介绍

项目项目类型作用说明
Device控制台模拟
Modbus-TCP设备
当设定温度变化会输出日志
IoTGatewayServiceGrpc服务模拟数据采集的网关开放设定温度的Grpc接口
使用Modbus协议将温度下发给设备
WebApiWebApi提供设定温度Api接收用户输入的温度
使用Grpc调用网关服务
操作日志写入数据库
将操作日志发送到RabbitMq
WebAppWeb应用用户访问接收用户输入的温度
调用WebApi
展示结果
LogServiceWorkerService后台服务消费RabbitMq日志消息

启动方式

  1. 使用docker-compose运行jaeger、rabbitmq、postgres、seq

docker-compose up -d
  1. VisualStudio启动多个项目

  2. 访问Web,输入设定温度,回车确认

  3. 访问Jaeger,查看链路追踪

  4. 访问Seq,查看日志

采样率

项目中后期可可使用过滤器或降低采样率来减小数据收集对系统性能的影响

相关链接

[1] OpenTelemetry:https://opentelemetry.io/docs/instrumentation/net/

[2] Jaeger:https://www.jaegertracing.io/

[3] Seq:https://datalust.co/seq

[4] 源码:https://github.com/iioter/ExploringIoTDistributedTracingNet6

[5] IoTGateway:https://github.com/iioter/iotgateway

[6] OpenTelemetry - 云原生下可观测性的新标准

求关注

工业物联网网关

2022深度学习开发者峰会 5月20日13:00让我们相聚云端,共襄盛会!

以上是关于探索链路追踪在.NET6工业物联网项目中的应用的主要内容,如果未能解决你的问题,请参考以下文章

工业物联网IIOT解决方案:实现工程师远程维护!

工业物联网IIOT解决方案:实现工程师远程维护!

5G智慧仓储物流系统无线组网 5G工业物联网网关应用

有人设备在工业物联网解决方案中的应用

顺丰科技胡典钢:边缘计算在工业物联网中的应用实践与思考

KubeEdge边缘计算在顺丰科技工业物联网中的实践