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

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

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

ca823a839ea9ac9db16247dd409e7e51.png

可能遇到的问题

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

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

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

应用性能监控

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

  • Metrics 指标

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

  • Logs 日志

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

  • Traces 分布式追踪

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

OpenTelemetry

2b1acda521ae9563394d30ae1426ba3b.png


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

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

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

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

d2b41a2b8793994dd077fc1cb7636c12.png

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

4938526f976f720e81867ef639f3c5af.png

官方代码段

// 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!";elsereturn "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启动多个项目

    213f2e37713a1362c03f5d58ace76744.png

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

    e563cb593b30cb2a5e810cbbba2b5d6b.gif

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

    52c806cd340b201e958f6272f9f6eef0.gif

  4. 访问Seq,查看日志

    83f8cc439068f085bf998ac05f9dd937.png

采样率

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

相关链接

[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 - 云原生下可观测性的新标准

求关注

工业物联网网关

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/287831.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《零基础看得懂的C语言入门教程 》——(三)轻轻松松理解第一个C语言程序

一、学习目标 了解C语言代码的一般结构了解函数的概念了解printf函数的使用方法了解头文件的概念了解system函数的使用方法 目录 C语言真的很难吗?那是你没看这张图,化整为零轻松学习C语言。 第一篇:(一)脱离学习误…

hdu_1728_逃离迷宫(bfs)

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid1728 题意:走迷宫,找最小的拐角 题解:对BFS有了新的理解,DFS剪枝应该也能过,用BFS就要以拐角作为增量来搜,即以当前点为坐标,4…

把文件放在SD卡

2019独角兽企业重金招聘Python工程师标准>>> 在程序中访问SDCard&#xff0c;你需要申请访问SDCard的权限。 在AndroidManifest.xml中加入访问SDCard的权限如下: <!-- 在SDCard中创建与删除文件权限--> <uses-permissionandroid:name"android.permiss…

如何用 windbg 导出 C# 中的 string 内容?

咨询区 driis我在用 windbg 调试一个生产上的 程序卡死 故障 &#xff0c;在线程栈上有一个 string 类型的参数相当大&#xff0c;我用 !dumpobj 命令不能正常显示内容&#xff0c;参考如下&#xff1a;0:036> !do 00000001b30d8668 Name: System.String MethodTable: 00000…

《零基础看得懂的C语言入门教程 》——(四)C语言的基本数据类型及变量

一、学习目标 了解C语言的基本数据类型了解变量的基本概念了解变量的使用方法了解了变量的命名方法了解格式占位符了解变量的输出 目录 C语言真的很难吗&#xff1f;那是你没看这张图&#xff0c;化整为零轻松学习C语言。 第一篇&#xff1a;&#xff08;一&#xff09;脱离…

转HTML+CSS总结/深入理解CSS盒子模型

原文地址&#xff1a;http://www.chinaz.com/design/2010/1229/151993.shtml 前言&#xff1a;前阵子在做一个项目时&#xff0c;在页面布局方面遇到了一点小问题&#xff0c;于是上stackoverflow上求助。ifaou在帮助我解决我问题的同时&#xff0c;还推荐我阅读一篇有关CSS盒子…

主成分分析步骤_多元分析(1)--主成分分析

主成分分析主成分分析&#xff08;PCA&#xff09;是数据降维的一种常见方法&#xff0c;其它常见的方法还有因子分析&#xff08;FA&#xff09;,独立成分分析&#xff0c;在进行大数据处理时&#xff0c;因为数据有很多特征&#xff0c;维数过高&#xff0c;不容易进行处理且…

ArcGIS实验教程——实验十九:网络分析(最短路径实现)

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据) 一、实验描述 网络分析模块用于实现基于网络数据集的网络分析功能,包括路径分析、服务区分析、最近设施点分析、OD成本矩阵分析、多路径配送分析、位置分配分析和高级网络的管理与创建等。 网络…

设计模式之策略模式和状态模式

1 策略模式 我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法&#xff0c; 我们可以简单理解为更加不同的策略对象&#xff0c;执行不同策略方法。 2 类图 3 代码实现 1&#xff09;接口&#xff1a;Strat…

AspNetCore7.0源码解读之UseMiddleware

前言本文编写时源码参考github仓库主分支。aspnetcore提供了Use方法供开发者自定义中间件&#xff0c;该方法接收一个委托对象&#xff0c;该委托接收一个RequestDelegate对象&#xff0c;并返回一个RequestDelegate对象&#xff0c;方法定义如下&#xff1a;IApplicationBuild…

