ABP vNext + Azure Application Insights:APM 監控與性能診斷最佳實踐

ABP vNext + Azure Application Insights:APM 監控與性能診斷最佳實踐 🚀



1?? 集成目標與環境要求

項目最低版本
.NET SDK6.0
ABP vNext7.0
Application InsightsAzure 實例 / Emulator
環境變量注入APPLICATIONINSIGHTS_CONNECTION_STRING

💡 本地調試

  • 可用 Azure Functions Core Tools --inspect
  • 或使用 Azurite Emulator 模擬

2?? 安裝 SDK 與注入服務

dotnet add package Microsoft.ApplicationInsights.AspNetCore
// Program.cs
builder.Services.AddApplicationInsightsTelemetry(options =>
{options.ConnectionString = builder.Configuration["APPLICATIONINSIGHTS_CONNECTION_STRING"];
});
builder.Services.AddSingleton<TelemetryClient>();
builder.Logging.AddApplicationInsights();

3?? 日志與鏈路追蹤整合

🔥 系統流水線示意圖

ABP 應用
ILogger
ActivitySource
ApplicationService / Controller
BackgroundWorker
TelemetryPipeline
Application Insights SDK
Azure Monitor / Log Analytics
Dashboard / Alert Rules

? ILogger 原生接入

public class OrderAppService : ApplicationService
{private readonly ILogger<OrderAppService> _logger;public OrderAppService(ILogger<OrderAppService> logger) => _logger = logger;public Task<string> PlaceOrder(){_logger.LogInformation("🛒 開始執行下單邏輯");return Task.FromResult("OK");}
}

? 手動埋點(TelemetryClient)

public class OrderManager
{private readonly TelemetryClient _telemetry;public OrderManager(TelemetryClient telemetry) => _telemetry = telemetry;public void TrackLatency(long ms){_telemetry.TrackMetric("OrderService.QueryOrder.LatencyMs", ms);}
}

4?? 多租戶與用戶上下文注入

public class AbpTelemetryInitializer : ITelemetryInitializer
{private readonly ICurrentUser _currentUser;public AbpTelemetryInitializer(ICurrentUser currentUser) => _currentUser = currentUser;public void Initialize(ITelemetry telemetry){if (_currentUser.IsAuthenticated){telemetry.Context.User.Id = _currentUser.Id?.ToString();telemetry.Context.Properties["TenantId"] = _currentUser.TenantId?.ToString();}}
}// 注冊
builder.Services.AddSingleton<ITelemetryInitializer, AbpTelemetryInitializer>();

5?? 后臺任務中的鏈路恢復

using System.Diagnostics;private static readonly ActivitySource BackgroundSource = new("AbpApp.BackgroundJobs");
public async Task ExecuteJobAsync()
{using var activity = BackgroundSource.StartActivity("SyncOrderTask");_telemetry.TrackTrace("🔄 執行后臺同步訂單", SeverityLevel.Information);// …業務邏輯…
}

?? 推薦使用 ActivitySource 以兼容 OpenTelemetry。


6?? 采樣與 TelemetryChannel 調優

🎯 采樣 (Sampling)

builder.Services.Configure<TelemetryConfiguration>(config =>
{config.DefaultTelemetrySink.TelemetryProcessorChainBuilder.UseSampling(percentage: 10)  // 10% 采樣.Build();
});

? TelemetryChannel 調優

using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.WindowsServer.Channel;var channel = new ServerTelemetryChannel
{MaxTelemetryBufferCapacity = 500,FlushInterval = TimeSpan.FromSeconds(5)
};
builder.Services.AddSingleton<ITelemetryChannel>(channel);

7?? 自定義指標與告警自動化

// 上報慢 SQL 延遲
_telemetry.TrackMetric("Sql.Query.LatencyMs", elapsedMilliseconds);
// Azure Monitor 告警查詢示例
customMetrics
| where name == "Sql.Query.LatencyMs"
| summarize avg(value) by bin(timestamp, 5m)
| where avg_value > 300

8?? CLI 示例:創建告警

az monitor metrics alert create   --name "HighSqlLatency"   --resource-group MyRG   --scopes /subscriptions/<sub>/resourceGroups/MyRG/providers/Microsoft.Insights/components/MyAI   --condition "avg CustomMetrics.Sql.Query.LatencyMs > 300"   --action /subscriptions/<sub>/resourceGroups/MyRG/providers/Microsoft.Web/sites/MyFunc/functions/RestartService

9?? 多環境與安全配置

  • ? 禁止appsettings.json 明文保存連接串
  • ? 使用 環境變量Azure Key Vault
  • 📁 在 appsettings.{Development|Production}.json 中管理差異
{"Logging": {"LogLevel": {"Default": "Information","Microsoft": "Warning"}}
}

🔟 Azure Key Vault 集成示例

