在DevOps的C#测试项目中查询Azure Function调用状态
使用C#查询Azure Application Insights确认函数运行状态
核心思路
TelemetryClient是用来发送遥测数据的,无法直接实现查询操作。要完成指定需求,需借助Application Insights的查询API,推荐使用官方最新的Azure.Monitor.Query SDK,这是专门用于查询监控数据的工具包。
实现步骤
1. 安装依赖NuGet包
首先安装所需的SDK包:
Install-Package Azure.Monitor.Query Install-Package Azure.Identity
Azure.Identity用于身份验证,支持本地Azure CLI认证、托管身份等多种方式。
2. 完整代码示例
以下代码实现了查询最近1小时内指定函数是否有成功运行记录的功能:
using Azure.Identity; using Azure.Monitor.Query; using System; using System.Threading.Tasks; public class FunctionRunChecker { // appInsightsResourceId:Application Insights资源的ID // functionName:要检查的目标函数名称 public async Task<bool> IsFunctionRunInLastHour(string appInsightsResourceId, string functionName) { // 初始化日志查询客户端 var logsClient = new LogsQueryClient(new DefaultAzureCredential()); // 构建Kusto查询语句:筛选最近1小时内指定函数的成功调用 string kustoQuery = @$"requests | where name == '{functionName}' | where timestamp > ago(1h) | where success == true | take 1"; try { // 执行查询,时间范围设置为最近1小时 var queryResponse = await logsClient.QueryAsync( resourceId: appInsightsResourceId, query: kustoQuery, timespan: TimeSpan.FromHours(1)); // 若返回结果有数据,说明函数最近1小时内成功运行过 return queryResponse.Value.Table.Rows.Count > 0; } catch (Exception ex) { // 处理查询异常,比如权限不足、资源不存在等 Console.WriteLine($"查询出错:{ex.Message}"); return false; } } }
3. 获取Application Insights资源ID
你可以通过AZ CLI命令获取目标资源的ID:
az monitor app-insights component show --app "{AZURE_FUNCTION_NAME}" --resource-group "{RESOURCE_GROUP_NAME}" --query id -o tsv
4. 身份验证说明
- 本地开发环境:
DefaultAzureCredential会自动使用你已登录的Azure CLI账号,确保提前执行az login完成登录。 - Azure托管生产环境:给托管资源(如Azure Function、虚拟机等)分配Application Insights Reader角色,即可通过托管身份实现无密码认证。
关键注意事项
- 确保查询语句中的
name值与函数在Application Insights中的调用名称完全匹配(可在Application Insights的Logs页面查看requests表的name字段确认)。 - 若只需检查函数是否运行(不关注运行结果),可删除查询语句中的
where success == true条件。 - 该方法可直接集成到集成测试流程中,当返回
true时触发后续测试步骤。
内容的提问来源于stack exchange,提问作者Jonathan Harr
相关产品推荐
相关产品推荐

