将 Log Analytics API 结果保存到 Azure Table 存储

Save Log Analytics API results to Azure Table Storage

我开始学习 Azure 逻辑应用程序,我的首要任务是通过调用 azure 的日志分析来存储特定 Kusto 查询的结果 https://api.loganalytics.io/v1/workspaces/{guid}/query

目前,我可以在 Logic App 中使用 Http 成功调用日志分析 api,这是示例 return。

{
  "tables": [
    {
      "name": "PrimaryResult",
      "columns": [
        {
          "name": "UserPrincipalName",
          "type": "string"
        },
        {
          "name": "OperationName",
          "type": "string"
        },
        {
          "name": "ResultDescription",
          "type": "string"
        },
        {
          "name": "AuthMethod",
          "type": "string"
        },
        {
          "name": "TimeGenerated",
          "type": "string"
        }
      ],
      "rows": [
        [
          "first.name@email.com",
          "Fraud reported - no action taken",
          "Successfully reported fraud",
          "Phone call approval (Authentication phone)",
          "22-01-03 [09:01:03 AM]"
        ],
        [
          "last.name@email.com",
          "Fraud reported - no action taken",
          "Successfully reported fraud",
          "Phone call approval (Authentication phone)",
          "22-02-19 [01:28:29 AM]"
        ]
      ]
    }
  ]
}

根据这个结果,我陷入了如何迭代 json 结果的 rows 属性 并将这些数据保存到对应于columns 属性 在 json 结果中。

例如,

| UserPrincipalName    | OperationName                    | ResultDescription           | AuthMethod                              | TimeGenerated |
---------------------------------------------------------------------------------------------------------------------------------------------------------------
| first.name@email.com | Fraud reported - no action taken | Successfully reported fraud | Phone call approval (Authentication phone) | 22-01-03 [09:01:03 AM] |
| last.name@email.com | Fraud reported - no action taken | Successfully reported fraud | Phone call approval (Authentication phone) | 22-02-19 [01:28:29 AM] |

希望有人能指导我如何实现这一目标。

TIA!

首先,使用 Parse JSON 操作并加载您的 JSON 作为示例以生成架构。

然后用一个For each(相应地重命名)去遍历rows,这样就会自动为tables生成一个外For each

这是比较棘手的部分,您需要生成一个负载,其中包含您的数据和一些特定的密钥,然后您可以在存储中识别这些密钥 table。

这是我用你的数据测试的流程...

...这是存储资源管理器中的最终结果...

Insert Entity 操作中实体字段中的 JSON 如下所示...

{
  "Data": "@{items('For_Each_Row')}",
  "PartitionKey": "@{guid()}",
  "RowKey": "@{guid()}"
}

我只是使用 GUID 使其工作,但您可能希望从您的数据中提出某种键以使其更加合理。也许是日期字段之类的。

您可以使用 Parse_JSON 提取提供的输出的内部数据,然后可以在 for_each 循环中使用 Insert or Replace Entity 操作。这是我的逻辑应用程序的屏幕截图

在我的存储帐户中

更新的答案

我没有直接使用 Insert or Replace Entity,而是初始化了 2 个变量,然后使用了 Insert or Merge Entity。一个变量是在行内迭代,另一个是使用 until 循环在列内迭代并从表中获取所需的值。这是我的逻辑应用程序的屏幕截图。

在第一个 until 循环中,迭代一直持续到 rows 变量等于 no of rows。下面是表达式:

length(body('Parse_JSON')?['tables']?[0]?['rows'])

在第二个 until 循环中,迭代继续直到 columns 变量等于 no of columns。下面是表达式:

length(body('Parse_JSON')?['tables']?[0]?['rows'])

下面是我在 Insert or Merge Entity 的实体中使用的表达式

{
  "@{body('Parse_JSON')?['tables']?[0]?['columns']?[variables('columns')]?['name']}": "@{body('Parse_JSON')?['tables']?[0]?['rows']?[variables('rows')]?[variables('columns')]}"
}

结果: