如何将Docker容器部署的Azure Node.js函数STDOUT日志存入Azure Monitor Logs?
将Docker部署的Azure Node.js函数STDOUT日志导入Azure Monitor Logs的方案
方案一:利用Function App原生日志集成(最简便)
这是Azure官方推荐的零额外代码方案:
- 先确保Function App关联Application Insights资源:在Function App的配置→应用程序设置中,添加
APPINSIGHTS_INSTRUMENTATIONKEY,值填入对应Application Insights的密钥;若没有AI资源,直接在门户创建并关联即可。 - 开启容器控制台日志:进入Function App的配置→容器设置,找到日志记录区域,勾选控制台日志并设置保留天数,保存配置。
- 函数代码直接用
console.log()/console.error()输出日志到STDOUT/STDERR,这些日志会自动被Azure收集,最终同步到Azure Monitor Logs的traces表中。
方案二:自定义Docker镜像时配置Azure Monitor日志驱动
如果是自行构建Docker镜像,可直接在容器层面指定日志驱动:
- 在Docker运行命令中添加日志驱动参数:
docker run --log-driver=azuremonitor \ --log-opt instrumentation-key=<你的AI密钥> \ --log-opt log-level=info \ <你的镜像名称> - 也可在Dockerfile的ENTRYPOINT/CMD指令中嵌入上述参数。
- 需给Function App的系统分配身份赋予
Monitoring Metrics Publisher权限,确保容器能正常将日志发送到Azure Monitor。
方案三:用Azure Monitor Agent(AMA)自定义收集规则
如果需要日志过滤、字段提取等灵活需求,适合用AMA:
- 部署Azure Monitor Agent到Function App宿主环境(仅支持弹性高级计划、隔离计划的App Service)。
- 创建数据收集规则(DCR),指定日志收集路径(容器STDOUT日志默认存于
/home/LogFiles/Application/),并将数据转发到你的Log Analytics工作区。 - 配置完成后,日志会进入Log Analytics的
ContainerLog表,可通过Kusto查询语言自定义分析。
验证方法
配置完成后触发函数执行,在Azure Monitor Logs中执行以下查询验证:
// 验证原生集成的日志 traces | where message contains "你的测试日志关键词" | order by timestamp desc // 验证AMA或日志驱动的日志 ContainerLog | where LogEntry contains "你的测试日志关键词" | order by TimeGenerated desc
内容的提问来源于stack exchange,提问作者Vladyslav
相关产品推荐
相关产品推荐

