以下内容来自 尚硅谷,写这一系列的文章,主要是为了方便后续自己的查看,不用带着个PDF找来找去的,太麻烦!
第 3 章 InfluxDB入门(借助Web UI)
借助Web UI,我们可以更好地理解InfluxDB的功能划分。接下来,我们就从Web UI入手,先了解InfluxDB的基本功能。
3.1 数据源相关
3.1.1 Load Data(加载数据)
如图所示,页面上左侧的向上箭头,对应着InfluxDB Web UI的Load Data(加载数据)页面。
3.1.1.1 上传数据文件
在Web UI上,你可以用文件的方式上传数据,前提是文件中的数据符合InfluxDB支持的类型,包括CSV、带Flux注释的CSV和InfluxDB行协议。
点击其中任意一个按钮,将进入数据的上传页面,页面中包含了详细的说明文档,包含你的数据应该符合什么格式,你要把数据放到哪个存储桶里,还包括用命令行来上传数据的命令模板。
3.1.1.2 写入InfluxDB的代码模板
InfluxDB提供了各种编程语言的连接库,你甚至可以在前端嵌入向InfluxDB写入数据的代码,因为InfluxDB向外提供了一套功能完整的REST API。
点击任何一个语言的LOGO,你会看到使用这门语言,将数据写入到InfluxDB的代码模板。建议从这里拷贝初始化客户端的代码
配置Telegraf的输入插件
Telegraf是一个插件化的数据采集组件,在这里你可以找一下没有对应你的目标数据源的插件,点击它的logo。可以看到这个插件配置的写法,但是关于这方面的内容,还是建议参考Telegraf的官方文档,那个更细更全一些。
3.1.2 管理存储桶
你可以将InfluxDB中的bucket理解为普通关系型数据库中的database。在Load data页面上,点击上访的BUCKETS选项卡,就可以进入bucket管理页面了。
3.1.2.1 创建Bucket
点击右上角的CREATE BUCKET按钮,会有一个创建存储桶的弹窗,这里你可以给bucket指定一个名称和数据的过期时间。比如,你设置过期时间为 6 小时,那InfluxDB就会自动把这个存储桶中距离当前时间超过 6 小时的数据删除。
3.1.2.2 调整Bucket的设置
存储桶的过期时间的名称都是可以修改的,点击任一Bucket信息卡的SETTINGS按钮会弹出一个调整设置的会话框。
重命名是 InfluxDB不建议的操作,因为大量的代码和InfluxDB定时任务都需要通过指定Bucket的名称来进行连接,贸然更改Bucket的名称可能导致这些程序无法正常工作。
3.1.2.3 设置Label
在每个Bucket信息卡的左下方都有一个 Add a label按钮,点击这个按钮,你可以为Bucket添加一个标签。不过这个功能一般很少用
3.1.2.4 向Bucket添加数据
每个存储桶信息卡的右边都有一个添加数据按钮,点击这个按钮可以快速导入一些数据。这里还可以创建一个抓取任务(被抓取的数据在格式上必须符合prometheus数据格式)
3.1.3 示例 1 :创建Bucket并从文件导入数据
3.1.3.1 创建Bucket
1、将鼠标悬停在左侧的按钮上,点击 Buckets,进入Bucketde的管理页面。
2、点击 CREATE BUCKET按钮,指定一个名称,这里我们将其设为example01,删除策略保留默认的NEVER,表示永远不会删除数据
3、点击CREATE按钮,可以看到我们的Buckets已经创建成功了。
3.1.3.2 进入上传数据引导页面
在Load Data页面,点击Line Prtocol进入InfluxDB行协议格式数据的上传引导页面。
3.1.3.3 录入数据
1、点击选择存储桶
2、选择ENTER MANUALLY,手动输入数据
3、将数据粘到输入框
4、在右侧指明时间精度,包括纳秒、微秒、毫秒和秒
数据如下:
people,name=tony age=12
people,name=xiaohong age=13
people,name=xiaobai age=14
people,name=xiaohei age=15
people,name=xiaohua age=12
当前我们写的数据格式叫做InfluxDB 行协议。最后点击WRITE DATA,将数据写到InfluxDB。如果出现Data Written Successfully,那么说明数据写入成功。
3.1.3.4 小结
InfluxDB是一个无模式的数据库,也就是除了在输入数据之前需要显示创建存储桶(数据库),你不需要手动创建 measurement或者指定各个field都是什么类型,你甚至可以前后在同一个measurement下插入filed不同的数据。
3.1.4 管理Telegraf数据源
点击Load Data页面的TELEGRAF选项卡,可以快速生成一些Telegraf配置文件。并向外暴露一个端口,允许telegraf远程使用InfluxDB中生成的配置。
3.1.4.1 什么是Telegraf
Telegraf是InfluxDB生态中的一个数据采集组件,它可以讲各种时序数据自动采集到InfluxDB。现在,Telegraf不仅仅是 InfluxDB的数据采集组件了,很多时序数据库都支持与Telegraf进行协作,不少类似的时序数据收集组件选择在Telegraf的基础上二次开发。
3.1.4.2 创建Telegraf配置文件
InfluxDB的Web UI 为我们提供了几种最常用的telegraf配置模板,包括监控主机指标、云原生容器状态指标,nginx和redis等。
通过页面,你可以勾选几种监控目标,然后一步步操作去创建一个 Telegraf的配置文出来。
3.1.4.3 管理Telegraf配置文件接口
完成Telegraf的配置后,页面上会多出一个关于telegraf实例的信息卡。
如图所示:点击蓝色的Setup Instructions。
会弹出一个对话框,引导你完成telegraf的配置。可以看到第三步的命令。
telegraf --config http://localhost:8086/api/v2/telegrafs/09dc7d49c444f
这个命令中有一个 URL,其实意思也就是 InluxDB向外提供了一个API,通过这个API你可以访问到刚才生成的配置文件。
3.1.4.4 修改Telegraf配置
已经生成的配置文件如何去修改呢?你可以点击卡片的标题。
这个时候,会弹出一个配置文件的编辑页面,不过这个时候没有交互式的选项了,你需要自己直接面对配置文件。
修改完配置文件后,记得点击右方的SAVE CHANGES保存修改。
3.1.5 示例 2 :使用Telegraf将数据收集到InfluxDB
在本示例中,我们会使用Telegraf这个工具将一台机器上的CPU使用情况转变成时序数据,写到我们的InfluxDB中。
3.1.5.1 下载Telegraf
可以使用下面的命令下载telegraf
wget 1.23.4_linux_amd64.tar.gzhttps://dl.influxdata.com/telegraf/releases/telegraf-1.23.4_linux_amd64.tar.gz
3.1.5.2 解压压缩包
将telegraf解压到目标路径。
tar -zxvf telegraf-1.23.4_linux_amd64.tar.gz -C /opt/module/
3.1.5.3 创建一个新的Bucket
回到Web UI界面
- 点击左侧工具栏中的Buckets按钮
- 点击右侧蓝色的CREATE BUCKET按钮
- 创建一个名为example02的buckets,因为是演示,所以这里将过期时间设为 1 小时。设置好后点击CREATE
- 如果出现相应的example02的卡片,说明存储桶已经创建成功。
3.1.5.4 在Web UI上创建telegraf配置文件
1、在左侧的工具栏上点击Telegraf按钮。
2、点击右侧蓝色的CREATE CONFIGURATION创建telegraf配置文件
3、在Bucket栏选择example02,表示让telegraf将抓取到的数据写到example02存储桶中,下面的选项卡勾选System。点击CONTINUE。
4、点击 CONTINUE按钮后,会进入一个配置插件的页面。你可以自己决定是否启用这些插件。这里需要给生成的Telegraf配置起一个名字,方便管理。
5、点击CREATE AND VERIFY按钮,这个时候其实Telegraf的配置就已经创建好了,你会进入一个Telegraf的配置引导界面,如图所示:
3.1.5.5 声明Telegraf环境变量
按照Web UI上的建议,首先,你要在部署 Telegraf的主机上声明一个环境变量叫 INFLUX_TOKEN,它是用来赋予Telegraf向 InfluxDB写数据权限的。这里我们就不配环境变量了,请在单一的shell会话下完成后面的操作。
所以到你下载好Telegraf的机器上,执行下面的命令。(注意!TOKEN是随机生成的,请按照自己的情况修改命令)
export INFLUX_TOKEN=v4TsUzZWtqgot18kt_adS1r-7PTsMIQkbnhEQ7oqLCP2TQ5Q-PcUP6RMyTHLy4IryP1_2rIamNarsNqDc_S_eA==
3.1.5.6 启动Telegraf
首先cd到我们解压的telegraf目录。
cd /opt/module/telegraf-1.23.4
telegraf的可执行文件在 ./usr/bin目录下。cd过去。
cd ./usr/bin
从 Web UI中复制运行 telegraf 的命令,修改 host然后执行,当前的 telegraf 和 InfluxDB 在同一台机器上,所以可以使用localhost。最终命令如下。
telegraf --config http://localhost:8086/api/v2/telegrafs/09dcf4afcfd90000telegraf
运行效果如下图所示。
3.1.5.7 验证数据采集结果
1、点击左侧 按钮进入Data Explorer页面。
2、在左下角第一个选项卡选择example02,表示要从 example02这个存储桶中查数据。
3、点击好第一个选项卡后,会自动弹出第二个选项卡,勾选cpu。
4、点击右上方的SUBMIT按钮。
5、如果出现折线图,说明我们成功地使用Telegraf把数据导进来了。
3.1.5.8 编写启停脚本
后面我们很多时候都要使用telegraf抓取的主机监控数据来进行查询演示。为了方便启停,我们编写一个shell脚本来管理telegraf任务。
1、首先cd到 当前用户家的bin 路径下,如果~路径下没有bin,就创建bin这个目录。通常 ~/bin 是PATH环境变量包含的一个目录。
cd ~
mkdir bin
cd ~/bin
2、到~/bin路径下创建一个文件 host_tel.sh
vim host_tel.sh
3、键入如下内容
4、最后给这个脚本加上一个执行权限,你可以执行下面的代码。
chmod 755 ./host_tel.sh
3.1.5.9 小结
最终需要注意,InfluxDB只是帮你管理了一下Telegraf的配置文件。InfluxDB并不能管理Telegraf的启停和运行状态。如何运行Telegraf还是需要开发者手动或者编写脚本来维护的。
3.1.6 管理抓取任务
3.1.6.1 什么是抓取任务
抓取任务就是你给定一个URL,InfluxDB每隔一段时间去访问这个链接,把访问到的数据入库。在InfluxDB 1.x的时候,类似的任务只能由Telegraf来实现。在InfluxDB 2.x中,内置了抓取功能(但是定制性上不如Telegraf,比如轮询间隔只能是 10 秒)
另外,目标 URL 暴露出来的数据格式必须得是Prometheus数据格式。关于Prometheus数据格式的详细介绍,大家可以参考附录3
3.1.6.2 InfluxDB自身暴露的监控接口
你可以访问http://localhost:8086/metrics 来查看InfluxDB暴露出来的性能数据。这里面有,InfluxDB的GC情况
以及各个API的使用情况,如图所示,说的是各个API被谁请求过多少次。
3.1.7 示例 3 :让InfluxDB主动拉取数据
3.1.7.1 创建一个存储桶
如图所示,我们创建了一个名为example03的存储桶。数据的过期时间设为 1 小时。
3.1.7.2 创建抓取任务
1、进入抓取任务的管理页面
2、点击CREATE SCRAPER按钮,创建抓取任务。
3、在对话框上,给抓取任务起一个名字,此处命名为example03_scraper
4、右方的下拉框上,选择我们刚才创建的存储桶,example03。
5、最下方设置一下目标路径,最后点击CREATE
6、如果页面上出现新的卡片,说明配置成功。接下来去看一下数据有没有进来。
3.1.7.3 验证抓取结果
1、点击左侧的按钮,打开Data Explorer
2、在左下角第一个卡片选择要从哪个存储桶抽取数据,本例对应的是example03
3、第一个卡片选择好后,会自动弹出第二个卡片,你可以选择任意一个指标名称。
4、点击右侧的SUBMIT按钮,提交查询。
5、如果折线图成功加载,说明有数据了,抓取成功!
3.1.7.4 补充
1、 InfluxDB的监控数据默认会被抓取到初始化的存储桶中抓取任务管理面板上,我们发现自己还没创建什么东西呢,就有一个抓取任务。
2、 这个抓取任务是InfluxDB自动为我们创建的,它会把我们刚才访问/metrics拿到的数据写到 test_init 这个存储桶中去,而test_init 这个存储桶是我们首次登录的时候为了初始化而创建的。所以大家要知道 test_init 中的一些监控数据是怎么产生的。
3、InfluxDB的抓取任务都是 10 秒一次,无法自定义设置
至少截至目前( 2 .4版本),用户无法去自定义抓取间隔。InfluxDB会每隔 10 秒一次去抓取数据,这一点需要注意。
3.1.8 管理API Token
点击左侧的API Tokens按钮,进入API Token的管理页面。
3.1.8.1 API Token是干什么用的
1、简单来说,influxdb会向外暴露一套HTTP API。我们后面要学的命令行工具什么的,其实都是封装的对 influxdb 的http请求。所以,在InfluxDB中,对权限的管理主要就体现在API的Tokens上。客户端会将token放到http的请求头上,influxdb 服务端就根据客户端发来的请求头部的token,来判断你能不能对某个存储桶读写,能不能删除存储桶,创建仪表盘等。
3.1.8.2 查看API Token权限
截至目前,我们还没有自己手动创建过API Token。但是可以看到页面上已经有一些Token了,这些Token是由我们之前示例里面的操作自动生成的。
3.1.8.3 了解tony’s Token
1、现在,我们围绕着InfluxDB中已有的Token来学习相关的知识,我们的InfluxDB上现在只有初始化时创建的tony账户,在Token列表中,我们可以看到有一个名为tony’s Token 的token。
2、 修改token的名称
- 点击token右边的 符号,可以修改token名称。
- 没有客户端会用token的名称来调用token,所以修改token名称不会影响已经部署的应用。
- InfluxDB从未要求token的名称必须全局唯一,所以名称重复也是可以的。如图:
3、 token可以临时关停、也可以删除正如你说看到,token卡片下面的Active按钮是一个开关,可以在启用和停用之间进行
切换。
同时,你也可以删除token,但是这可能对你已经部署的应用产生不可挽回的影响。
4、 查看Token权限点击token的名称,可以看到这个token具体有哪些权限。这里我们比较两个token,可以看到tony’ Token的权限很高。
5、下面这个Token是我们前面示例,生成Telegraf配置的时候自动生成的token。
6、点开看一下它的权限。可以看到这个token的权限就小得多了,它只能向一个存储桶里写数据,查的权限都没有。
3.1.8.4 创建API Token
1、页面的右方有一个 GENERATE API TOKEN。点一下会出来一个下拉菜单,这其实是Web UI上的权限模板
2、 在Web UI上,有两种类型的模板让你可以快速创建token。
-
Read/Write API Token 仅读写存储桶的Token,创建Token时还可以限定这个Token能操作哪些存储桶。
-
All Access API Token 生成带所有权限的Token
注意!InfluxDB的Token是可以进行更细的管理的,Web UI上给的只是生成Token的模板,准备了用户的常用需求,但不代表它的全部功能。
3.2 查询工具
1、如果继续后面内容的学习,最好先掌握附录 4 :时序数据库中的数据模型 中的知识。
3.2.1 前言
1、关于InfluxDB的查询,需要用户掌握一门叫FLUX的语言。本节暂时不讲解FLUX语言的知识,而是先了解InfluxDB重要的两个开发工具——Data Explorer和Notebook。
3.2.2 了解Data Explorer
3.2.2.1 什么是Data Explorer
1、explorer,探险家、探索者的意思。所以正如其字面意思,你可以使用Data Explorer探索数据,理解数据。说白了,就是你可以尝试性地写写FLUX查询语言(InfluxDB独创的一门独立查询语言,课程后面会讲解),看一下数据的效果。开发过程中,你可以将它作为一个FLUX语言的IDE。但是,目前我们不会向大家讲解FLUX语言。后面会这门语言起一个专门的章节。
3.2.2.2 认识Data Explorer的页面
1、点击左边的 图标,进入Data Explorer。
2、我们可以将Data Explorer的界面简单分为两个区域,上半部分为数据预览区,下半部分为查询编辑区。
3.2.2.3 查询编辑区
1、查询编辑区为你提供了两种查询工具,一个是查询构造器,一个是FLUX脚本编辑器。
- 查询构造器
你一进入Data Explorer页面,默认会打开查询构造器。使用查询构造器,你可以通过点按的方式完成查询。它背后的原理其实是根据你的设置,自动生成一条 FLUX语句,提交给数据库完成查询。能够出现查询构造器这种东西,说明时序数据的查询之间遵循着某种规律。不同业务之间的查询步骤可能高度相似。
如图,这是查询构造器的极简介绍。在后面的示例中,我们会详细讲解它的使用
- FLUX脚本编辑器
你可以手动将查询构造器切换为FLUX脚本编辑器(点击 script editor 按钮即可)。然后愉快地编写FLUX脚本,实现各种奇葩查询。编辑器十分友好,还带自动提示和函数文档。
3.2.2.4 数据预览区
1、数据预览区可以将你的数据展示出来。下图是一个效果图。
2、默认情况下,数据预览区会将你的数据展示为一个折线图。不过除此之外,你还可以让数据展示为散点图、饼图或者查看原始数据等等。
3.2.2.5 其他功能
1、除了查询和展示数据的功能外。Data Explorer还有一些拓展功能
-
将数据导出为CSV 在执行查询之后,DataExplorer允许你快速地将数据导出为一个CSV文件。
-
将当前查询和可视化效果保存为仪表盘的一个单元
你可以将当前的查询逻辑和图形展示保存为某个仪表盘的一部分。这个功能需要在查询逻辑已经实现的前提下,点击右上角的SAVE AS触达。
- 创建定时任务
Data Explorer中的查询逻辑可以保存为一个定时任务,也就是 TASK。这里提前说一下InfluxDB中的TASK是什么。TASK其实是一个定时执行的FLUX语言写的脚本。因为FLUX是一个脚本语言,所以它其实有一定的IO能力。可以使用http与外面的系统进行通信,还可以将计算完的数据回写给InfluxDB。所以通常TASK有两种使用场景。
( 1 )数据检查与报警。对查询后的结果进行一下条件判断,如果不合规,就使用http向外通知报警。
( 2 )聚合操作。在InfluxDB里开窗完成聚合计算,计算后的数据再写回到InfluxDB,这样下游 BI(数据看板)可以直接去查询聚合后的数据了,而不是每次都把数据从InfluxDB里拉出来重新计算。这样可以减少IO,不过会增加InfluxDB的压力。生产环境
下需要根据实际情况进行取舍。
- 定义全局变量
在DataExplorer里,你可以声明一些全局变量。全局变量的类型可以是Map(键值对)、CSV和FLUX脚本。这样,将来你可以直接引用这些变量,比如你的数据里有地区编码。你就可以将编码到地区名称的映射保存为一个全局Map,供以后每次查询时使用。
3.2.3 示例 4 :在Data Explorer使用查询构造器进行查询和可视化
3.2.3.1 打开Data Explorer
1、点击左侧的 按钮,进入Data Explorer页面。
3.2.3.2 设置查询条件
1、我们现在要查询的是 test_init 存储桶下的 go_goroutines 测量,这个测量反应的是我们InfluxDB进程中的goroutines(轻量级线程)数量。首先,在左下角的查询构造器的FROM选项卡,选择test_init存储桶。接着会弹出一个 Filter选项卡,默认情况下这里是选择_measurement,此处我们选择 go_goroutines。
3.2.3.3 注意查询时间范围
1、右上角有一个带时钟符号的下拉菜单,这个菜单可以帮你纵向选择要查询数据的时间范围,通常默认是 1 h。如下图所示:
3.2.3.4 注意右侧的窗口聚合选项
1、 在查询构造器的最右边,有一个开窗聚合选项卡。使用查询构造器进行查询,就必须使用开窗聚合。默认情况下,DataExplorer会根据你设置的查询时间范围,自动调整窗口大小,此处查询范围 1 h对应窗口大小 10 s。同时,聚合方式默认是平均值。
3.2.3.5 提交查询
1、点击右侧的SUBMIT按钮可以立刻提交查询。之后,数据展示区会出现相应的折线图。如下图所示:
2 、点击View Raw Data,可以看到原始数据。
3.2.3.6 查询原理
1、我们使用查询构造器进行查询,其实是 Web UI根据我们指定的查询条件生成了一套FLUX查询脚本。点击SCRIPT EDITOR按钮,可以看到查询构造器生成的FLUX脚本。
3.2.3.7 可视化原理
1、其实默认情况下的可视化,是依据返回数据中的_value来展示的,但是有些时候,你想查询的数据可能字段名不会被判别为_value。它会安静地躺在原始数据中。
3.2.4 了解Notebook
3.2.4.1 什么是Notebook
1、Notebook是InfluxDB2.x推出的功能,交互上模仿了Jupyter NoteBook。它可以用于开发、文档编写、运行代码和展示结果。
你可以将InfluxDB笔记本视为按照顺序处理数据的集合。每个步骤都由一个“单元格”表示。一个单元格可以执行查询、可视化、处理或将数据写入存储桶等操作。Notebook可以帮你完成下述操作
- 执行FLUX代码、可视化数据和添加注释性的片段
- 创建报警或者计划任务
- 对数据进行降采样或者清洗
- 生成要和团队分享的Runbooks
- 将数据回写到存储桶
2、Notebook和DataExplorer相比,主要是交互风格上的不同。DataExplorer倾向于一锤子买卖,而Notebook可以将数据展示拆分为一个又一个具体的步骤。另外,NoteBook可以用来开发告警任务DataExplorer则不能。
3.2.4.2 进入Notebook的导航界面
1、点击左侧的 按钮,即可进入Notebook的导航页面。
2、导航页面分两个部分:
- 上面是创建引导,除了创建一个空白的Notebook,InfluxDB还为你提供了 3 个模板。分别是Set an Alert(设置一个报警)、Schedule a Task (调度一个任务)、write a Flux Script(写一个Flux脚本)。
-下面是Notebook列表,过去你创建过的NoteBook再这里都会展示出来。卡片上还有这个 Notebook对应的创建时间和修改时间。通过卡片你可以对一个Notebook重命名,还可以将它复制和删除。
3.2.4.3 创建一个空白的notebook
1、想要继续后面的步骤,我们必须先创建一个Notebook。如下图所示,在页面上方点击New Notebook按钮即可。
2、现在,你看到的就是Notebook的操作页面了。
3.2.4.4 NoteBook工作流
1、目前你看到的页面应当是如下图所示的样子。
2、我们在页面中看到的一个又一个卡片,在NoteBook中叫做Cell。一个NoteBook工作流就是多个Cell按照先后顺序组合起来的执行流程。这些Cell中间随时可以插入别的Cell,而且Cell和Cell还可以调换顺序。按照Cell功能,Cell可以按照下面的方式分类。
- 数据源相关的Cell
- 查询构造器
- 直接编写FLUX脚本
- 可视化相关的Cell
- 将数据展示为一个Table
- 将数据展示为一张图
- 添加笔记。
- 行为Cell
- 进行报警
- 定时任务设定
3.2.4.5 工作流范式
1、在NoteBook里编写工作流通常是有套路可循的。
2、通常一个notebook工作流以查询数据开始,后面的Cell跟上把数据展示出来,当数据需要进一步修改的时候,可以再加一个FLUX脚本 cell,notebook为我们留了一个接口,通过这种方式,后面的Flux cell可以将前面的数据作为数据源进行查询。
3、最终,notebook工作流可以以任务设置或者报警操作作为整个工作流的终点,当然这不是强制要求。
3.2.4.6 NoteBook控件
1、在notebook上存在下述几种控件
- 时区转换
右上角有一个Local按钮,通过这个按钮,你可以选择将日期时间显示为系统所设时区还是UTC时间。
- 仅显示可视化
点击Presentation按钮,可以选择是否仅显示数据展示的cell。如果开启这个选项,那么查询构造器和FLUX脚本的Cell就会被折叠。
- 删除按钮
点击确定后,可以删除整个notebook。
- 复制按钮
右上角的复制按钮可以立刻为当前NoteBook创建一个副本。
- 运行按钮
RUN按钮可以快速地执行Notebook中的查询操作并重新渲染其中的可视化Cell。
3.2.5 示例 5 :使用NoteBook查询和可视化数据
3.2.5.1 使用查询构造器记性查询
1、默认情况下,你创建的空白NoteBook,自带 3 个cell。
2、第一个cell,默认是一个查询构造器,相对于DataExplorer来说,notebook的查询构造器不同的地方在于它没有开窗聚合操作。此处,同样还是查询test_init中的go_goroutines测量。
3.2.5.2 提交查询
1、点击RUN按钮。
2、可以看到下面的原始数据和折线图都出现了
3.2.5.3 添加说明cell
1、notebook允许用户在工作流中加入说明性的cell。我们选择在最前面加一个说明性cell。首先,点击左侧的紫色+号。
2、点击NOTE 按钮。可以看到,我们已经创建了一个说明 cell。这里面还支持 MarkDown语法
3、现在,我们随便写点东西
4、点击右上右上角的PREVIEW按钮,markdown就会被渲染展示。