You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure Log Analytics Workspace按文件解析Coldfusion日志

ACI部署ColdFusion 2021按日志文件维度拆分到Log Analytics的落地方案

前置修正:给stdout日志打来源标记

你当前直接用symlink把日志指向stdout的方式存在核心缺陷:软链转发的日志流不会携带任何来源文件的元信息,不同文件的日志完全混合后,Log Analytics侧没有任何依据判断日志来自哪个文件。
先替换容器启动脚本里的软链逻辑,改用带前缀标记的tail转发,示例脚本片段:

# 清空原有直接指向stdout的日志软链
rm -f /opt/coldfusion2021/logs/*.log /dev/stdout 2>/dev/null
# 遍历所有CF日志文件,转发时给每条日志头部加固定格式的来源标记
for log_path in /opt/coldfusion2021/logs/*.log /your/custom/log/path/*.log; do
  [ -f "$log_path" ] || continue
  log_name=$(basename "$log_path")
  # 给每条日志加[CF_LOG:文件名]前缀,转发到主进程stdout
  tail -F -n 0 "$log_path" | awk -v logname="$log_name" '{print "[CF_LOG:" logname "] " $0}' >> /proc/1/fd/1 &
done
# 后面接原有ColdFusion启动命令,例如:
/opt/coldfusion2021/cfusion/bin/coldfusion run

这里用tail -F可以自动跟踪CF滚动切割生成的新日志文件,不需要额外配置重载。如果需要上报容器启动前已经存在的历史日志,把-n 0改成-n +1即可。

确认ACI日志采集链路正常

  • 进入你的ACI容器组配置页,确认「监控」板块下已经正确关联目标Log Analytics工作区,日志驱动为azure-monitor
  • 配置生效后,容器stdout/stderr的输出会默认上报到Log Analytics,默认采集的表分两种:
    • 未开启Container Insights时,日志存在ContainerInstanceLog_CL表,日志内容字段为Message
    • 开启ContainerLogV2/Container Insights时,日志存在ContainerLogV2表,日志内容字段为LogMessage

Log Analytics侧按来源解析日志

日志正常上报后,用KQL查询提取标记位的文件名,即可实现按日志来源文件维度的筛选、统计。

针对ContainerInstanceLog_CL表的查询示例

ContainerInstanceLog_CL
// 替换成你自己的ACI容器组名称
| where ContainerGroup_s == "your-cf-aci-group-name"
// 解析前缀提取日志来源、真实日志内容
| parse Message with * "[CF_LOG:" LogSource "] " RawContent
// 过滤掉容器启动、系统层面的非CF业务日志
| where isnotempty(LogSource)
| project TimeGenerated, LogSource, RawContent, ContainerName_s, Computer
// 示例1:查application.log里的错误日志
// | where LogSource == "application.log" and (RawContent contains "ERROR" or RawContent contains "Exception")
// 示例2:按日志来源统计每小时的日志量
// | summarize HourlyLogCount = count() by bin(TimeGenerated, 1h), LogSource

针对ContainerLogV2表的查询示例

ContainerLogV2
| where ContainerGroup == "your-cf-aci-group-name"
| parse LogMessage with * "[CF_LOG:" LogSource "] " RawContent
| where isnotempty(LogSource)
| project TimeGenerated, LogSource, RawContent, ContainerName, Computer

可选优化:配置采集时自动解析

如果不想每次查询都手动写parse逻辑,可以给对应日志表配置数据收集转换规则:

  • 进入Log Analytics工作区的「表」管理页,找到你使用的日志表
  • 选择「创建数据转换」,在转换逻辑的KQL语句中加入上述parse提取LogSource的步骤
  • 保存规则后,新上报的日志会自动生成LogSource独立列,后续查询可以直接筛选、聚合该字段,不需要重复写解析逻辑。

注意:如果你的ColdFusion有自定义输出路径的日志,记得把对应路径加到启动脚本的遍历列表里,避免漏打标记。

内容的提问来源于stack exchange,提问作者Souvik Saha Choudhury

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 08:00:58