《零基础看得懂的C语言入门教程 》——(五)C语言的变量、常量及运算

一、学习目标 了解C语言变量的其它创建方式了解C语言常量了解C语言的运算符 目录 C语言真的很难吗&#xff1f;那是你没看这张图&#xff0c;化整为零轻松学习C语言。 第一篇&#xff1a;&#xff08;一&#xff09;脱离学习误区 第二篇&#xff1a;&#xff08;二&#xff…

实战使用Axure设计App,使用WebStorm开发(4) – 实现页面UI

系列文章 实战使用Axure设计App,使用WebStorm开发(1) – 用Axure描述需求 实战使用Axure设计App,使用WebStorm开发(2) – 创建 Ionic 项目 实战使用Axure设计App,使用WebStorm开发(3) – 构建页面架构 实战使用Axure设计App,使用WebStorm开发(4) – 实现页面UI 实战使用Axu…

英文词频统计预备,组合数据类型练习

实例: 下载一首英文的歌词或文章&#xff0c;将所有,.&#xff1f;&#xff01;等替换为空格&#xff0c;将所有大写转换为小写&#xff0c;统计某几个单词出现的次数&#xff0c;分隔出一个一个的单词。2.列表实例&#xff1a;由字符串创建一个作业评分列表&#xff0c;做增删…

《零基础看得懂的C语言入门教程 》——(六)轻轻松松了解C语言的逻辑运算

一、学习目标 了解逻辑判断的概念了解if语句的使用方法了解switch语句的使用方法了解逻辑运算符的使用方法 目录 C语言真的很难吗&#xff1f;那是你没看这张图&#xff0c;化整为零轻松学习C语言。 第一篇&#xff1a;&#xff08;一&#xff09;脱离学习误区 第二篇&#…

TCP之滑动窗口

一、滑动窗口的基本知识 TCP滑动窗口包含了发送窗口和接收窗口 1)、TCP滑动窗口的最大值 TCP数据包头部里面有个窗口值,默认窗口是一个16bit位字段,表示窗口的字节容量,所以TCP滑动窗口的最大值是2^16-1=65535个字节,TCP里面也有窗口扩大因子可把原来16bit的窗口,扩大为…

《零基础看得懂的C语言入门教程 》——(七)C语言的循环分分钟上手

一、学习目标 了解循环的使用方法 目录 C语言真的很难吗&#xff1f;那是你没看这张图&#xff0c;化整为零轻松学习C语言。 第一篇&#xff1a;&#xff08;一&#xff09;脱离学习误区 第二篇&#xff1a;&#xff08;二&#xff09;C语言没那么难简单开发带你了解流程 第…

ArcGIS中数据存放相对路径和绝对路径的区别

配套蓝光视频教程:【ArcGIS风暴】数据相对路径VS绝对路径 问题举例: 菜鸟们在使用ArcGIS时经常会碰到将地图文档(.mxd)拷贝到别的电脑上或改变一个路径时,出现数据丢失的现象,具体表现为图层前面出现一个红色的感叹号,如下图所示。 出现以上问题的根本原因是数据GSS.ti…

TIOBE 5 月编程语言排行榜:C# 最受开发者欢迎,C++ 将冲击 Top 3

技术迭代的速度越来越快&#xff0c;这一点在每月更新一次的编程语言排行榜榜单中体现得尤为明显。今天&#xff0c;最新的 TIOBE 5 月编程语言榜单出炉&#xff0c;不妨一起来看一下又有哪些新的趋势。C# 的使用量增幅最高&#xff0c;C 或将冲击 Top 3和 4 月相比&#xff0c…

SQL Server2016导出数据表数据

SQL Server2016导出数据表数据我们前面已经介绍了很多关于SQL Server的相关文章&#xff0c;今天我们主要介绍的是&#xff0c;如何导出数据库下表中数据。我们所有的操作都是通过SSMS进行操作的。我们右击需要导出数据的数据库----任务----导出数据根据向导提示&#xff0c;下…

Jfinal 显示欢迎页 index.jsp

为什么80%的码农都做不了架构师&#xff1f;>>> IndexController.index()方法&#xff0c;为什么是index()方法&#xff1f;其实这是一个约定 那么它是如何打开index.jsp文件的呢&#xff1f;我们来查看index()方法的代码&#xff1a; public class IndexControlle…