探索链路追踪在.NET6工业物联网项目的应用
ExploringIoTDistributedTracingNet6
如果觉得有用,请留言学到了.
已经会了的老哥,请留言就这?

可能遇到的问题
工业物联网项目自上而下一般分为ERP、Mes、SCADA、WCS、边缘网关、设备等
一个生产订单从SAP发送到设备要经过上述多个系统,当某个环节出现问题,可能需要各个团队共同查找问题,最传统的做法是翻阅各个系统的日志文件,这无疑是非常糟糕和低效的。
APM系统既可以帮你查找问题,又可以定位整个系统的瓶颈。
应用性能监控
APM(Application Performance Monitor),用来监控你的软件性能及行为。通常包括:
Metrics 指标
如CPU、内存、磁盘I/O、网络I/O等
Logs 日志
通常程序输出的不同等级日志Debug、Info、Error等
Traces 分布式追踪
包含请求中每个子操作的调用链路、开始和结束时间、传递的参数、对数据库的操作等
OpenTelemetry

OpenTelemetry是谷歌和微软推出的一套平台无关、厂商无关的协议标准,是OpenTracing和OpenCensus的大统一,使得开发人员能够方便的添加或更换底层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设备 | 当设定温度变化会输出日志 |
| IoTGatewayService | Grpc服务 | 模拟数据采集的网关 | 开放设定温度的Grpc接口 使用Modbus协议将温度下发给设备 |
| WebApi | WebApi | 提供设定温度Api | 接收用户输入的温度 使用Grpc调用网关服务 操作日志写入数据库 将操作日志发送到RabbitMq |
| WebApp | Web应用 | 用户访问 | 接收用户输入的温度 调用WebApi 展示结果 |
| LogService | WorkerService | 后台服务 | 消费RabbitMq日志消息 |
启动方式
- 使用docker-compose运行jaeger、rabbitmq、postgres、seq
docker-compose up -d
- VisualStudio启动多个项目

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

- 访问Jaeger,查看链路追踪

- 访问Seq,查看日志

