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

如何获取Azure App Service中Jupyter Notebook内核连接日志

问题概述

我是Jupyter Notebook初学者,经初步判断当前问题属于Web应用部署范畴。

  • 核心问题:如何查看Jupyter Notebook的内核连接相关日志?
  • 核心故障:部署的Jupyter Notebook出现内核连接异常,需要获取对应日志定位故障根因;当前使用tornado 4.5.3版本,已排除tornado组件相关问题。
问题背景

我接手了同事遗留的老旧Jupyter Notebook项目,项目内的ML模型基于Python 2.7编写,原开发人员均已离职,无法完成Python 3版本适配。此前项目在Windows 7设备上运行正常,设备升级到Windows 10后系统Python版本从2升级为3,导致Jupyter Notebook无法运行。我在自己的Windows 10笔记本上配置Python 2.7环境成功调通该数据模型应用后,将应用容器化并部署到Azure平台,本地Docker容器运行验证正常,但在Azure站点上运行Notebook时出现内核连接失败问题,因此需要获取相关日志排查连接失败原因。
故障现象参考:
Jupyter内核连接失败截图

现有部署配置

Dockerfile配置

FROM python:2.7.18
LABEL name="model"

COPY ./requirements.txt /app/requirements.txt
WORKDIR /app

RUN apt-get update \
  && pip install --upgrade pip  \
  && pip install -r requirements.txt \
  && rm -rf /var/cache/apk/*

COPY "/" /app

CMD ["python", "-m", "notebook", "--port=80", "--ip=0.0.0.0", "--allow-root", "--no-browser", "--NotebookApp.token=''"]

依赖清单(requirements.txt)

attrs==21.4.0
backports-abc==0.5
backports.functools-lru-cache==1.6.4
backports.shutil-get-terminal-size==1.0.0
bleach==3.3.1
certifi==2021.10.8
colorama==0.4.5
configparser==4.0.2
contextlib2==0.6.0.post1
cycler==0.10.0
decorator==4.4.2
defusedxml==0.7.1
entrypoints==0.3
enum34==1.1.10
functools32==3.2.3.post2
futures==3.3.0
importlib-metadata==2.1.3
ipykernel==4.10.1
ipython==5.10.0
ipython-genutils==0.2.0
Jinja2==2.11.3
jsonschema==3.2.0
jupyter-client==5.3.5
jupyter-core==4.6.3
kiwisolver==1.1.0
MarkupSafe==1.1.1
matplotlib==2.2.5
mistune==0.8.4
nbconvert==5.6.1
nbformat==4.4.0
notebook==5.2.0
numpy==1.16.6
packaging==20.9
pandas==0.24.2
pandocfilters==1.5.0
pathlib2==2.3.7.post1
pickleshare==0.7.5
prompt-toolkit==1.0.18
Pygments==2.5.2
pyparsing==2.4.7
pyrsistent==0.16.1
python-dateutil==2.8.2
pytz==2022.1
pyzmq==19.0.2
scandir==1.10.0
scikit-learn==0.20.4
scipy==1.2.3
seaborn==0.9.1
simplegeneric==0.8.1
singledispatch==3.7.0
six==1.16.0
testpath==0.4.4
tornado==4.5.3
traitlets==4.3.3
treeinterpreter==0.2.3
typing==3.10.0.0
wcwidth==0.2.5
webencodings==0.5.1
win-unicode-console==0.5
zipp==1.2.0
解决方案(内核日志查看方法+排查方向)

日志获取方式

1. 开启Jupyter全局调试日志

修改容器启动命令,增加--debug参数并将标准输出、错误输出重定向到日志文件,方便在Azure侧拉取:

python -m notebook --port=80 --ip=0.0.0.0 --allow-root --no-browser --NotebookApp.token='' --debug > /app/jupyter_run.log 2>&1

所有内核启动流程、WebSocket连接请求、通信报错信息都会写入/app/jupyter_run.log,可通过Azure门户的容器日志功能或SSH进入容器直接查看该文件。

2. 查看单内核独立日志

Jupyter每个启动的内核都会生成独立日志,先执行命令查询运行时目录:

jupyter --runtime-dir

进入对应目录后,kernel-<内核ID>.log文件就是对应内核的独立运行日志,会记录内核启动失败、依赖缺失、ZeroMQ通信异常、权限不足等具体根因,同目录下的kernel-<内核ID>.json是内核连接配置文件。

3. Azure平台侧直接拉取日志

  • 若使用Azure App Service部署容器,直接在门户开启「应用服务日志」,平台会自动捕获容器所有stdout/stderr输出的Jupyter运行日志
  • 若使用Azure Container Instances部署,执行az container logs --name <容器实例名> --resource-group <资源组名>即可直接拉取容器运行日志

高概率故障排查点

结合本地运行正常、Azure侧连接失败的场景,优先排查以下问题:

  • WebSocket拦截问题:Jupyter前端和内核通过WebSocket长连接通信,若Azure前置网关、反向代理未开启WebSocket支持,拦截了Connection: Upgrade请求,会直接导致内核连接失败,这类问题会在日志中出现WebSocket连接返回400/404/503的报错
  • 权限问题:检查容器内Jupyter运行时目录、/app目录的读写权限,避免内核启动时无法生成连接配置文件
  • 端口映射问题:确认Azure侧80端口的TCP流量、WebSocket升级请求都正常转发到容器实例,没有做端口限制或协议拦截

内容的提问来源于stack exchange,提问作者PythonKiddieScripterX

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:57:11