You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 23:42:43