你有没有过这种体验:应用在 Azure 上跑了一个月,除了 HTTP 状态码,你对它内部发生了什么一无所知。请求慢在哪?依赖调用有没有瓶颈?异常率是不是在悄悄上升?
这些问题不是没法回答,是需要你手动搭一套遥测管线。Application Insights 本身不难配,麻烦的是每次新建项目、每次换语言、每次改托管方式,你都得把同一套配置重新走一遍。

AppInsights Instrumentation 这个 Smithery Skill 做的事很简单:把这套繁琐流程变成一句话触发。它不是给你看文档教你配,是直接帮你配好。ASP.NET Core、Node.js、Python 三条技术栈通吃,Azure Portal 一键自动注入和手动代码埋点两种模式随你选。
有个细节让我觉得这 Skill 的设计者真的在可观测性领域泡过很久:它强制你在动手前先确认”编程语言 + 框架 + 托管方式”这个三元组。不是因为死板,是因为这三者决定了整个 instrumentation 策略的分叉方向。选错一个,后面的步骤全白做。
环境准备
前置条件不复杂,但有几个容易踩坑的地方。
你需要在 Azure 上有一个已经跑起来的 Web 应用。App Service(代码模式或容器模式)、Container App、Function App 都行。Skill 会先读你工作区的代码判断语言和框架,然后问你托管位置,你没告诉它的它不会瞎猜。
本地环境方面,如果你走手动埋点路径,az CLI 需要在本机可用并且已经登录到正确的订阅。Skill 里内嵌的 PowerShell 脚本本质上是对 az monitor app-insights 和 az webapp config appsettings 的封装,没有额外的依赖。
一个经常被忽略的前提:你的 Azure 账号需要 Microsoft.Insights 资源提供商的注册权限。大多数订阅下这是默认开通的,但如果用的是被锁定权限的企业订阅,可能会在这里卡住。Skill 本身不检查这个,得自己确认。
如果你是 ASP.NET Core 且用 Azure App Service 托管,这里的体验是最丝滑的,Skill 会直接给你一个 Azure Portal 的 deep link 打开 Application Insights 刀锋页,点两下就完事。不需要改一行代码。
操作流程
这个 Skill 的决策逻辑其实只有两层,但每层都有真实的分叉点。
第一步,Skill 判断你能不能走自动注入。目前自动注入只覆盖 ASP.NET Core 和 Node.js,要求托管在 Azure App Service 上。它直接拼出一个 Azure Portal URL:
https://portal.azure.com/#resource/subscriptions/{subscription_id}/resourceGroups/{resource_group_name}/providers/Microsoft.Web/sites/{app_service_name}/monitoringSettings
你把订阅 ID、资源组名和应用名填进去,Portal 里的 Application Insights 开关一打开,遥测数据就开始上报了。这个 auto-instrument 路径背后用的是 Azure 的无代码注入机制,本质上是在运行时给应用挂了一个探针,不需要重新部署。
如果你不在 App Service 上,或者用的是 Python,就走手动埋点。
先创建 Application Insights 资源。Skill 给了两个选择:Bicep 模板或 Azure CLI。如果有现成的 IaC 模板,它在 examples/appinsights.bicep 里有一份干净的 Bicep 配置,Log Analytics Workspace 和 Application Insights 组件一起创建,输出连接字符串。跟手写比,它的 Log Analytics 工作区用了 PerGB2018 计费层,30 天保留期,这是 Azure Monitor 的默认推荐配置,不是乱来的。

用 CLI 的话是三步:
az extension add -n application-insights
az monitor log-analytics workspace create --resource-group $rg --workspace-name $workspaceName
az monitor app-insights component create --app $appInsightsName --resource-group $rg --workspace $workspaceName
资源创建完后改代码。三种语言的改动都非常克制,核心逻辑都一样:装一个 SDK 包,在启动入口加一两行配置,然后设置环境变量 APPLICATIONINSIGHTS_CONNECTION_STRING。
ASP.NET Core 的改动量让人有点意外,总共就三处。装包:
dotnet add package Azure.Monitor.OpenTelemetry.AspNetCore
然后在 Program.cs 里加两行:
using Azure.Monitor.OpenTelemetry.AspNetCore;
builder.Services.AddOpenTelemetry().UseAzureMonitor();
Node.js 也一样精简:
npm install @azure/monitor-opentelemetry
const { useAzureMonitor } = require("@azure/monitor-opentelemetry");
useAzureMonitor();
Python 的改动略多一点,因为它需要通过 logging 模块发送遥测:
pip install azure-monitor-opentelemetry
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor(logger_name="my_app")
三种语言最后一步都是同一个:把 Application Insights 的连接字符串设为环境变量 APPLICATIONINSIGHTS_CONNECTION_STRING。Skill 特意强调不要在 appsettings.json 里写,环境变量是推荐方式。这个设计决策是对的,连接字符串放在 IaC 模板或 CI/CD pipeline 里,能保证每次部署自动注入,不会有人手改配置文件的隐患。
关键设计
仔细看这个 Skill 的结构,你会发现它不是一个”教你怎么做”的教程文档,而是一个”帮你做”的自动化决策脚本。
它的三层架构很有趣。最外层是上下文收集层,强制确认语言 + 框架 + 托管三元组。中间层是路由层,决定走自动注入还是手动埋点。最内层是执行层,每种平台和语言都有一条独立的操作指南和代码模板。
这个分层的精妙之处在于:每层都有自己的失败边界。上下文收集错了,路由就不会选对方向。路由选错了,执行指南就不适用。它不像那种”一股脑把所有语言的所有配置全列出来让你自己挑”的文档,而是先帮你收窄到一条具体路径,再给这条路径上的精确指令。
Bicep 模板的设计也看得出用心。它把 App Insights 和 Log Analytics 作为一个原子单元创建,PerGB2018 是 Azure Monitor 从 2018 年至今一直推荐的基础定价层,retentionInDays: 30 是默认的免费保留期上限。这两个参数不是随便写的,是 Azure 可观测性最佳实践的直接映射。
但有个设计限制值得点出来。自动注入那条路径本质上只是一个 Portal URL 生成器,Skill 自己没有调用 Azure API 的权限,也没法自动化 Portal 里的点击。它帮你精准定位到正确的刀锋页,但最后的开关还得你自己动手点。这不是 Skill 的问题,是 Smithery 平台的权限模型决定的。如果你用 Bicep 或者 CLI 路径,倒是能完全自动化。
还有一个容易忽略的亮点:手动埋点路径下,ASP.NET Core 和 Node.js 都用了 OpenTelemetry 作为底层协议。这意味着一旦接入了 Application Insights,你的遥测数据也兼容其他支持 OTel 的后端。不是被锁定在 Azure 生态里。

