如何通过订阅Event Hub通知将Azure Diagnostics事件列表摄入Azure Data Explorer并解析
解析Event Hub中的Function App列表日志并摄入Azure Data Explorer
完全可以通过ingestion mapping实现这类列表型日志的解析与摄入,以下是具体操作步骤:
1. 准备ADX目标表
先创建与Function App日志结构匹配的结构化表,示例命令如下:
.create table FunctionAppLogs ( Time: datetime, Level: string, Message: string, FunctionName: string )
2. 用Ingestion Mapping解析列表日志
针对Event Hub中以数组形式传递的日志,有两种高效处理方式:
方式一:直接通过JSON映射展开数组
如果每条Event Hub消息是包含多条日志的JSON数组(比如[{"time": "...", ...}, {...}]),可以创建JSON ingestion mapping,利用jsonpath的通配符遍历数组元素,ADX会自动将数组展开为单行记录:
.create table FunctionAppLogs ingestion json mapping "FunctionAppLogsMapping" '[' ' { "column": "Time", "path": "$[*].time", "datatype": "datetime" },' ' { "column": "Level", "path": "$[*].level", "datatype": "string" },' ' { "column": "Message", "path": "$[*].message", "datatype": "string" },' ' { "column": "FunctionName", "path": "$[*].functionName", "datatype": "string" }' ']'
这里的$[*]表示遍历数组内所有元素,每条元素会被解析为表中一行数据。
方式二:先存原始数据再通过更新策略展开
若需要对日志做额外清洗处理,可先将原始JSON数组摄入临时表,再通过更新策略自动展开结构化数据:
- 创建临时存储表:
.create table RawFunctionAppLogs (RawData: dynamic)
- 创建映射摄入原始JSON:
.create table RawFunctionAppLogs ingestion json mapping "RawLogsMapping" '[' ' { "column": "RawData", "path": "$", "datatype": "dynamic" }' ']'
- 配置更新策略,将临时表数据展开到目标表:
.alter table FunctionAppLogs policy update @'[{"Source": "RawFunctionAppLogs", "Query": "RawFunctionAppLogs | mv-expand RawData | project Time = todatetime(RawData.time), Level = tostring(RawData.level), Message = tostring(RawData.message), FunctionName = tostring(RawData.functionName)", "IsEnabled": true}]'
3. 关联映射到Event Hub数据连接
在ADX的Event Hub数据连接配置中,指定对应的ingestion mapping(方式一),或直接选择摄入原始JSON数据(方式二),并确保数据格式设置为JSON。
4. 验证摄入结果
运行以下查询确认数据是否正确解析:
FunctionAppLogs | take 10
内容的提问来源于stack exchange,提问作者Rajesh Patel
相关产品推荐
相关产品推荐

