无需Azure Portal查看Azure Function执行日志的可行性问询
解决方案总览
完全可行,既支持类实时的日志流查看,也支持历史日志导出/查询,仅需要你所持有的service principal被分配目标Function应用对应的Monitoring Reader角色即可,无需Portal访问权限,符合安全管控要求。
操作步骤
1. 先使用service principal登录Azure CLI
执行以下命令完成身份认证:
az login --service-principal -u <Service Principal客户端ID> -p <Service Principal客户端密钥> --tenant <Azure租户ID>
登录成功后会输出订阅列表,确认目标订阅处于激活状态,否则执行az account set --subscription <目标订阅ID>切换订阅。
2. 类实时日志流查看(和Portal日志流效果一致)
执行以下命令即可获取近实时的应用执行日志,延迟通常在1-3秒:
az webapp log tail --name <Azure Functions应用名称> --resource-group <应用所属资源组名称>
可选扩展参数:
- 仅筛选指定级别日志:追加
--level error warning,支持的级别包括verbose、information、warning、error - 同时保存日志到本地文件:追加
--file ./func_logs.txt
3. 非实时历史日志获取
方式1:直接导出全量日志包(无需依赖其他服务)
执行命令直接下载最近所有应用日志的压缩包,解压后即可查看主机日志、函数执行日志、请求日志等所有历史记录:
az webapp log download --name <Azure Functions应用名称> --resource-group <应用所属资源组名称> --log-file ./func_history_logs.zip
方式2:Application Insights日志查询(若应用绑定了App Insights,支持灵活筛选)
可直接通过CLI执行KQL查询自定义维度的日志,例如查询最近24小时内所有错误级别的日志:
az monitor app-insights query --app <绑定的Application Insights资源名称> --resource-group <资源组名称> --analytics-query 'traces | where severityLevel >= 2 | where timestamp > ago(24h) | project timestamp, message, operation_Name, customDimensions' --offset 24h
常见问题说明
- 若执行日志相关命令提示权限不足,联系客户管理员为你的service principal在目标Function应用/所属资源组范围分配
Monitoring Reader角色即可,该角色仅具备监控数据读取权限,无资源编辑权限,符合安全要求。 - 若
az webapp log tail无日志输出,可确认应用是否开启了文件系统日志记录,如需开启可执行az webapp log config --name <Function应用名称> --resource-group <资源组名称> --application-logging filesystem --level information,该操作需要Web Contributor权限,若客户不允许修改配置,可直接使用日志导出或App Insights查询方式获取日志。
内容的提问来源于stack exchange,提问作者MrMuppet
相关产品推荐
相关产品推荐

