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.tpcf.cn/web/86107.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;…