Jupyter生态二次开发系列(四)

因为甲方的“数据科学家”经常执行一些危险代码或命令而不自知, 而lab本身又不记录用户的操作记录, 导致一些数据被删除了缺找不到人背锅, 所以我们必须给jupyter加上code和terminal执行的日志, 以防甲方甩锅. 也是不得已而为之. 

我们给甲方“数据科学家”用的jupyterlab是放在k8s pod里面的, 算是个云平台吧. 以后有时间再说说我们这个私有数据云的架构设计.现在在搞大老板定的企业内部数据应用, 没时间.

jupyterlab里面是嵌入了notebook, 实际notebook执行是在 jupyter_client, 而jupyterlab 使用jupyter_server将notebook code cell里面的代码push给zeromq队列去发给ipython执行, 然后jupyter_client消费zmq的队列执行结果, 再交给notebook回显. 总之是一个非常复杂的流程, 细说的话一句 import os 的执行流程一张A4画不完.

jupyter_client和notebook属于嵌入到jupyterlab里面的, 所以client和nb的log, 在lab和server里面是显示不出来的, 我没有细研究, 应该来说, C/S两边的tornado log对象是没有继承关系的.

那么要记录到lab的log里面, 就只能从lab和server入手, lab本身只是个框架, 并不执行代码, 而server是跟执行代码相关的, 所以修改server应该是最正确的选择.

那么, 找到server中代码执行的部分, 写入self.log.warn就可以了, 还是挺好找的, jupyter的notebook和terminal都是用websocket来执行的, 所以只需要找websocket相关的tornaod handler class就好了.

image.png

下面是terminal的执行日志

image.png


总之, 我们不防“数据科学家”执行愚蠢命令和代码, 我们防的是甲方甩锅.

猜你喜欢

转载自blog.51cto.com/slaytanic/2634231
今日推荐