如何将Azure存储文件共享的.log日志导入Log Analytics工作区并转换格式?
从Azure存储文件共享导入/流式传输分隔符格式日志到Log Analytics工作区
方案一:直接使用Log Analytics自定义日志(文本格式)
Log Analytics自定义日志支持文本类型,并非必须JSON,你之前失败大概率是创建流程中选错了配置:
- 进入Log Analytics工作区 → 左侧菜单「日志」→ 点击「自定义日志」→ 上传你的.log示例文件(需包含至少2-3条完整日志行)
- 在「日志格式」选择界面,选**「分隔符分隔」**,指定分隔符为
| - 系统会自动解析出列,你可调整列名和数据类型(比如时间列设为datetime,数值列设为float,级别列设为string)
- 配置数据源:选择「Azure存储文件共享」,关联你的存储账户和目标文件共享,设置日志筛选规则(如
*.log),指定轮询频率 - 完成创建后等待15-30分钟,日志会流入自定义日志表(默认命名类似
CustomLog_CL,可自定义)
验证日志导入时,在查询界面运行:
CustomLog_CL | take 10
方案二:用Azure Function转换为JSON格式(若需JSON数据源)
如果场景要求必须用JSON格式,可通过Azure Function监听存储文件共享,将每条日志转为JSON后推送到Log Analytics:
- 创建Azure Function,选择「文件共享触发器」(或先将日志同步到Blob容器用Blob触发器)
- 在Function代码中读取日志行,按
|分割字段并转为JSON对象,示例C#代码片段:string line = "2024-04-09 12:09:56| 0.0| 0.0|INFORM|APP 2021.0.0.0 (Build 211111 - linux-x64)"; string[] parts = line.Split('|').Select(p => p.Trim()).ToArray(); var logObj = new { TimeStamp = DateTime.Parse(parts[0]), Value1 = float.Parse(parts[1]), Value2 = float.Parse(parts[2]), Level = parts[3], Message = parts[4] }; string jsonLog = JsonConvert.SerializeObject(logObj); - 给Function分配存储账户「存储文件数据读取者」权限,用Log Analytics数据收集API将JSON日志发送到工作区
方案三:使用数据收集规则(DCR)处理文本日志
通过Azure Monitor数据收集规则可更灵活处理文本日志:
- 进入Azure Monitor →「数据收集规则」→ 新建规则
- 选择数据源为「Azure存储文件共享」,关联存储账户和文件共享,指定日志筛选器
- 在「转换」步骤,用KQL脚本将文本转为结构化数据:
source | extend parts = split(LogMessage, '|') | extend TimeStamp = todatetime(trim(' ', parts[0])), Value1 = toreal(trim(' ', parts[1])), Value2 = toreal(trim(' ', parts[2])), Level = trim(' ', parts[3]), Message = trim(' ', parts[4]) | project TimeStamp, Value1, Value2, Level, Message - 将转换后的数据发送到Log Analytics的自定义表或现有表,关联DCR到存储数据源即可开始收集
内容的提问来源于stack exchange,提问作者sk1me
相关产品推荐
相关产品推荐

