如果覺得有用,請留言學到了。
已經會了的老哥,請留言就這?
可能遇到的問題
工業物聯網系統自上而下一般分為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!";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設備 | 當設定溫度變化會輸出日志 |
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,查看日志
采樣率
項目中后期可可使用過濾器或降低采樣率來減小數據收集對系統性能的影響
相關鏈接
[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 - 云原生下可觀測性的新標準
求關注
工業物聯網網關