采样率
项目中后期可使用过滤器或降低采样率来减小数据收集对系统性能的影响。
源码
在这里ExploringIoTDistributedTracingNet6
相关链接
[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
求关注

探索链路追踪在.NET6工业物联网项目的应用的更多相关文章
- 基于.NET6的开源工业物联网网关
什么是工业物联网网关 工业物联网网关(IIoTGateway)是一种硬件设备或软件程序,作为本地设备(如PLC.扫码枪.机器人.数控机床.非标上位机等)与云端系统(如物联网平台.SCADA系统.MES ...
- .NET6接入Skywalking链路追踪完整流程
一.Skywalking介绍 Skywalking是一款分布式链路追踪组件,什么是链路追踪? 随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务.互联网应用构建在不同的软 ...
- Go - 实现项目内链路追踪
为什么项目内需要链路追踪?当一个请求中,请求了多个服务单元,如果请求出现了错误或异常,很难去定位是哪个服务出了问题,这时就需要链路追踪. 从图中可以清晰的看出他们之间的调用关系,通过一个例子说明下链路 ...
- Go - 实现项目内链路追踪(二)
上篇文章 Go - 实现项目内链路追踪 分享了,通过 链路 ID 可以将 请求信息.响应信息.调用第三方接口的信息.调试信息.执行的 SQL 信息.执行的 Redis 信息 串起来,记录的具体参数在文 ...
- opentracting+jager分布式链路追踪探索实践
一.Opentracing opentracing通过提供平台无关.厂商无关的API,使得开发人员可以方便地实现追踪系统.opentracing提供了用于运营支撑系统和针对特定平台的辅助程序库,被跟踪 ...
- C#工业物联网和集成系统解决方案的技术路线(数据源、数据采集、数据上传与接收、ActiveMQ、Mongodb、WebApi、手机App)
目 录 工业物联网和集成系统解决方案的技术路线... 1 前言... 1 第一章 系统架构... 3 1.1 硬件构架图... 3 1.2 ...
- 工业物联网网关在线探测之TraceRoute
佰马工业物联网网关BMG500在线探测通常有Ping.DNS.TraceRoute三种技术方式,这三种方式的区别与联系是什么?本文着重介绍工业物联网网关在线探测的工作原理,以图文形式介绍无线网关在线探 ...
- 【阿里云新品发布·周刊】第13期:链路追踪 Tracing Analysis 商业化首发
点击订阅新品发布会! 新产品.新版本.新技术.新功能.价格调整,评论在下方,下期更新!关注更多内容,了解更多 最新发布 链路追踪 Tracing Analysis 商业化首发 2019年6月12日15 ...
- Dynamics AX 2012 的工业物联网解决方案
Dynamics AX 2012 的工业物联网解决方案 物联网 物联网的概念在这两年非常火,包括近期很火的共享单车初创公司--摩拜单车,在产品中运用了Azure Iot物联网技术.但是,物联网并不是一 ...
随机推荐
- 深入理解Kafka核心设计及原理(四):主题管理
转载请注明出处:https://www.cnblogs.com/zjdxr-up/p/16124354.html 目录: 4.1创建主题 4.2 优先副本的选举 4.3 分区重分配 4.4 如何选择合 ...
- HCIE笔记-第一节-网络的基本概念
R&S= 路由交换 Datacom =数通 =数据通信 某个设备产生了数据之后,借助整体的网络到达目的地的过程. 网络历史 -- 数通为什么产生? 1946年:世界上第一台计算机诞生.军事 科 ...
- Java语言学习day02--6月29日
Java语言学习day02###01常用的DOS命令 * A: 常用的DOS命令 * a: 打开Dos控制台 * win+r--cmd--回车 * b: 常用dos命令 * cd.. : 退回到上一级 ...
- 【深度学习 论文篇 02-1 】YOLOv1论文精读
原论文链接:https://gitee.com/shaoxuxu/DeepLearning_PaperNotes/blob/master/YOLOv1.pdf 笔记版论文链接:https://gite ...
- petite-vue源码剖析-沙箱模型
在解析v-if和v-for等指令时我们会看到通过evaluate执行指令值中的JavaScript表达式,而且能够读取当前作用域上的属性.而evaluate的实现如下: const evalCache ...
- 【MQ】java 从零开始实现消息队列 mq-02-如何实现生产者调用消费者?
前景回顾 上一节我们学习了如何实现基于 netty 客服端和服务端的启动. [mq]从零开始实现 mq-01-生产者.消费者启动 [mq]java 从零开始实现消息队列 mq-02-如何实现生产者调用 ...
- 字节跳动构建Data Catalog数据目录系统的实践(上)
作为数据目录产品,Data Catalog 通过汇总技术和业务元数据,解决大数据生产者组织梳理数据.数据消费者找数和理解数的业务场景,并服务于数据开发和数据治理的产品体系.本文介绍了字节跳动 Data ...
- 关于5G技术,这是我见过最通俗易懂的讲解了
公众号关注 「开源Linux」 回复「学习」,有我为您特别筛选的学习资料~ 1 一个简单且神奇的公式 今天的故事,从一个公式开始讲起. 这是一个既简单又神奇的公式.说它简单,是因为它一共只有 3 个字 ...
- Nginx编译安装及常用命令
一个执着于技术的公众号 前言 前面我们已经了解Nginx基础入门知识,今天就带大家一起学习下Nginx编译安装部署 准备工作 一台linux机器(本次实验以CentOS 7.5为例) 到Nginx官方 ...
- Linux强制用户首次登录修改密码
一个执着于技术的公众号 地方 前言 Linux强制用户首次登陆修改密码,这应该是RHCE认证中用户管理部分, 属于很基础的内容了.可是我忘记了,所以就有了下面的记录~ 实验过程 1.创建用户并设置登录 ...