using Azure.Identity;builder.Configuration.AddAzureKeyVault(new Uri("https://<YourKeyVault>.vault.azure.net/"),new DefaultAzureCredential());

1??1?? OpenTelemetry 混合方案

builder.Services.AddOpenTelemetryTracing(b =>
{b.AddAspNetCoreInstrumentation().AddHttpClientInstrumentation().AddSource("AbpApp.BackgroundJobs").AddAzureMonitorTraceExporter(o =>{o.ConnectionString = builder.Configuration["APPLICATIONINSIGHTS_CONNECTION_STRING"];});
});
OTEL + AI
Trace
OpenTelemetry SDK
ASP.NET Core
Azure Monitor Trace Exporter
Azure Monitor

1??2?? 拓展建議

  • 🛠 自愈腳本:結合 Logic App、Function 或 Runbook
  • 📊 混合監控:Prometheus + Grafana + AI 混合可視化
  • 📈 性能對比:集成前后 QPS/延遲/成本評估
  • 🚀 CI/CD 集成:環境變量 & Key Vault 策略自動注入

? 參考文檔

📘 Application Insights 文檔
📘 ABP 日志擴展指南

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/86107.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/86107.shtml
英文地址,請注明出處:http://en.pswp.cn/web/86107.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OPENGLPG第九版學習 - 紋理與幀緩存 part1

文章目錄 6.1 紋理綜述6.2 基木紋理類型6.3 創建并初始化紋理代理紋理 6.4 指定紋理數據6.4.1 顯式設置紋理數據將靜態數據載入到紋理對象 6.4.2 從緩存(目標對象GL_PIXEL_UNPACK_BUFFER)中加載紋理6.4.3 從文件加載圖像(DDS為例)讀取一個圖像文件并返回內存中的紋素數據將紋素…

誰來定義未來座艙?新一代車載顯示「C位」之戰開啟

在汽車智能網聯化轉型過程中&#xff0c;車載顯示屏幕作為人車交互的重要載體&#xff0c;已經站上了迅猛發展的新起點。 一方面&#xff0c;伴隨著汽車智能化的加速滲透與發展&#xff0c;傳統中控屏與儀表顯示屏的單一顯示模式已經難以匹配智能化交互需求&#xff0c;車載顯…

基于JavaScript的MQTT實時通信應用開發指南

MQTT 協議入門與實踐&#xff1a;使用 JavaScript 構建實時通信應用 1. 什么是 MQTT&#xff1f; MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一種輕量級的 發布/訂閱&#xff08;Pub-Sub&#xff09; 消息協議&#xff0c;專為低帶寬、高延遲或不穩…

React 19中如何向Vue那樣自定義狀態和方法暴露給父組件。

文章目錄 前言一、什么是 useImperativeHandle&#xff1f;1.1 為什么需要 useImperativeHandle&#xff1f;1.2 基本語法 二、useImperativeHandle 的常見用法3.1 暴露自定義方法3.2子組件封裝的彈窗關閉方法暴露給外部 注意點&#xff1a;總結 前言 在 React 的函數組件中&a…

Windows定時關機工具

自己設計了一款簡單易用的windows定時關機工具&#xff0c;使用簡單&#xff0c;使用只需兩步&#xff1a; 1、輸入設定的時間 2、點擊開始計時 Ps: 1、文章頂部直接下載exe文件 2、文件設置不了免費下載&#xff0c;只能用云盤&#xff1a;定時關機工具.exe - 藍奏云。 w…

楓清科技受邀參加2025數據智能大會

近日&#xff0c;由中國通信標準化協會主辦&#xff0c;中國信通院、大數據技術標準推進委員會(CCSA TC601)承辦的“2025數據智能大會”在北京隆重召開&#xff0c;本屆大會以“Data X AI&#xff0c;數據燃動智能”為主題&#xff0c;聚焦央國企數智化轉型、下一代數據治理、數…

黑馬頭條-數據管理平臺

目錄 項目介紹 功能 項目準備 技術 驗證碼 驗證碼登錄 驗證碼登錄-流程 關于token token的介紹 token的使用 個人信息設置 個人信息設置和axios請求攔截器 axios響應攔截器和身份驗證失敗 優化-axios響應結果 發布文章 發布文章-富文本編輯器 發布文章-頻道列…

Pytorch3D 中涉及的知識點匯總

PyTorch3D 是 Facebook&#xff08;現 Meta&#xff09;AI 研究院&#xff08;FAIR&#xff09;推出的一個基于 PyTorch 的三維計算庫&#xff0c;主要用于 3D 計算機視覺與圖形學任務&#xff0c;如 3D 重建、渲染、點云處理、網格操作等。 下面是對 PyTorch3D 中重要涉及知識…

XML在線格式化工具

