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

Kusto函数无法封装控制命令,如何实现Ingestion失败触发邮件告警?

解决ADX摄取失败自动告警(邮件)的方案

既然控制命令没法封装到函数里,我们可以换几种原生Azure工具结合的方式来实现自动告警,下面是几个实用的方案:

方案一:用Azure Monitor原生告警(最快上手)

这是最直接的无代码方案,完全靠Azure Portal配置就能搞定:

  • 打开你的ADX集群资源页,进入监控 → 警报 → 创建警报规则
  • 在「信号逻辑」里,选择日志作为信号类型,然后输入Kusto查询语句:
    .show ingestion failures 
    | where ingestion_time() > ago(30m)  // 按需调整检测时间范围
    | project OperationId, Database, Table, FailureReason, IngestionSourcePath  // 只保留你关心的列
    
  • 设置警报条件:当查询返回的记录数大于0时触发告警
  • 添加动作组,选择「电子邮件/短信/推送/语音」,填入要接收告警的邮箱地址
  • 保存规则后,只要有符合条件的摄取失败,就会自动发邮件通知你

方案二:Azure Functions + Kusto SDK(自定义灵活性高)

如果需要对失败数据做更复杂的过滤或处理(比如只告警特定表的数据损坏失败),可以用这个方案:

  • 创建一个定时器触发的Azure Function(比如每5分钟执行一次)
  • 在Function代码中,用Kusto SDK调用ADX的摄取失败查询(以Python为例):
    from azure.kusto.data import KustoClient, KustoConnectionStringBuilder
    
    # 配置ADX连接信息
    cluster = "https://<你的ADX集群名>.kusto.windows.net"
    client_id = "<你的服务主体ID>"
    client_secret = "<你的服务主体密钥>"
    authority_id = "<你的租户ID>"
    
    # 建立连接
    kcsb = KustoConnectionStringBuilder.with_aad_application_key_authentication(cluster, client_id, client_secret, authority_id)
    client = KustoClient(kcsb)
    
    # 执行摄取失败查询,只过滤数据损坏相关的失败
    query = """
    .show ingestion failures 
    | where ingestion_time() > ago(30m)
    | where FailureReason contains "data corruption"
    | project OperationId, Table, FailureReason
    """
    
    response = client.execute_query("<你的数据库名>", query)
    failures = response.to_dict()
    
    # 如果有失败记录,触发邮件告警
    if len(failures["data"]) > 0:
        # 这里可以集成SendGrid或Office 365 Outlook发送邮件,示例省略具体实现
        send_custom_alert_email(failures["data"])
    
  • 集成邮件发送功能:可以用Azure的SendGrid服务,或者Office 365 Outlook连接器,把失败详情格式化后塞进邮件正文

方案三:Event Grid + Logic Apps(事件驱动型)

ADX支持将摄取失败事件实时推送到Event Grid,然后用Logic Apps自动处理并发邮件:

  • 进入ADX集群的数据连接 → 添加 → Event Grid,配置时选择「摄取失败」作为要订阅的事件类型
  • 创建一个新的Azure Logic Apps,选择「Event Grid触发器」,触发条件设为接收ADX的摄取失败事件
  • 在Logic Apps的工作流中,添加「发送电子邮件」动作(比如用Office 365 Outlook),把事件中的关键信息(比如tableName、failureReason)插入到邮件内容里
  • 保存工作流后,每次ADX发生摄取失败,Event Grid会自动把事件推给Logic Apps,触发邮件发送

几个实用注意点

  • 权限配置:不管用哪种方案,都要确保对应的服务有足够的权限访问ADX(比如服务主体需要ADX的Viewer权限)
  • 过滤无效告警:可以在查询里添加条件,排除临时网络波动等非关键失败,比如where FailureReason !contains "timeout"
  • 获取详细错误:如果需要更深入的失败详情,可以在.show ingestion failures后加上with (details=true),获取完整的错误堆栈信息

内容的提问来源于stack exchange,提问作者Ada Pongaya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:03:35