探索鏈路追蹤在.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.pswp.cn/news/287831.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/287831.shtml
英文地址,請注明出處:http://en.pswp.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…

python分層聚類集群合并_24、python分層聚類案例(scipy方法)

目錄1、分層聚類算法2、方法3、分析步驟4、案例1、分層聚類算法層次聚類算法又稱為樹聚類算法&#xff0c;它根據數據之間的距離&#xff0c;透過一種層次架構方式&#xff0c;反復將數據進行聚合&#xff0c;創建一個層次以分解給定的數據集。2、方法01 聚類方法linkagescipy.…

【經典回放】多種語言系列數據結構算法:數組

數組如同前面學過的順序表,一次性申請一片地址連續的存儲空間,我們還知道,計算機中數組是以一維的形式存儲的,因為計算機的內存的一維的。在知道了多維數據的計算機存儲方式后,我們還要知道構造一個多維數據的方法,并構造ADT,具體做法如下所示: 內容和步驟: 1、C語言中…

stl中Priority Queues(優先隊列)的基本用法

博客搬家啦 blog.ma6174.comstl中Priority Queues(優先隊列)的基本用法 C優先隊列類似隊列&#xff0c; 但是在這個數據結構中的元素按照一定的斷言排列有序。 C Priority Queues(優先隊列) empty 語法: bool empty(); empty()函數返回真(true)如果優先隊列為空&#xff0c;否則…

如何用 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;脫離…

android一句話搞定圖片加載

http://square.github.io/picasso/ Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView); gradle中添加 compile com.squareup.picasso:picasso:2.5.2 轉載于:https://www.cnblogs.com/rwxwsblog/p/5467874.html

轉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…

期待已久的Java 9 今日發布

人們期待已久的Java SE 9.0將在2017年9月21日發布&#xff0c;它會帶來一些重要的變化。\\JDK 9的核心變化就是引入了一種新的Java編程組件&#xff0c;也就是模塊&#xff0c;按照Oracle的說法&#xff0c;它是一個可命名的、自描述的代碼和數據集合。模塊技術的核心目標是減少…

AspNetCore7.0源碼解讀之UseMiddleware

前言本文編寫時源碼參考github倉庫主分支。aspnetcore提供了Use方法供開發者自定義中間件&#xff0c;該方法接收一個委托對象&#xff0c;該委托接收一個RequestDelegate對象&#xff0c;并返回一個RequestDelegate對象&#xff0c;方法定義如下&#xff1a;IApplicationBuild…

邊工作邊刷題:70天一遍leetcode: day 11-3

Single Number I/II II的python解是網上抄的&#xff0c;其實可以AC&#xff0c;但是python不會像c/java那樣自動overflow&#xff0c;而是轉化成long。所以如果有負數的情況會得到一個巨大的正數解&#xff0c;比如 Input:[-2,-2,1,1,-3,1,-3,-3,-4,-2] Output:4294967292 Exp…

《零基礎看得懂的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…

ArcGIS實驗教程——實驗二十:ArcGIS數字高程模型DEM建立

ArcGIS實驗視頻教程合集:《ArcGIS實驗教程從入門到精通》(附配套實驗數據) 一、實驗描述 本實驗講述DEM的創建方法和過程。DEM的采集方法有四種:地面測量、攝影測量、空間站、地形圖數字化。 二、實驗內容 1、插值法DEM建立 2、創建TIN 3、TIN轉柵格 4、生成等高線 …

思科asa5515端口映射_Cisco ASA端口映射

SQL基礎--同義詞同義詞的概念: 同義詞是Oracle對象的別名,使用同義詞訪問相同的對象 可以為表.視圖.存儲過程.函數或另一同義詞等對象創建同義詞 方便訪問其它用戶的對象,隱藏了對象的身份 縮短對象名字的長度 同義 ...訪問本地json文件因跨域導致的問題我使用jquery的getJSON的…