如何在上传至Log Analytics前过滤Azure Data Lake Store备份日志?
嗨,针对你遇到的Azure Data Lake Store备份日志占用Log Analytics存储空间、产生高额成本的问题,我整理了几个实用方案,从源头拦截到后期清理都有覆盖,你可以根据自身场景选择:
方案一:在诊断设置阶段直接过滤BACKUP用户日志(上传前拦截)
这是最直接的方式,从日志生成的源头就把BACKUP用户的记录拦下来,根本不会传到Log Analytics里。具体操作步骤:
- 打开你的ADLS账户(不管是Gen1还是Gen2),找到左侧菜单的「诊断设置」
- 新建或者编辑现有的诊断设置,在日志类别(比如
StorageRead、StorageWrite这类)下方,点击「添加筛选器」 - 选择筛选字段为
identity,操作符选「不等于」,填入你的BACKUP用户的具体标识(注意要和日志里的用户名称完全匹配,比如是服务主体的名称或者用户UPN) - 保存设置后,后续只有非BACKUP用户的日志会被发送到Log Analytics,直接从源头减少无效数据
方案二:用Event Hub做中间层实现自定义过滤
如果原生诊断设置的筛选逻辑满足不了你的需求(比如需要结合多个字段判断),可以加一层Event Hub做中转,用自定义代码过滤后再推送到Log Analytics:
- 先修改ADLS的诊断设置,把日志发送到Event Hub而不是直接到Log Analytics
- 创建一个Azure Function(用Python、C#都行),触发源设置为你的Event Hub
- 在Function代码里写逻辑:解析每条日志的
identity字段,判断是否为BACKUP用户,只保留符合要求的日志 - 把处理后的日志通过Log Analytics的Data Collector API发送过去
- 这种方式适合复杂过滤场景,但会多一层架构,需要维护Function的代码和运行状态
方案三:Log Analytics端配置自动清理策略(上传后处理)
如果暂时没法调整源头的推送设置,也可以在Log Analytics里做后期清理:
- 自定义数据保留:针对ADLS日志对应的表(比如
StorageBlobLogs),设置比其他审计日志更短的保留期——比如备份日志只保留7天,核心审计日志保留365天,到期后自动删除 - 自动化删除:创建日志查询规则,定期运行查询找出BACKUP用户的日志,然后用Azure Automation Runbook调用Log Analytics的删除API清理这些记录(注意:删除操作需要对应权限,一定要测试好再批量执行,避免误删有效日志)
额外小建议
- 先去Log Analytics里查一下BACKUP用户的日志具体是哪些操作,比如是不是只有复制类操作,如果是,也可以直接在诊断设置里过滤掉
CopyBlob这类操作,可能比按用户过滤更精准 - 配置完策略后,记得定期查看Log Analytics的使用报告,确认成本和存储空间的变化,随时调整策略
内容的提问来源于stack exchange,提问作者Roman
相关产品推荐
相关产品推荐

