Azure Functions监控工具

一个提供Azure Functions资源全面监控和洞察工具的MCP服务器,支持多种查询和分析功能。

  • by liliankasem
  • C#
  • 本地部署
  • 更新于
在 GitHub 查看 liliankasem/azfunc-insights-mcp-server

使用说明

Azure功能洞察MCP服务器

Azure Functions MCP(模型上下文协议)服务器,为您的Azure Functions资源提供全面的监控和洞察工具。用。NET 10隔离工作程序和Azure Functions MCP扩展。

先决条件

🚀 快速开始

简单的三步设置:

  1. 添加您的Azure订阅ID 到 src/local.settings.json:

    {
      "Values": {
        "AZURE_SUBSCRIPTION_ID": "your-subscription-id-here"
      }
    }
    

    记得删除 .sample 从 src/local.settings.sample.json

  2. 启动MCP服务器:

    cd src
    func start
    
  3. 连接VS代码:

    • 打开 .vscode/mcp.json
    • 点击“开始” local-azure-function-insights 服务器
    • 开始在GitHub Copilot聊天中使用MCP工具!

聊天中的工具调用示例:

  • #mcp_local-azure-f_ListFunctions 列出我的所有Azure功能应用
  • #mcp_local-azure-f_GetFunctionStatus 我的功能应用程序的状态如何?
  • #mcp_local-azure-f_GetFailedExecutions 显示支付处理程序的失败执行
  • #mcp_local-azure-f_ListFailingFunctions 我的哪些功能出现故障?
  • #mcp_local-azure-f_GetTraceLogs 显示损坏应用程序的跟踪日志

特性

🔍 七大强大的MCP工具

  1. 列表功能 -列出订阅中的所有Azure功能应用

    • 按资源组筛选
    • 分页结果(默认每页50个)
    • 返回:名称、位置、状态、运行时版本、标记
  2. GetFunction状态 -获取特定功能应用程序的详细状态

    • 当前状态(运行、停止等)
    • 应用程序中所有功能的列表
    • 运行时版本和主机信息
    • 主机健康检查 (检查 /admin/host/status 和 /admin/host/ping)
    • 检测运行时错误 (InternalServerError,主机故障)
  3. GetFunctionMetrics -检索执行指标和分析

    • 总执行次数、成功执行次数和失败执行次数
    • 平均、最小和最大持续时间统计
    • 成功率百分比
    • 可配置的时间范围(1-720小时)
  4. GetFailed执行失败 -分析最近的故障及其全部细节

    • 错误消息和异常类型
    • 完整的堆栈跟踪 用于调试
    • 用于关联的调用ID
    • 执行时长
    • 包括来自请求、异常和跟踪日志的错误
    • 可配置计数(1-100)和时间范围
  5. GetTraceLogs -从Application Insights获取最近的跟踪日志

    • 可用于调试损坏的功能应用程序
    • 即使请求/异常表为空,也能正常工作
    • 可配置的严重性级别过滤(详细、信息、警告、错误、严重)
    • 可配置的计数和时间范围
  6. 列出失败功能 -所有故障功能应用程序概述

    • 显示哪些应用程序最近出现故障
    • 每个应用程序的错误率和失败次数
    • 先按表现最差者排序
    • 整个订阅的快速健康仪表板
  7. 查询应用洞察 -执行自定义KQL查询

    • 运行任何Kusto查询语言查询
    • 访问完整的应用程序洞察遥测
    • 查询日志分析工作区 (AppRequests、AppExceptions、AppTraces表)
    • 定制分析和报告
    • 可配置的时间范围

设置

1.克隆和恢复

git clone https://github.com/liliankasem/azfunc-insights-mcp-server.git
cd /path/to/azfunc-insights-mcp
dotnet restore

2.配置身份验证

选项A:Azure CLI(建议用于本地开发)

az login
az account set --subscription "YOUR_SUBSCRIPTION_ID"

选项B:服务负责人(生产/CI/CD)

设置环境变量:

export AZURE_TENANT_ID="your-tenant-id"
export AZURE_CLIENT_ID="your-client-id"
export AZURE_CLIENT_SECRET="your-client-secret"

3.配置应用程序设置

编辑 local.settings.json:

{
    "IsEncrypted": false,
    "Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
        "AZURE_SUBSCRIPTION_ID": "your-subscription-id-here"
    }
}

必修的:

  • AZURE_SUBSCRIPTION_ID -您的Azure订阅ID

4.授予所需的Azure权限

您的Azure身份(用户或服务主体)需要:

  • 读者 在包含功能应用程序的订阅或资源组中的角色
