前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >探索链路追踪在.NET6工业物联网项目的应用

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

原创
作者头像
iioter
发布2022-05-07 23:49:59
4110
发布2022-05-07 23:49:59
举报

ExploringIoTDistributedTracingNet6

如果觉得有用,请留言学到了.已经会了的老哥,请留言就这?

jaeger
jaeger

可能遇到的问题

工业物联网项目自上而下一般分为ERP、Mes、SCADA、WCS、边缘网关、设备等 一个生产订单从SAP发送到设备要经过上述多个系统,当某个环节出现问题,可能需要各个团队共同查找问题,最传统的做法是翻阅各个系统的日志文件,这无疑是非常糟糕和低效的。 APM系统既可以帮你查找问题,又可以定位整个系统的瓶颈。

应用性能监控

APM(Application Performance Monitor),用来监控你的软件性能及行为。通常包括:Metrics 指标如CPU、内存、磁盘I/O、网络I/O等 Logs 日志通常程序输出的不同等级日志Debug、Info、Error等 Traces 分布式追踪包含请求中每个子操作的调用链路、开始和结束时间、传递的参数、对数据库的操作等

OpenTelemetry

opentelemetry-logo
opentelemetry-logo

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

生成、收集数据(Metrics,Logs and traces) 将数据推送到Jaeger(或Zipkin、SkyWalking等后端) 支持.Net、C++、Go、Java、js、Python等11种语言(平台)

Reference_Architecture
Reference_Architecture

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

opentelemetry.instrumentation
opentelemetry.instrumentation

官方代码段

代码语言:c#
复制
// 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

项目目录

代码语言:shell script
复制
.
├──WebApp //webapp
├──WebApi //webapi
├──IoTGatewayService //模拟网关
├──Device //模拟设备
└──LogService //日志消费服务

项目介绍

项目

项目类型

作用

说明

Device

控制台

模拟一个Modbus-TCP设备

当设定温度变化会输出日志

IoTGatewayService

Grpc服务

模拟数据采集的网关

开放设定温度的Grpc接口 使用Modbus协议将温度下发给设备

WebApi

WebApi

提供设定温度Api

接收用户输入的温度 使用Grpc调用网关服务 操作日志写入数据库 将操作日志发送到RabbitMq

WebApp

Web应用

用户访问

接收用户输入的温度 调用WebApi 展示结果

LogService

WorkerService

后台服务

消费RabbitMq日志消息

启动方式

  1. 使用docker-compose运行jaeger、rabbitmq、postgres、seq docker-compose up -d
  2. VisualStudio启动多个项目
    启动多个项目
    启动多个项目
  3. 访问Web,输入设定温度,回车确认
    Web
    Web
  4. 访问Jaeger,查看链路追踪
    Jaeger
    Jaeger
  5. 访问Seq,查看日志
    Seq
    Seq

采样率

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

源码

在这里ExploringIoTDistributedTracingNet6

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ExploringIoTDistributedTracingNet6
    • 可能遇到的问题
      • 应用性能监控
      • OpenTelemetry
        • Jaeger
          • Seq
            • 项目目录
              • 启动方式
                • 采样率
                  • 源码
                  相关产品与服务
                  物联网
                  腾讯连连是腾讯云物联网全新商业品牌,它涵盖一站式物联网平台 IoT Explorer,连连官方微信小程序和配套的小程序 SDK、插件和开源 App,并整合腾讯云内优势产品能力,如大数据、音视频、AI等。同时,它打通腾讯系 C 端内容资源,如QQ音乐、微信支付、微保、微众银行、医疗健康等生态应用入口。提供覆盖“云-管-边-端”的物联网基础设施,面向“消费物联”和 “产业物联”两大赛道提供全方位的物联网产品和解决方案,助力企业高效实现数字化转型。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档