将 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')]}"
}
结果:
我开始学习 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')]}"
}
结果: