背景
IPython/Jupyter 很流行
Jupyter https://jupyter.org/ 的前身是 IPython Notebook, 而 IPython Notebook 的前身是 IPython. 如下可以看到起发展轨迹 https://en.wikipedia.org/wiki/Project_Jupyter :
IPython/Jupyter 非常流行, 从三个方面可以看到:
数据科学领域 Python 愈来愈流行已经是既定事实, 根据数据科学与机器学习社区 Kaggle 2018 年调查, 超过 92% 的人员会使用 Python, 而 IPython/Jupyter 也已经是不争的 Python 科学生态入口, 使用 Python 做数据分析的人都会选择 IPython/Jupyter 作为工具平台.
IPython/Jupyter Notebook 不只是 Python 独有, 作为开放平台, 已经支持超过 50 种语言, 例如 Go,Java 等.
各大云厂商都提供了对于 Notebook 的支持, SaaS 生态中也有许多 Notebook 的有用工具, 例如 GitHub,NBViewer https://nbviewer.jupyter.org/ 等.
日志服务对 IPython/Jupyter 支持
阿里云的日志服务 (log service) 是针对日志类数据的一站式服务, 无需开发就能快捷完成海量日志数据的采集, 消费, 投递以及查询分析等功能. 通过日志服务对 IPython/Jupyter 扩展的支持, 可以轻松地使用 Python 对海量数据进行深度加工(ETL), 交互式分析(通过 SQL,DataFrame), 机器学习与可视化等:
功能概述
支持环境
支持 Python2/3 下的:
- IPython Shell
- Jupyter Notebook (IPython Notebook)
- Jupyter Lab
安装
快速安装
- Jupyter Notebook:
- 1. pip install aliyun-log-python-sdk>=0.6.43 pandas odps ipywidgets -U
- IPython Shell/Jupyter Lab:
- 1. pip install aliyun-log-python-sdk>=0.6.43 pandas -U
virtualenv 下安装(举例)
- 2. virtualenv sls
- # Jupyter Notebook:
- 3. pip install aliyun-log-python-sdk>=0.6.43 pandas odps ipywidgets -U
- # IPython Shell/Jupyter Lab
- 3. pip install aliyun-log-python-sdk>=0.6.43 pandas -U
- 4. python -m ipykernel install --user --name=sls
更多安装问题可以参考
配置
加载 magic 命令
%load_ext aliyun.log.ext.jupyter_magic
配置参数如下:
%manage_log <服务入口> <秘钥 ID> <秘钥值> <日志项目名> <日志库名>
在 Jupyter Notebook 下, 也可以无参数传入, 通过 GUI 配置:
%manage_log
关于服务入口, 秘钥等, 可以进一步参考配置.
配置保存位置
将存储 AK,Endpoint,Project,Logstore 在~/.aliyunlogcli, 使用的块名是__jupyter_magic__
- [__jupyter_magic__]
- access-id=
- access-key=
- region-endpoint=
- project=
- logstore=
支持场景
1. 查询与统计
快速查询与统计(过去 15 分钟)
%log SLS 查询分析语句
关于查询, 扩展语法(SQL92 标准), 可以进一步参考查询与统计
一般查询域统计(配置时间)
第一行用 from_time ~ to_time 这样的格式操作.
注意: 两个 %
- %%log -1day ~ now
- * |
- select date_format(date_trunc('hour', __time__), '%H:%i') as dt,
- count(1)%100 as pv,
- round(sum(if(status < 400, 1, 0))*100.0/count(1), 1) AS ratio
- group by date_trunc('hour', __time__)
- order by dt limit 1000
Note: 如果只有查询的部分, 会自动拉取时间范围内所有日志(自动分页)
具体时间格式的支持, 可以参考这里.
2. 全量数据拉取
如果原始数据没有索引, 无法使用查询统计时, 或者不需要条件过滤时, 可以使用拉取命令.
- %fetch 2019-1-31 10:0:0+8:00 ~ 2019-1-31 10:00:10+8:00
- Note:
时间范围是服务器接受日志的时间, 不同于日志自身的时间.
拉取过程中, 取消的话, 已经拉取的数据会放到 log_df_part 中.
3. Dataframe 操作
查询返回值通过 log_df 进行操作. 是一个 Pandas 的标准 DataFrame
操作示例:
- %matplotlib inline
- import matplotlib.pyplot as plt
- plt.rcParams["figure.figsize"] = (12, 9)
- import seaborn as sns
- %log host: www.a?.mock* | select body_bytes_sent, host limit 100000
- log_df['body_bytes_sent'] = log_df['body_bytes_sent'].astype(int)
- sns.boxenplot(x='host', y='body_bytes_sent', data=log_df);
关于 DataFrame 操作, 可以参考 Pandas DataFrame.
4. Dataframe 可视化增强
Jupyter Notebook 下扩展了 DataFrame 的操作, 表格进行了分页, 也可以动态选择饼图, 柱状图, 线图, 点图等可视化.
相关链接
日志服务用户手册
日志服务 IPython/Jupyter Notebook 扩展
日志服务钉钉群:
来源: https://yq.aliyun.com/articles/689911