如何使用自定义条件从 Azure 中删除日志?

How to delete logs from Azure using custom conditions?

我正在尝试找到一种使用某些自定义条件(自动或手动现在并不重要)从 Azure 中删除日志的方法,例如:

假设我想从 Azure 中删除所有日志,但最近 3 天发生的自定义事件名称为 'LogIn' 的异常除外。

有没有办法在 Azure 中执行此操作?

提前致谢!


[我的背景]

我正在使用带有 Asp.Net Core 3.1 的 Application Insights 和使用 Serilog 结构化日志记录记录的 Application Insights。

我将我的日志作为事件发送,然后根据该数据对应用程序监控和警报进行自定义查询。

Serilog调用的几个例子:

  _logger.Debug("{randomValue} {temperature}", rng, temperature);
  _logger.Information("{_class_} {_function_}", nameof(UserService), nameof(IsLoggedIn));
  _logger.Error(ex, "{_function_}", nameof(LogIn));

要从 application insights 中删除日志,唯一的方法是使用 purge rest api。但它有一些限制。

请记住,您应该每次都从每个 table 中删除日志。例如,您应该分别从 traces table / requests table 等删除日志。下面列出了所有 table:

1.Here 是使用 purge rest api 从 traces table 中删除日志的示例。导航到清除 api 页面,单击 尝试一下 按钮(按钮为绿色)-> 然后登录,并填写所有必要的信息 -> 并在body 字段,设置过滤器如下:

注意,returns成功后,向下滚动到页面底部,有“operationId”。请写下来,您可以通过Get Purge Status.

用它来检查清除状态

2.Now, 您可以使用相同的方法从 exceptions table 中删除日志。并且根据您的需要,您应该进行更多的清除操作。首先,如上所述,通过指定 3 天前的时间戳删除所有异常日志。其次,您可以删除最近 3 天内事件名称不是“LogIn”的日志,如下所示:

{
        "table": "exceptions",
        "filters":  [
          {
            "column": "the column name",
            "operator": "==",
            "value": "not LogIn"         
          }
        ]   
}

这里的限制是api现在不支持运算符!=,因此您需要删除customEvent名称不是“LogIn”的日志使用上面的过滤器。完全支持的运算符是 here.

3.The 最后一件事是,由于某些原因,即使我们进行了清除,日志仍然保留了大约几天(7 天或 3天)在应用程序洞察中。请使用Get Purge Status查看进度。