使用场景
这个 Skill 最适合的场景不是”第一次配遥测”,而是”第 N 次配遥测”。
举个例子。你维护着一个多服务的 ASP.NET Core 应用,每个新加的服务都要走一遍相同的 Application Insights 配置流程。以前你可能复制粘贴上一份 Bicep 模板、改改名字、再跑一遍 CLI。现在直接告诉 Skill 你加了一个新的 App Service,它自动识别是 ASP.NET Core + App Service 组合,直接走自动注入路径,Portal deep link 到手。
Python 场景的体验稍有不同。Python 的遥测是通过标准库的 logging 模块注入的,这意味着如果你的应用已经有了一套 logging 体系,接入 Application Insights 不会破坏现有的日志管道。Skill 生成的 configure_azure_monitor() 调用是非侵入式的,它本质上是在已有的 logger 上加了一个 Azure Monitor exporter。
但 Skill 有一个明确的实用边界:它假设你的应用已经在 Azure 上跑起来了。如果你的项目还在本地开发阶段,Skill 会建议你先部署到 Azure 再回来配遥测。这不是限制,是务实。Application Insights 是为生产环境设计的可观测性工具,本地 debug 用 Visual Studio 自带的诊断工具或者 dotnet trace 更合适。
洞察与反思
用了几个类似的可观测性配置工具后,我发现 AppInsights Instrumentation 真正的竞争力不是”能做”,是”不需要你知道太多也能做对”。
大部分 Azure Monitor 文档的问题在于信息过载。你搜 “ASP.NET Core Application Insights”,会得到几十页内容,光是配置方式就分了六七种:
-
手动配置 vs 自动配置 -
代码埋点 vs 无代码注入 -
经典 API 模式 vs 现代 OpenTelemetry 模式
区分这些路径本身就是一项认知负担。
这个 Skill 把决策树压缩到了两个关键问题:你用的是哪种语言?你的应用托管在哪?根据这两个答案,它只给你一条路径,屏蔽掉其他所有不相关的选项。这种”决策收窄”的思路值得其他 DevOps 类 Skill 借鉴,尤其在云平台服务爆炸式增长的今天,”知道不需要什么”和”知道需要什么”同等重要。
Security 和合规方面有个容易遗漏的点:连接字符串通过环境变量注入,而不是硬编码在代码或配置文件里。这意味着它天然支持 Secret Store 集成,如果你用 Azure Key Vault,可以直接引用而不用把连接字符串明文放在 IaC 模板里。Skill 的 PowerShell 脚本没有显式提这一点,但架构上留了空间。
不过,这个 Skill 目前只覆盖了 OpenTelemetry 的 trace 和 logging 两个信号,metrics 的配置是缺失的。如果你需要自定义 metrics(比如业务级别的计数器或直方图),在配置完 Skill 之后还需要手动加 AddMeter() 调用。这不是 Skill 的 bug,是它的 scope 选择,先把 80% 的人需要的 80% 的遥测搞定,不追求大而全。

资源地址
| 资源 | 地址 |
|---|---|
| Smithery 页面 | https://smithery.ai/skills/github/appinsights-instrumentation |
| GitHub 仓库 | https://github.com/github/awesome-copilot |
| Azure Application Insights 文档 | https://learn.microsoft.com/azure/azure-monitor/app/app-insights-overview |
| OpenTelemetry .NET SDK | https://github.com/open-telemetry/opentelemetry-dotnet |
总结
AppInsights Instrumentation 做的事情说出来很简单:把 Azure Application Insights 的接入流程从”查文档 → 选路径 → 改代码 → 配环境变量”变成”说一句话 → 确认两个问题 → 照着生成的指令执行”。
它真正的价值不在技术复杂度上,而在决策简化上。一个优秀的 DevOps 自动化工具,不该让用户在 N 条差不多的配置路径之间纠结,而是有能力根据上下文帮你选一条对的。
如果你已经在 Azure 上跑了 Web 应用但还没配可观测性,这个 Skill 花五分钟试一下绝对不亏。不管你用的是 ASP.NET Core、Node.js 还是 Python,它都能一条路径走通。
Bicep 模板、CLI 命令和代码改动量全都是经过裁剪的,没有多余操作。
配完之后,去 Application Insights 的 Application Map 看一眼,你会第一次真正看清你的应用内部长什么样。
