Azure Log Analytics自定义日志无数据:C#函数App上传成功未显示
排查Log Analytics自定义日志表数据未显示问题
核心配置遗漏检查
DCR字段映射规则缺失/不匹配:
登录Azure门户打开对应DCR,切换到「转换」标签,确认存在正确的KQL转换规则,将上传的JSON字段映射到自定义表的列。例如:source | extend ID = tostring(ID), Status = tostring(Status), ErrorMessage = tostring(ErrorMessage) | project ID, Status, ErrorMessage若未配置转换规则,或字段名(含大小写)与上传JSON不匹配,数据会被直接丢弃,即使返回204状态码。
数据流名称不匹配:
在DCR的「数据源」标签中,查看自定义数据源的「数据流名称」,确保代码中Upload方法的第二个参数与该名称完全一致(含大小写)。例如DCR中定义的是Custom-MyTable,代码中不能写成Custom-mytable。自定义表架构不匹配:
检查Log Analytics工作区中自定义表的列名、数据类型是否与上传的JSON字段完全匹配。比如自定义表的列是id(小写),但上传的是ID(大写),会导致映射失败。
代码层面修正
- 上传格式需为JSON数组:
Logs Ingestion API要求请求体必须是JSON数组,单个JSON对象无法被正确解析。修改代码中的数据格式:string sTest = "[{ \"ID\": \"ID0345P09B\", \"Status\": \"E\", \"ErrorMessage\": \"This is a sample error\" }]";
权限补充验证
- 添加Logs Ingestion Contributor角色:
函数App的托管身份需要在目标DCR上分配「Logs Ingestion Contributor」角色,仅「Log Analytics Contributor」不足以完成自定义日志的写入操作。
进一步排查手段
查看DCE错误日志:
在Azure门户打开对应数据收集端点(DCE),切换到「日志」标签,执行以下KQL查询排查上传错误:AzureDiagnostics | where ResourceType == "DATACOLLECTIONENDPOINTS" | where OperationName == "LogsIngestion" | where ResultType != "Success"可获取格式错误、权限不足等具体报错信息。
验证DCR关联关系:
确认DCR已正确关联到目标DCE,且目标表指向正确的自定义日志表(在DCR的「关联」标签中检查)。
内容的提问来源于stack exchange,提问作者Brn
相关产品推荐
相关产品推荐

