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

如何按自定义条件删除Azure日志并保留指定例外日志

嘿,针对你想要按自定义条件清理Azure Application Insights日志的需求,结合你用Asp.Net Core 3.1 + Serilog上报结构化日志的场景,我整理了手动和自动两种可行方案,帮你实现「删除大部分日志,但保留近3天内事件名称为LogIn的日志」的目标:

按自定义条件清理Azure Application Insights日志的方案

一、手动清理(适合临时一次性操作)

如果你只是偶尔需要执行一次清理,可以通过日志查询+CLI/API的组合来完成:

  1. 先验证筛选条件
    先在Log Analytics里跑个查询,确认你要删除的日志范围(也就是排除近3天内_function_为LogIn的所有日志):

    union *
    where timestamp < ago(3d) or (_function_ != "LogIn")
    

    这里要注意:如果你的LogIn事件是存在于AI的name字段(而不是自定义的_function_属性),就把查询里的_function_换成name就行,确保能精准筛选出要删除的内容。

  2. 执行删除操作

    • 用Azure CLI的话,先拿到你的Application Insights资源ID,然后通过az rest调用删除API:
      az rest --method POST --uri "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Insights/components/{componentName}/delete?api-version=2021-04-01" --body "{\"query\":\"union * where timestamp < ago(3d) or (_function_ != 'LogIn')\"}"
      
    • 也可以在Log Analytics里把要删除的日志条目ID导出,再通过REST API批量删除,不过CLI的方式更直接。

二、自动清理(适合长期定期执行)

如果需要定期自动做这件事,推荐用Azure原生服务来实现,不用自己维护定时任务:

方案1:Azure Functions定时触发

  1. 建一个定时触发的Azure Function(比如每天凌晨跑一次)。
  2. 在Function代码里,先调用Azure Monitor的日志查询API,拿到所有需要删除的日志条目ID(就是上面那个查询的结果)。
  3. 接着调用Azure Monitor的日志删除API,批量删掉这些条目。
    👉 注意:要给Function的服务主体分配Monitoring Contributor角色,确保它有足够权限执行删除操作。

方案2:连续导出+数据保留策略(更省心的原生方案)

这个方法不用写代码,靠Azure的原生功能就能实现:

  1. 导出要保留的日志:在Application Insights的「连续导出」设置里,配置只导出近3天内_function_为LogIn的事件到Azure存储账户/ADLS Gen2。筛选条件用这个Kusto查询:
    where timestamp >= ago(3d) and _function_ == "LogIn"
    
  2. 设置自动清理规则:在Application Insights的「数据保留」里,把保留期设为3天。这样超过3天的所有日志会自动被Azure删除,而你需要的LogIn事件已经提前导出到存储账户里了。
    如果需要长期存这些LogIn日志,还能给存储账户加个生命周期管理策略,把旧数据归档到低成本的冷存储层。

三、重要提醒

  • 删除日志是不可逆的!执行前一定要反复验证你的查询条件,别误删了要保留的内容。
  • 确认你的Serilog配置没问题:确保_function_这个自定义属性确实能在Application Insights里被识别到,不然筛选条件会失效。

内容的提问来源于stack exchange,提问作者David Petric

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 11:37:51