# Grant Reader access to subscription
az role assignment create \
  --assignee "user@example.com" \
  --role "Reader" \
  --scope "/subscriptions/YOUR_SUBSCRIPTION_ID"

本地运行

启动Azurite(Azure存储模拟器)

如果您没有配置Azure存储:

# Install Azurite
npm install -g azurite

# Start Azurite
azurite --silent --location ./azurite --debug ./azurite/debug.log

运行功能应用程序

cd src
func start

部署

使用Azure Developer CLI部署到Azure

部署最简单的方法是使用 azd:

# Login to Azure
az login

# Deploy everything (infrastructure + app)
azd up

# You'll be prompted for:
# - Environment name (e.g., "dev", "prod")
# - Azure location (e.g., "eastus", "westus2")
# - Azure subscription (if you have multiple)

部署的内容:

  • 资源组
  • 存储帐户
  • 应用洞察
  • 应用服务计划(灵活消费-FC1 SKU)
  • 功能应用程序:
    • 系统分配的管理身份
    • Flex消费配置(2048 MB内存,最多100个实例)
    • 所需的应用程序设置(订阅ID,默认为此应用程序正在部署到的订阅ID)
    • 自动RBAC角色分配(订阅阅读器、日志分析阅读器)

更新应用程序代码:

azd deploy

清理所有资源:

azd down

使用示例

连接MCP客户端

配置您的MCP客户端(例如,Claude Desktop、VS Code扩展)以连接到:

http://localhost:7071/runtime/webhooks/mcp

工具调用示例

列出所有功能应用程序

{
  "tool": "ListFunctions",
  "arguments": {}
}

列出特定资源组中的功能应用程序

{
  "tool": "ListFunctions",
  "arguments": {
    "resourceGroupName": "my-functions-rg",
    "pageSize": 25
  }
}

获取功能应用程序状态

{
  "tool": "GetFunctionStatus",
  "arguments": {
    "appName": "my-function-app"
  }
}

获取过去48小时的指标

{
  "tool": "GetFunctionMetrics",
  "arguments": {
    "appName": "my-function-app",
    "hoursBack": 48
  }
}

获取最近20次失败的执行

{
  "tool": "GetFailedExecutions",
  "arguments": {
    "appName": "my-function-app",
    "count": 20,
    "hoursBack": 24
  }
}

查询应用程序洞察(使用日志分析表)

{
  "tool": "QueryApplicationInsights",
  "arguments": {
    "appName": "my-function-app",
    "query": "AppRequests | where Success == false | summarize count() by ResultCode",
    "hoursBack": 24
  }
}

获取调试跟踪日志

{
  "tool": "GetTraceLogs",
  "arguments": {
    "appName": "my-function-app",
    "count": 50,
    "minSeverityLevel": 3,
    "hoursBack": 24
  }
}

列出所有失败的功能应用程序

{
  "tool": "ListFailingFunctions",
  "arguments": {
    "hoursBack": 24
  }
}

故障排除

“未配置AZURE_SUBSCRIPTION_ID”

确保 AZURE_SUBSCRIPTION_ID 已设置 local.settings.json 或环境变量。

“未配置应用程序洞察”

这意味着Function App没有链接Application Insights,或者服务无法发现它。MCP服务器通过以下方式自动发现每个Function App的Application Insights工作区:

  1. 阅读 hidden-link: /app-insights-resource-id 功能应用程序中的标签
  2. 按照资源链查找日志分析工作区
  3. 提取工作区客户ID进行查询

如果遥测功能不起作用,请确保:

  • 功能应用程序启用了应用程序洞察
  • 这 hidden-link: /app-insights-resource-id 标签出现在功能应用程序上
  • 您的托管身份对Application Insights资源具有读取器权限

注: Application Insights工作区发现通过ARM标签工作,独立于Function App的环境变量。这意味着即使Function App主机损坏,它也能正常工作。

“没有遥测数据可用”

当日志分析工作区存在但没有数据时,会出现此消息。常见原因:

  • 功能应用程序尚未被调用
  • 尚未摄入Application Insights数据(可能需要几分钟)
  • 工作区是新创建的,为空
  • 功能应用程序已损坏,无法发送遥测数据

尝试使用 GetTraceLogs 检查是否有任何跟踪数据可用,或 GetFunctionStatus 以验证主机健康状况。

身份验证失败

# Verify Azure CLI login
az account show

# Test Azure access
az functionapp list --query "[].{Name:name, State:state}" -o table

速率限制

该服务将并发Azure API请求限制为5。如果你遇到节流问题,这是为了防止Azure API不堪重负而设计的。

许可证

MIT许可证-有关详细信息,请参阅许可证文件

资源