XML格式化 免費在線XML格式化與壓縮工具&#xff0c;一鍵美化、校驗、壓縮和優化您的XML代碼。支持自定義縮進、節點折疊&#xff0c;提升可讀性&#xff0c;減小文件體積&#xff0c;加速數據傳輸。 https://toolshu.com/xml 本工具是一款專為處理XML&#xff08;可擴展標記…

【軟件系統架構】系列四:嵌入式技術

目錄 一、嵌入式系統組成 (1)嵌入式處理器 (2)支撐硬件 (3)嵌入式操作系統 (4)支撐軟件 (5)應用軟件 二、嵌入式系統特性 三、嵌入式系統分類與分層結構 1.分類 2.嵌入式軟件的五層架構深入解析 (1)硬件層(Hardware Layer) (2)抽象層(Hardware Ab…

監管報送面試回答思路和示例

在銀行監管報送崗位的面試中&#xff0c;回答問題時需要展現出你的專業知識、實際操作經驗、問題解決能力以及對監管合規的重視。以下是對各類問題的回答思路和示例&#xff1a; 一、專業知識類問題 1. 請簡述銀行監管報送的主要類型和報送頻率 回答思路&#xff1a;分類介紹…

音視頻SDK架構演進的實踐與思考

“不是每一行代碼都值得驕傲&#xff0c;但每一次迭代&#xff0c;都是一次更接近極致的嘗試。” 從最初的數千行代碼、到如今跨平臺、全功能、穩定可靠的直播技術基座&#xff0c;大牛直播SDK走過了整整十年。十年&#xff0c;既是時間的刻度&#xff0c;更是技術沉淀與產品信…

vue.config.js配置學習

1.部署應用包時的基本 URL (baseUrl或publicPath) baseUrl在vue-cli 3.3 時棄用了&#xff0c;自此之后使用publicPath 默認&#xff1a;/ module.exports {// baseUrl:"/",publicPath: ./, ) 2.打包時輸出的文件位置&#xff1a;outputDir 默認: dist module.…

大模型——Prompt Design

Prompt Design 為什么未來最重要的寫作,不是寫給人看的,而是寫給AI理解的? 01|一切從一次“客服神操作”開始 前幾天前,我在看一場 YC Demo Day 分享的時候,聽到一個很炸裂的細節: 有個叫 Parahelp 的 AI 客服創業項目,靠一段幾百行的“提示詞”,打敗了市面上大多數…

web布局20

在當下&#xff0c;可用于 Web 布局的 CSS 特性有很多&#xff0c;而且這個集合越來越強大。自從 Flexbox 的兼容性越來越完善&#xff0c;它替代了浮動布局&#xff0c;成為主流的布局技術。只不過&#xff0c;近幾年來&#xff0c;CSS Grid 快速得到主流瀏覽器的支持&#xf…

數據集-目標檢測系列- 餐具叉子 數據集 fork >> DataBall

數據集-目標檢測系列- 餐具叉子 數據集 fork &#xff1e;&#xff1e; DataBall 貴在堅持&#xff01; * 相關項目 1&#xff09;數據集可視化項目&#xff1a;gitcode: https://gitcode.com/DataBall/DataBall-detections-100s/overview 2&#xff09;數據集訓練、推理相…

力扣-45.跳躍游戲 ll

題目描述 給定一個長度為 n 的 0 索引整數數組 nums。初始位置為 nums[0]。 每個元素 nums[i] 表示從索引 i 向后跳轉的最大長度。換句話說&#xff0c;如果你在 nums[i] 處&#xff0c;你可以跳轉到任意 nums[i j] 處: 0 < j < nums[i] i j < n 返回到達 nums[n…

借助STL工具解題的各個技巧

目錄 前言 STL容器一覽 set和map如何降序構建 set和map如何插入自定義對象 multiset和multimap如何降序構建 multiset和multimap如何插入自定義對象 multi_系列如何equal_range multiset multimap unorder_multiset unorder_multimap STL容器迭代器一覽 迭代器性能一覽…

【Linux 設備樹DTS】

Linux 設備樹DTS 一、設備樹概述&#xff1a;為什么它是 Linux 驅動開發的關鍵&#xff1f;二、設備樹語法詳解&#xff1a;從基礎到高級2.1 基本結構&#xff1a;節點與屬性2.2 數據類型與表示方式2.3 引用與別名2.4 address-cells和size-cells屬性詳解2.5 包含與覆蓋2.6 未定…

【技巧】使用frpc安全地內網穿透ssh訪問內網機器

【技巧】使用frpc安全地內網穿透ssh訪問內網機器 0. 為什么需要部署 office的機器可以單向訪問互聯網&#xff0c;互聯網無法直接訪問到這臺機器。有時候需要從家里通過ssh遠程訪問和配置。 在云服務器上部署frpc把轉發ssh給需要訪問的機器。 1. 互聯網云服務器&#xff08;…