5-《Elastic Stack应用宝典》第九章~第十一章 Kibana
第9章 Kibana文档发现
如果希望中文版的Kibana,操作如下:
1.编辑kibana.yml末尾找到#i18n.locale:"en",去掉注释并改为#i18n.locale:"zn-CN"
2.重启kibana
备注:Kibana中文本地化界面做的并不完美,好多地方如按钮和链接还保留了英文。
Kibana的版本会不断修正优化,所以实际界面可能与此描述不一致,但大致功能基本一致。
文档发现(Discover)提供了交互式检索文档的接口,用户可以在这里提交查询条件、设置过滤器并查看检索结果。
在文档发现中的查询条件还可以保存起来,这些保存起来的查询条件称为查询对象,可以在文档可视化和仪表盘中使用,也可以CSV或链接的形式分享出来
9.1 索引模式
在使用文档发现检索文档之前,需要首先告诉Kibana要检索ES的哪些索引,这在Kibana中是通过定义索引模式实现的,没有被索引模式包含的索引不能再文档发现、文档可视化、仪表盘中使用。
9.1.1 创建索引模式
索引模式是一种对ES中索引的匹配模式,用来定义哪些索引将被包含到这个模式中。以索引名称为基础,可以匹配单个索引,也可使用 * 匹配多个索引。如filebeat-*匹配所有以filebeat-开头的索引。
索引模式的管理功能位于Management菜单中,如下图

单击Index Patterns进入索引管理界面,界面分为左右两侧,左侧列出所有索引模式,右侧显示某一索引模式的详细信息,在索引模式的右上角有三个按钮
,分别表示:设置默认索引模式、刷新字段列表、删除索引模式。
当设置某个索引模式为默认时,它将在文档发现中称为默认索引模式。
要创建索引模式,则单击左上角的Create index pattern按钮,进入创建界面,如下
创建索引模式分为两步:
第一步:在"Define index pattern"输入框中给出索引模式的名称的,可以直接使用索引名,也可使用 *,在输入时Kibana会动态的将模式匹配的所有索引列出来,可实时查看是否满足要求,并单击Next Step,如下图

第二步: 设置索引模式的一些配置信息,如添加时间过滤器和为索引模式指定ID
如果模式匹配的索引中包含时间类型字段,这里将会包含一个设置时间过滤器的选项,用户可以选择使用哪一个字段作为过滤条件,否则页面提示不包含时间类型的字段而不会有时间过滤器选项。
在时间过滤器下,点击Show advanced optinos,打开设置索引模式ID的输入框,可自定义索引模式ID(默认Kibana会给索引模式自动生成一个ID)。
第三部:单击Create Index pattern,索引模式将被创建,并跳转会索引模式管理界面。
在数据发现界面就可以选择这些索引模式了,如下图
如果将某个索引模式设为默认,则在选择索引模式的下拉列表中它将成为第一项和默认值。
9.1.2 管理模式字段
在索引模式管理页面选择某个索引模式后,右侧页面会列出索引模式的字段信息,包括字段名称、类型、是否可检索等。最后面还有一个修改按钮,可修改字段值的格式信息,如下图

上图中,在字段管理界面中还包括脚本字段(Scripted fields)、源过滤器(Source filters)两个标签页
脚本字段:通过脚本在运行时动态添加到索引模式中的字段,脚本字段并不是真实存在于索引中,而是根据其他字段值运算而来
例如Kibana提供的样例模式kibana_sample_data_flights就包含一个脚本字段

源过滤器:用于从源文档中过滤字段,被过滤的字段将不会在文档发现和仪表盘中展示,可以使用字段名称精确匹配字段,也可以使用星号匹配多个字段
例如下图,AvgTicketPrice精确匹配字段AvgTicketPrice,而Flight*匹配以Flight开头的字段

9.2 时间范围与过滤器
文档发现就是检索出满足条件的文档,Kibana提供了多种方式设置检索条件。包括
- 通过时间范围过滤文档
- 通过过滤器过滤文档
- 通过Lucene查询过滤文档
- 通过KQL查询语言过滤文档
无论使用哪种方式过滤文档,最终都会以DSL查询的形式传递给底层的Elasticsearch。其中时间范围和过滤器这两种方式,它们最终会以must子句的形式组合进bool查询。
如果想要查看Kibana最终生成的请求,可单击工具栏中的Inspect按钮,在弹出窗口中选择 Request标签页查看,如图9-9(Inspect功能)

9.2.1 数据发现界面结构
介绍数据发现功能前,先熟悉下数据发现界面的整体结构,如下图9-10(界面结构)

1. 工具栏:位于界面最上面靠左侧,包含了特定功能的按钮,如New、Save、Open等,用于实现对文档发现的创建、保存等基础管理功能。
2. 查询栏:位于工具栏下面,包含一个Filters按钮(v 7.4.2没有这个按钮),按钮右侧是一个输入框可键入查询条件检索文档,用于接收Elasticsearch查询语言DSL,或者Kibana内置查询语言KQL。
3. 过滤器栏:位于查询栏下面,单击过滤器栏上面Filters按钮可以开启或关闭过滤器栏,在没有定义过滤器时该栏只有一个Add filter链接,添加了过滤器后会有相应的过滤器定义展示出来,且在Filters按钮上也会展示过滤器的数量。
4. 时间栏:位于查询栏右侧,可以设置检索文档的时间范围、检索文档的刷新频率。
查询栏、过滤器栏和时间栏的主要作用都是精确地限定检索文档的范围。
过滤器栏往下可以分为左右两栏
左侧包含
5. 索引模式栏:列出了索引模式
6. 字段栏:列出了已选择字段和可选择字段
右侧包含
7. 柱状图栏:显示满足过滤条件文档的柱状图
8. 文档栏:展示满足条件的文档数据
如果有时发现文档不存在,这时可能需要更新文档的时间范围和刷新频率。
9.2.2 使用时间过滤文档
9.1.1节介绍过,如果索引包含时间类型的字段,则在创建索引模式的第二步中可以为索引模式添加时间过滤器。如果在创建索引模式时添加了时间过滤器,在文档发现中就会看到设置时间过滤器的按钮。通常这个过滤器的默认值为"Last 15 minutes",位于文档发现界面的时间栏上。时间栏上有一个日历图形的按钮,单击会弹出选择时间范围的界面。时间范围可以设置为相对时间范围,例如最近24小时、前两周、前两个月等;也可以是绝对时间范围,例如从2019-4-1至2019-5-10, 如图9-11(选择时间范围)

导入样例数据一段时间后,再访问数据发现页面时会发现一些文档数据不见了。这一般就是由于时间过滤器的默认范围是最近15min,而这个时间范围内已经没有数据了。可以先将时间范围设置大一些(比如最近 1 年)看看是否存在数据,然后再逐渐缩小时间范围。选择时间范围还有一个方法可以使用,这就是在文档返回结果的柱状图中选择,具体请参考9.4节。
在图9-11中,弹出时间范围窗口的最下面还可以设置刷新频率。可以按秒、分、小时为单位,输入页面刷新的时间间隔。设置好后单击后面的Start按钮,页面就会按设置好的时间间隔自动刷新数据。
9.2.3 自定义过滤器
通过时间范围过滤文档只能通过在创建索引模式时指定的时间字段过滤文档,如果想通过其他字段对文档做过滤就必须要借助过滤器。
为文档发现添加过滤器可通过过滤器栏的Add filter按钮完成,单击这个按钮会弹出EIDT FILTERS对话框,如图 9-12(自定义过滤器)

在EDIT FILTER对话框中,可通过Field下拉列表选择字段,然后通过Operator和Value下拉列表选择操作符和具体值。
例如设置一个根据平均票价介于600到900之间的条过滤航班文档,首先要在Filed下拉列表中选择AvgTicketPrice字段,然后在Operator下拉列表中选择"is between",最后在弹出的From和To输入框中输入600和900,单击Save按钮就完成了过滤器的设置。如图 9-13(添加过滤器)

新创建出来的过滤器会出现在过滤器栏上,如果需要组合多个字段过滤文档,可以多次单击Add filter创建多个过滤器。由于过滤器设置的查询条件最终会被放置在bool组合查询的must子句中,所以多个过滤器之间的逻辑关系是与。点击这些出现在过滤器栏上的过滤器时会弹出一个对话框,包括对过滤器编辑、删除、启用以及逆向过滤等功能。如图 9-14(过滤器编辑)

过滤器还可以在文档栏中通过展示的文档字段自动生成,具体请参考 9.4 节。
补充参考:
Elastic 中国社区官方博客发表的Kibana:几种创建 filter 的方法
9.3 使用查询语言
时间范围和过滤器设置的查询条件都是以逻辑与的形式组合在一起,如果需要设置更复杂的查询条件就需要在查询栏中输入查询条件。目前Kibana支持Lucene和KQL(Kibana Query Language)两种查询语言
Lucene:可以认为就是Elasticsearch中的DSL
KQL:是Kibana提供的一种新查询语言。KQL在版本7之前叫kuery,但新版本中已经统一被称为KQL。使用KQL会附带提示和自动完成功能,对用户来说更友好。在Kibana版本6中默认查询语言是Lucene,版本7默认查询语言是KQL。
9.3.1 修改查询语言
文档发现使用的查询语言可以通过查询栏结尾处的KQL链接修改。单击KQL链接会弹出一个小窗口,其中包含"Kibana Query Language"开关。当这个开关处于开启状态时,使用的是KQL语法,反之使用的是Lucene。当关闭这个开关后,查询栏后面的KQL链接也会变为 Lucene,如图9-15(修改查询语言)

文档发现默认查询语言还可以在Kibana的管理界面中修改,如图9-16(修改默认查询语言)。进入管理界面找到Advanced Settings链接并单击进入到设置界面,可以找到"Query language"这一项。在下拉列表中选择Lucene后,单击Save或Cancel。这个设置修改后需要重新启动Kibana。

请保证査询栏选择的查询语言与输入的查询条件语法一致。比如输入的査询条件使用了JSON格式的DSL,那么查询语言就必须是Lucene。
9.3.2 使用Lucene语言
Lucene语言实际使用的是Elasticsearch的DSL,它的语法已经在本书第 5~6章做了详细介绍。在查询栏输入DSL时,可使用查询字符串形式,也可使用基于JSON格式的DSL。在实际应用中,因为JSON有一定的格式要求,在査询栏中正确输入并不方便,所以查询字符串使用得更多一些。
使用查询字符串的示例:
1.选择"kibana_sample_data_fights"索引模式
2.在查询栏输入Destcountry:CN AND Origincountry:CN,查询出发地和目的地都是中国的航班信息。
3.在查询栏中输入搜索条件后直接按Enter键,或单击查询栏后面的Refresh按钮,Kibana会向Elasticsearch提交查询请求。
同样的查询请求,如果使用基于JSON格式的请求,则查询条件为

本书第5~6章DSL查询请求示例的query参数内容,基本都可以直接复制到查询栏中使用。用户可以先在Kibana开发工具中调试好查询请求,再将它们复制到数据发现的询栏中使用。
查询字符串和基于JSON的DSL这两种方式最终生成的请求也是有区别的:
如果使用查询字符串,查询条件最终会以query_string的形式出现在bool组合查询的must句中,所以只要满足query_string询语法要求即可。例如,如果输入Lucene查询条件Destcountry:CN AND Origincountry:CN,最终请求如下图

如果使用JSON格式录入DSL查询语句,则查询语句会原封不动地添加到bool组合查询的must子句中。
9.3.3 使用KQL语言
KQL优点:
1.使用方便
2.执行速度快
3.语法简单
1.使用方便
KQL支持自动完成功能,用户只要输入第一个字母其余内容几乎都可以从提示的列表中选择完成,这大大降低了学习成本。
例如同样是查询出发地和目的地都是中国的航班记录,在使用KQL语言使用只要键入字母"D",其余内容都可在后续不断变化的提示中选择,如下图

2.执行速度快
KQL查询条件会被添加到最终请求的bool组合查询的filter子句中。由于filter子句不会计算相关度评分,并且Elasticsearch还会缓存常用的filter子句,所以使用KQL语言执行速度会比Lucene更快。
3.语法简单
KQL在6.0版时基于一些预定义的函数,例如is、and、or等。但从6.3版开始为降低学习成本,这些函数都从KQL中删除了,语法上与DSL的查询字符串非常接近。KQL主要是根据字段查询包含某些词项的文档,所以最简单的语法形式是"<字段名>:<值>"。例如査询出发地和目的地都是中国的航班记录,直接输入"DestCountry:CN AND OriginCountry:CN"即可,这与DSL中的査询字符串语法完全样。如果给字段值加上引号以短语查询的形式做匹配,这时不仅要关心词项是否出现,还要查看它们在文档索引中的词序。
KQL和Lucene(DSL、查询字符串)的区别:
1.KQL要求多个查询条件之间必须使用逻辑操作符连接,如果没有使用and、or或not则会报错。
例如使用Lucene语言时查询条件"Destcountry:CN OriginCountry:CN"是正确的,但如果换成KQL语言则会报错。
2.逻辑操作符在KQL中是大小写不敏感的,而在Lucene或DSL中则必须大写。
例如 Destcountry:CN and OriginCountry:CN"在KQL中是两个条件做逻辑与运算,而使用Lucene或DSL时则是三个条件,中间的and会被认为是一个查询条件而与所有字段做匹配。
3.在KQL中and的优先级比or要高,要改变这种默认的优先级可以使用括号,而在Lucene或DSL中逻辑操作符之间没有任何优先级规则,逻辑运算之间的结合规则必须使用括号明确定义。
4.KQL查询值范围时不能使用AvgTicketPrice: [100 TO 900]的形式(查询字符串可以),但可以直接使用">、<、="等运算符号。
例如,使用Lucene查询票价在600~900之间的航班需要使用AvgTicketPrice: [600 TO 900],而使用KQL则需要使用AvgTicket Price >=600 and AvgTicketPrice <=900。
查询字符串其实也支持使用大于号小于号,但必须要在字段名称后面加冒号,即AvgTicketprice:>=600 AND AvgTicketprice:<=900
5.KQL可以使用的通配符只有星号而不能使用问号,星号可以用在值中做匹配,也可用在字段名称中做匹配。
例如, Destcountry: C*匹配所有国家简称以C开头的Destcountry字段。
6.KQL不支持正则表达式,在查询字符串中使用的模糊查询符号 ~、提升权重符号 ^ ,也是不能使用的。
KQL查询示例
1.查询header中包含response的。语句:header :'*response*'
9.3.4 查询对象
文档发现中使用的查询条件可以保存起来,被称为查询对象。查询对象可以在文档发现中再次打开使用或编辑,也可以在文档可视化和仪表盘功能中使用。
示例步骤:创建一个查询对象,要求检索出最近一年"Kibana Airline"所有的航班信息
1. 首先单击工具栏中的New,这会清空所有查询语句和过滤条件,开始创建新文档发现。
2. 在索引模式中选择kibana_sample_data_flights,并在时间栏中选择"This year",筛选今年的航班数据。
3. 最后在查询栏中输入Carrier: "Kibana Airlines"
至此检索的创建就完成了。单击Update或直接敲击Enter键,检索结果如下图

4. 单击工具栏中的Save,在弹出窗口中修改文档发现名称为[study] Search-Kibana Airline,并单击Confirm Save,刚才创建的检索就保存起来了。
在名称中加入[study]前缀,主要是为了方便后续从Kibana查询对象列表中检索。Kibana会从保存对象的名称中提取词项,所以只要键入名称中的关键字就可以检索到查询对象。已经保存的查询对象,如果再次单击Save时会在弹出对话框中多出一个"Save as a new search"开关,将这个开关开启会保存成新的查询对象,相当于文本编辑器中的"另存为"。

查询对象可以在管理功能中查找和修改,打开管理功能界面在Kbiana大类下找到Saved Obiects链接。Saved Obiects是所有在Kibana中可以保存的对象,包括索引模式(index-pattern)、文档发现(search)、文档可视化(visualization)和仪表盘(dashboard)。单击Saved Obiects链接,在这个页面中包含了对Saved Objects的查看、删除、导入和导出等功能,如下图。单击Type打开类型筛选列表,选择search类型就可以看文档检索对象。点击刚刚创建的 [study] Search-Kibana Airline链接,可以查看或编辑查询对象的容。

在文档发现界面也可以打开保存过的查询对象,单击工具栏中的Open按钮,在弹出的界面上就会看到刚刚保存的检索对象。在查询栏中输入study可以将前面保存的查询对象筛选出来,单击查询对象的名称可以在文档发现中打开它,而单击Manage searches则可以打开 上图中的Saved Objects管理界面。

后续介绍的可视化对象、仪表盘等,它们的保存、打开等都与此类似,并且保存后都可以在管理功能中找到。
9.4 文档展示与字段过滤
通过时间范围、过滤器和查询语言检索的文档最终会以柱状图和表格两种形式展示,但只有表格可以通过CSV或链接形式分享,柱状图更多地是为了方便在界面中选取文档。在第11章仪表盘的介绍中,添加到仪表盘中的查询对象也只有表格。
9.4.1 柱状图
打开之前保存的查询对象[study] Search-Kibana Airline,文档发现会根据保存的查询条件刷新页面。根据查询条件生成的柱状图会以时间为X轴,而以文档数量为Y轴。当鼠标指针悬停于单个柱子上时,还会弹出当前柱子代表数据的具体说明,包括时间范围、文档数量等。在默认情況下,柱状图中各个柱子之间的时间间隔会根据时间范围自动匹配。在柱状图栏右上侧也提供了一个下拉列表修改时间间隔,如下图

还可以在柱状图上通过鼠标划选的方式选择文档发现的时间范围,这对于通过柱状图精细查看某一时间段数据来说常方便。
使用方法:鼠标指针悬停于柱状图上时,指针会变为十字星状。按下鼠标左键选择一个范围做拖拽,会弹出提示框,并显示满足条件的文档数量和时间范围。选择到合适的时间范围后放开鼠标,Kibana会根据划定的范围自动将时间范围设置好。
9.4.2 文档展示
默认情况下文档栏只包含两列,Time和_source列。
- Time列仅在索引模式设置了时间过滤器时才会有,它会展示时间过滤器中指定的时间字段值。
- _source列显示源文档,也就是在使用DSL查询时返回的_source字段值。
文档栏展示哪些列可通过左侧的字段栏来定制,分为“Selected fields”和“Available fields”两个区域。
- Selected fields区域列出了将在文档展示栏展示的所有字段,默认情況下只有一个_source字段;
- Available fields区域则列出了文档所有可以展示的字段。Available fields区域列出的字段受到索引模式的源文档过滤器影响,具体请参考第9.1节。
当鼠标悬停在Available fields列表中的字段上时,字段后面将会出现add按钮。单击这个按钮,字段就会被添加到Selected fields列表中,同时文档展示栏中展示的字段也会随之変化。一旦明确指定了需要展示的字段,_source字段就不会再出现在文档展示栏中。
当鼠标指针悬停在Selected fields字段上时,字段后面将会出现remove按钮。单击这个按钮,字段将从Selected fields列表中删除并出现在Available fields列表中,而文档展示栏中也不会再展示这个字段的内容。
在Available fields右侧还有一个设置按钮,用于设置过滤可用字段的条件。点击该按钮会看到五个可设置的过滤条件,如下图

这些过滤条件的具体含义如下
- Aggregatable:字段是否可参与聚集运算,可选值为any、yes和no,默认值为any
- Searchable:字段是否可检索,可选值为any、yes和no,默认值为any
- Type:字段数据类型,可选值为所有文档字段类型,默认值为any
- Field name:字段名称,大小写敏感
- Hide missing fields:隐藏无值字段
最后还有一个Reset filters按钮,可以重置整个过滤设置。点击感兴趣的字段将它们添加到文档栏中,并单击Save按钮保存所做的选择,这将在第11章中的仪表盘中使用。
9.4.3 添加过滤器
除了可以通过add和remove按钮设置展示字段外,单击任何字段都会列出字段中出现的热门词项。这些词项是根据它们词频的排名,取前五位而形成的词项列表。
例如单击Destcountry字段会列出五个词项IT、US、CA、CN和JP,在每个词项下面还有它们出现的百分比,这代表了航班的五大热门目的地国家。如下图

热门词项后面有一对类似于放大和缩小的图标,它们用于根据词项过滤文档。
本书将称类似放大图标的按钮为包含按钮,而称类似缩小图标的按钮为排除按钮。这两个按钮在数据发现界面上的其他地方也会出现,作用是包含或排除词项值。
单击包含按钮会将当前字段包含该词项的文档过滤出来,而点击排除按钮则会将当前字段不包含该词项的文档过滤出来。单击这两个按钮会形成不同的过滤器,它们会自动出现在过滤器栏中。例如,选择 Destcountry是CN,而Cancelled为false的所有文档,会形成两个过滤器如下图

再来看文档栏,在每条文档前还有一个展开收起开关,点击展开文档,可以看到所有字段以及它们的值,还有对字段的操作等。当鼠标指针悬停在每条文档的字段值上时,同样会出现包含按钮和排除按钮,它们也可以用于根据字段与词项生成过滤器,如下图

另外两个按钮:
按钮的作用是本从文档栏的列表中添加或刪除字段的开关,而
按钮则会添加个字段存在性的过滤器。
9.4.4 分享
文档发现中保存的查询对象可通过两种方式使用起来
- 一种是在后续章节中介绍的可视化对象和仪表盘中使用
- 一种就是直接在文档发现中以CSV或链接的形式分享出来
在文档发现的工具栏中有一个Share按钮,单击这个按钮会弹出两个选项,如下图

CSV是Comma-separated Values的简写,是一种以逗号分隔字段数值的文件格式。单击 CSV Report,并在弹出对话框中选择Generate CSV,如下图

Kibana会将生成CSV加入任务队列,可以在管理功能中找到这些创建任务。在管理功能的Kibana选项下单击Reporting链接,就会看到所有处理任务。除了列出了每个任务详细信息以外,在每个任务后面还有一个下载按钮可用于下载CSV文件,如下图

另一种分享方式是通过链接的形式,选择Permalinks选项后会弹出选择链接种类的对话框,包括Snapshot和Saved objectp两种。如下图

- Snapshot分享会将查询条件编入地址,所以对查询对象的修改不会在分享链接中体现
- Saved object分享的是实际保存的查询对象,所以任何对查询对象的修改都会在分享链接中体现
9.5 本章小结
本章主要介绍了Kibana索引模式管理与文档发现功能。
索引模式是Kibanal中读取索引数据的基本单元,只有与索引模式关联起来的索引才能在Kibana中使用。索引模式通过定义名称模式的形式匹配一个或多个索引名称,同时还可以通过源过器过滤掉不需要的字段,或通过脚本添加额外的字段。对于包含有日期类型字段的文档,还可以给索引模式定义时间过滤器。
文档发现功能以界面交互的形式设置查询条件,可使用时间栏、过滤器栏设置简单的查询条件;也可以通过Lucene和KQL两种查询语言设置复杂的查询条件。Lucene本质上就是DSL,而KQL则是Kibana自定义的语言,使用起来更简单且具有强大的提示功能。文档发现中设置的查询条件可以保存起来供可视化或仪表盘使用,也可以通过CSV或链接形式分享出去。
文档发现仍然是以简单的表格展示文档,接下来两章将会介绍Kibana中丰富的图表功能。
第10章 Kibana文档可视化
Kibana可视化功能以图表形式展示Elasticsearch中的文档数据,能够让用户以最直观的形式了解数据变化的趋势、峰谷值或形成对比。
这些图表根据查询条件从索引中提取文档,查询条件可以在文档可视化界面中定制,也可以使用在文档发现中保存的查询对象。文档可视化生成的图表也可以保存(称为可视化对象)。
进入文档可视化界面时将会列出Kibana中所有的可视化对象,如果已经将Kibana提供的样例数据导入,则在这个页面上将列出几十个不同的可视化对象,如下图

点击搜索框后的加号按钮会展示出所有可选的文档可视化类型,创建自定义的可视化对象就是从这里开始。
文档可视化类型很多,包括折线图、饼图、仪表、表格、地图等。本章将它们分门别类,按二维坐标图、圆形和弧形、热度等几个大类讲解。
可视化对象可以单独分享出来,也可以使用Kibana仪表盘组合起来展示。可视化对象分享的方法将在下一章与仪表盘一起介绍。
10.1 二维坐标图
二维坐标图基于二维直角坐标系的X/Y轴绘制数据,包括折线图、面积图和柱状图三种。X轴是自变量而Y轴是因变量,Y总是随X变化而变化。以折线图为例,它反映的就是Y随X变化的趋势。比如速度体现了距离随时间变化的趋势,那么X轴就应该是时间,而轴则是距离。
在Kibana中,二维坐标图的Y轴一般是一个或多个指标聚集,比如平均值、总数、极值等。而X轴则是桶型聚集,比如词项聚集、范围聚集等。所以指标聚集、桶型聚集的知识是学习可视化功能的基础,在第7章有详细介绍。如果对这些概念感觉陌生,需要先返回前面复习这些内容。
10.1.1 面积图
下面使用kibana_sample_data_flights索引模式,创建一个面积图来反映飞行距离与机票价格之间的关系。
首先要确定飞行距离与机票价格哪一个是X轴,哪一个是Y轴。从数学角度来说,飞行距离是决定定机票价格的一个重要因素,所以飞行距离是自变量而机票价格则是因变量。从聚集查询的角度来说,机票平均价格使用指标聚集运算比较合适,而飞行距离使用桶型聚集更合适。所以从这两个角度来分析都可以使用飞行距离作为X轴,而使用机票价格作为Y轴。当然反过来也可以,但逻辑上看比较奇怪。
Distancekilometers代表航班飞行距离,而AvgTicketPrice代表机票价格。接下来就来开始创建第一个可视化对象,飞行距离与机票价格关系的面积图。
1. 新建可视化对象中选择第一个图形Area,进入选择索引模式的界面,如下图

2.创建文档检索
有两种方式,一种是通过索引模式创建新的文档发现(Index pattern);二是从已保存对象中选择在文档发现中保存的查询条件(Saved search)。
以方式一为例,单击kibana_sample_data_flights进入文档可视化创建界面。其他类型可视化对象也都需要选择可视化类型和索引模式,与此类似。
文档可视化界面也有工具栏、时间栏、查询栏和过滤栏,可通过这几个功能区域定制参与文档可视化的文档。
文档可视化界面下侧也分为左右两栏,左侧用于定制图形的X轴及其他配置信息,而右侧则展示了图形的定制效果。
先在Metrics下面将Y轴设置为机票平均价格,即取AvgTicketPrice 字段的平均值:
- 单击Y-Axis展开表单,将Aggregation的聚集类型修改为Average(默认为Count)
- 在Field选项中,选择字段为AvgTicketPrice
- 表单中Custom Label用于定制 Y 轴的文字说明,可输入"Price"
接下来再在Buckets下面将X轴设置为飞行距离,即按Distancekilometers字段的值分桶:
- 点击X-Axis展开表单,将Aggregation下的聚集类型设置为Histogram
- 在Field选项中选择字段为Distancekilometers,Minimum Interval设置为1000
- 表单中Custom Labe用于定制X轴的文字说明,可输入Distance
X轴和Y轴这样设置的目的是将文档按Distancekilometers以1000km为最小分隔单元划分成不同的组,然后再对每一组文档的机票价格求平均值,最后将它们绘制在界面上。
设置结束后,单击右上侧的应用按钮或直接按Enters键,右侧的图形就会将数据绘制出来,如下图

如果生成的面积图比较奇怪或者数据量比较少,有可能是时间范围取得太小,可将时间范围设置为"This year"以提取所有文档绘图。
创建好的可视化对象可以保存起来,单击工具栏的Save按钮,将面积图保存为[study] Area-Distance&Pice。保存好的可视化对象,可以在进入可视化功能界面中看到。
10.1.2 折线图与柱状图
由于折线图、柱状图与面积图对数据的需求完全一样,所以它们之间可以很容易做切换。在配置栏上点击Metrics&Axisi 链接,可以对指标和坐标做配置。如下图

Metrics&Axis配置页分为Metrics、Y-Axis、X-Axis三部分,分别用于配置指标、Y轴和X轴。在Metrics下有四个选项可以配置,其中的Change Type有三个选项line、area和bar,可以切换二维坐标图的类型。可自行选择切类型,然后按Enter键或单击右上角的Apply Changes按钮查看效果。
需要注意的是,在这里修改类型并不会改变原图性质,它在可视化对象列表中显示的依然是面积图。即使在修改类型后以其他名称再保存,可视化对象也还是原来的类型。例如在将图像类型由area修改为line后单击Save按钮,在弹出的对话框中将“Save as a new visualization开关打开,并且将名称修改为[study] Line-Distance&Price,最后单击Confirm Save按钮。这时Kibana就会将可视化对象保存为新对象,如下图

这时回到可视化对象列表页面,在查询栏中键入study回车就可以检索到两个保存好的可视化对象,如图 10-6 所示。

尽管[study] Line-Distance&Pice实际上是折线图,但由于它是以面积图创建的,在列表中它显示的类型依然是面积图。
在创建可视化对象时,可供选择的可视化对象类型中有单独的折线图和柱状图。要想创建保存独立的折线图或柱状图,可以在创建时选择Line、Horizontal Bar(水平条状图)或Vertical Bar(竖直条状图)。它们创建的过程与面积图基本相同。
10.1.3 指标叠加
指标叠加是创建多个指标聚集,并且在一张二维坐标图中绘制出来,直观的表现就是在二维坐标中有多个图共享相同的坐标。下面就在飞行距离与机票价格的基础上,给可视化对象再添加一个指标,以体现不同飞行距离的航班数量。
1. 使用Y-Axis
重新打开[study]Area-Distance&Pice”,另存为[study] Area-Distance&Price&Count。在Metrics下面单击Add metrics按钮为Y轴增加新的指标。在弹出的Select metrics type中选择Y-Axis,再选择指标聚集类型为Count,并为坐标添加说明标签Count。如下图
单击右上角的Apply Changes按钮或直接按Enter键,会看到在面积图中出现了两种不同颜色的面积图,如下图

在默认情况下,叠加指标之间不会出现交叉,但可通过设置Mode参数修改。将配置页面切回Metrics&Axes,会看到Metrics在原来Pricee的基础上多了一个Count。在Mode参数的下拉列表中分别选择normal和stacked,比较它们的区別。上图所示为两种模式的区别,前者为normal模式而后者为stacked模式。
- normal会根据两种指标的实际值绘制图形,这样图形之间有可能会出现交叉重叠
- stacked不会将指标实际值对应到坐标上,而是将它们按比例堆起来以保证它们不会出现重聲
此外,在多指标的情况下每一个指标的设置都是独立的,可以分别给每个指标选择不同的图形,因此可以在一个图形中同时使用折线图、面积图和柱状图来表现不同的指标
2. 使用Dot Size
在单击Add Metrics按钮添加指标聚集时,会出现Y-Axis和Dot Size两个选项。
选择Y-Axis方式添加指标聚集让坐标中的图形多出一个(如上示例)
选择 DotSize 添加指标聚集则不会多出图形,而是以折线拐点大小来描述数据。由于面积图、柱状图不存在拐点,所以Dot-Size指标对于这两种类型的图不起作用。即如果添加了Dot Size指标,另一个指标选择的图形类型必须是line
先将[study] Area-Distance&Price&Count另存为[study] Dotsize-Distance&Price&Count'。然后再在新的可视化对象中,找到Metrics选项下的第二个指标Count,单击这个指标后面的子图标将其删除。接下来:
- 单击Add metrics,这次选择Dot-size类型
- Dot-Size的表单除了要设置Aggregation指标聚集类型以外,还会有个Dot size ratio滑动条,用于指定最大点与最小点之间的比例。设置 Dot-size指标聚集类型为Count, Dot size ratio滑动条任意选择。Buckets配置不需要修改
- 由于Dot-Size只能与折线一起使用,所以需要在Metrics&Axes配置页中将第一个指标Price设置为折线,即将Chart Type设置为line。
设置好这些选项后,单击右上角的Apply Changes按钮或直接回车,就会发现折线的拐点发生了明显变化,如图

加入Dot-Size 指标之后,拐点的大小不再是完全相同的了,而是与设置的Dot-Size指标聚集值成正比。同时,当鼠标指针悬停在拐点上时,会同时显示两个指标及桶的提示信息。与Y-Axis指标不同的是,Dot-Size指标只能添加一次。为了能够在似表盘中使用这个图像,记得在修改完成后点击 Save 保存修改。
补充参考:
Elastic 中国社区官方博客发表的Kibana:通过气泡图把两个指标合并成为一个可视化图
3. 配置
叠加指标时多个指标可以共享一个Y轴,也可以在Metrics&Axes配置页中设置图像使用多个Y 轴。打开前面的[study] Area-Distance&Pice&Count,在 Metrics&Axes配置页中将Count指标展开,在Value Axis选项中选择New Axis,这时在下面的Y-Axes中就会多出来一个新的Y轴,如图

如果将两个指标的轴分列两边,则图形的Mode就只能是normal,即使选择stacked也不会再起作用。在配置栏最后一个标签页是Panel Settings,可以设置图例位置、提示、网格线等配置。图例默认情况下位于坐标图形的右上側,它展示了图形中不同颜色图形对应的信息。不仅如此,单击这个图例还可以配置图形颜色,如图

在图中,Price指标被设置为折线图,而Count则被设置为柱状图。同时Count指标通过图例修改为浅兰色,并通过 Grid 参数绘制了Y轴的网格线。在其余参数中,Leg-end Position用于设置图例位置;Show Tooltip则是图形提示信息的开关,当开启时鼠标指针悬停在图形拐点上时会出现提示信息。最后将这个可视化对象另存为[study] Line-bar-Distance&Price&Count,它非常直观地体现了飞行距离与票价的关系,同时还体现了飞行距离在数量上的分布情况。
10.1.4 桶醒叠加
在上面的示例中,Y轴实际上包含了两个维度的指标值:平均票价和统计数量。Kibana不仅支持Y轴设置多维度值,也支持X轴设置多维度值。
X轴在添加新桶型时有三个选择,X-Axis、Split Series和Split Chart。
- X-Axis只能设置一次,它相当于X轴的主桶型
- Split Chart只能设置一次,它是通过分割X轴或Y轴实现子桶型的添加
- Split Series可以设置多次,它是在同坐标中绘制多个图形实现子桶型的添加,每个图形对应一个子桶型
所以一般来说都是先添加X-Axis的桶型聚集,然后再添加Split Chat或Split Seriese的桶型聚集。
下面这个例子,同样也是飞行距离与机票价格的关系。不同的是这次加上一个子桶型的限制,要查看不同航空公司的飞行距离与机票价格的关系。在新建可视化对象时选择Line 型并选择索引模式kibana_sample_data_flights,配置页面中Metrics的添加跟前面一样,而 Buckets则多添加一个子桶型。单击Add sub-buckets,选择Split Series,在子桶型表单中设置对Carriers字段做Terms聚集,生成的坐标图如图

将图中的可视化对象保存为[study] Line-Distance&Pice&Carrier,它体现了不同航空公司的票价与飞行距离之间的关系。
如果以同样的方式设置子桶型,但选择以Split Chart方式生成子桶型,则生成的图形如图

使用Split Series生成的图形,不同航空公司的票价与距离关系图是绘制在同一坐标系中的,并通过右上角的图例说明它们是哪个航空公司的。
使用Split Chart则将整个坐标分成了多份,每个桶型对应个坐标。它们虽然共享同X轴,但Y轴却做了分割以区分不同航空公司。这种默认分割坐标的方式可以修改,在Split Chart下面有两个选项Rows和Columns,选择前者按行分割坐标,即共享X轴分割Y轴;选择后者则按列分割坐标,即共享轴分割X轴。点击Columns并键入回车,结果如图

与Dot-Size不同,Split Series和Split Chart不仅支持折线图,对柱状图和面积图也同样支持。
10.2 圆形与弧形
二维坐标图体现出自変量与因变量之间的关系和趋势。圆形与弧形体现的是部分与整体之间的关系。在Kibana中也包含了几种圆形或弧形的可视化对象,它们是饼图(Pie)、目标(Goal)和仪表(Gauge)。
- 饼图使用圆或圆环表示整个数据空间,并以扇面代表数据空间的某一部分,所以饼图在展示部分与整体的关系时非常直观
- 目标和仪表是两个不同的可视化对象,它们会将某一指标值的范围绘制在一个表盘中,并以指针或进度条的形式显示该指标在仪表中的实际值。这两种对象一般用于监控某一系统的运行状态,体现该系统在某一项指标上的健康状态。
10.2.1 饼图配置
饼图有两项变量需要定义:
一是饼图要区分多少个扇面(桶型聚集决定,Buckets配置)
二是每个扇面有多大(指标聚集决定,Metrics配置)
创建Kibana饼图也同样包含Metrics和Buckets两个配置项:
- Metrics只能定义一个指标聚集,定扇面大小
- Buckets可以定义多个,决定扇面有多少个
下面以绘制不同航空公司航班数量的饼图为例
1. 在创建可视化对象窗口中选择Pie并选择kibana_sample_data_flights索引模式,进入创建饼图的配置界面
2. 在Metrics配置项下单击Slice Size展开表单,选择指标聚集为Count,并在Custom Label中填写标识为Count
3. 选择Buckets下面的Split Slices,并选择聚集为Carrier字段的Terms桶型聚集
设置完成后单击右上角Apply Changes按钮或直接按Enteri键,饼图就会以下图形式出现。

默认Kibana饼图为圆环形,可以通过在Options界面中修改Donut开关更改。勾选Donut选项时绘制的图形为圆环,取消勾选Donut则绘制的图形为圆形。
除了设置饼图的类型,还可以设置扇面的标识,即勾选Show Labels可以开启每个扇面的标识信息。最后,通过Legend Position下拉列表可以设置图例的位置。如下图所示,饼图被绘制为圆形,并包含了标识信息。单击Save按钮将这个饼图保存为[study] Pie-Carrier& Count。

10.2.2 饼图叠加
在添加桶型聚集时有两个选项,一个是Split Slices,另一个则是Split Chart。与折线图类似,Split Chart会以分割X轴或Y轴的形式添加子桶型,但只能添加一次且必须要先于Split Slices添加。上ー小节的示例中选择了Split Slices,这时如果再通过Add sub-buckets添加子桶型时就不能再添加Slipt Chart了。
先将[study] Pie-Carrier&Count另存为[study] Pie.Split.Chart-Carrier&Count'。单击桶型聚集后面的叉子按钮删除原来的桶型聚集,再以Split Chart方式添加Carrier字段的Terms聚集。然后再单击Add sub-buckets添加子桶型,这时就只有一个Split Slices选项了,将子桶型设置为Destcountrye的Terms聚集。
饼图的Split Chart也有Rows和Columns两个按钮,选择Rows时按行分割Y轴,而选择Columns则按列分割X轴。下图所示为按Rows和Columns分割坐标后的效果图。

上图中所示的饼图先按不同的航空公司(Carrier)分割坐标,所以每一个饼图就代表一个航空公司。在每一个饼图中,每个扇面代表的是航班的目的地国家占比。
与Split Chart只能添加一次不同,Split Slices可以添加多次子桶型。新添加进来的子桶型,会对父桶型中每一个桶再次分桶,展示出来的饼图是同心环或同心圆。将上面的可视化对象另存为[study] Pie.Split.Slices-Carrier&Count,将所有的桶型聚集删除后再使用两个Split Slices添加Carrier和DestCountry字段的Terms聚集,最终的效果如下图所示

上图中使用两个圆环代表两个桶型聚集,内侧园环分为4个扇面代表4个航空公司;而外侧圆环又将每个扇面划分为10个更小的扇面,代表10个不同的目的地国家。从这个饼图可以清楚地看出4个航空公司的航班数量占比,而每家航空公司在每个国家的市场份额也目了然。
10.2.3 目标
目标可视化对象体现的是指标值距离设定目标值之间的差距,实际值越高越接近目标值说明系统运行越好。比如,设定一个年度销售额目标,通过目标可视化对象就可以体现出当前实际销售额与目标销售额之间的对应关系。同样,仪表可视化对象也可以体现指标值在仪表中的实际位置,但体现的往往是系统某一项指标是否处于安全区间。因此,仪表会给不同的数值区间赋予不同的颜色,值越高颜色越深。目标和仪表一般使用弧形,也可以配置为圆环形状。
下面设置Kibana Airlines航空公司每月航班数量的目标为3000次,来生成一个目标可视化对象。由于这次要生成的可视化对象要过滤航空公司,所以在配置目标可视化对象前要先配置检索。
- 在创建可视化对象中选择Goal对象,然后选择kibana_sample_data_flights索引模式。
- 进入Goal对象配置界面后,先给可视化对象添加过滤器。单击Add a filter,并设置过滤器为"Carrier is Kibana Airlines",单击Save按钮保存过滤器。
- 同时还要注意,由于图形展示的目标是月度航班数量,所以要将时间范围设置为”This month“,如下图

接下来,在Options界面中设置目标值为3000次。找到Ranges选项,将To设置为3000,这时目标对象会按3000次目标来计算百分比,如下图
如上就是最终生成的目标对象,将它保存为[study] Goal-Count。Ranges选项可以设置为多个,生成的目标对象会根据实际值选择不同颜色,但这对于目标对象来说意义并不大。但仪表对象的Ranges选项一般都要设置成多个,仪表对象无论在设置上还是在最终生成的图像上都与目标对象极为相似。最主要的区别就是在配置时会设置多个Ranges,并且在生成的图像上会有刻度。
10.2.4 仪表
下面以航空公司的航班延误时间为指标,生成一个航班延误时间的仪表。
- 选择Gauge对象及kibana_sample_data_flights索引模式后
- 在配置页面上将指标聚集设置为Flightdelaymine的Average聚集
- 设置完成后单击右上角的Apply Changes按钮或直接按Enteri键

在仪表中看到平均延误时间为47.335, 且标识该值的进度条为绿色。这是因为Kibana默认将整个取值范围设置为100, 并且设置了0~50、50~75和75~100三个区间,它们对应的颜色分为绿色、黄色和红色。下面进入Options配置页面,将延误取值范围修改为1个小时,并设置 0~20、20~40和40~60三个区间,如下图
修改范围区间后,由于当前平均延误时间已经达到第三个区间,进度条变为红色。有关颜色的变化,可以通过修改Color Options变更。另外在Options上还有其他一些选项可以配置目标和表对象,比如可以通过Gauge Type将它们的图像设置为完整的圆形。修改完成后,将可视化对象保存为[study] Gauge-delay。
10.3 热度
热度在互联网和大数据时代它越来越多地代表某种资源的使用频度,资源使用得越多,它的热度也就越高。比如在搜索引擎中的热词,在地图中展示的交通流量、热点区域等。本节介绍在Kibana中几种与热度相关的可视化对象。
10.3.1 热力图
热力图通常是在一个可区分为不同区域的图形上,以不同颜色标识某一指标值在不同区域的高低分布情况。比如在地图的不同区域以不同颜色标识交通流量、人口分布等情况,交通流量越大、人口密度越高它们所在区域的热度也就越高,区域对应的颜色也就越深。
Kibana热力图与此类似,但它并不是绘制在地图上,而是绘制在二维坐标上。与前面介绍的几种二维坐标图不同,Kibana热力图的X轴和Y轴都是桶型聚集。它们相互交叉形成一个可以用热度值标识的二维矩阵,而热度值则由另一个独立的指标聚集来定义。所以,在Kibana 热力图中至少要定义三个聚集,即X轴的桶型聚集、Y轴的桶型聚集和热度值对应的指标聚集。Kibana在绘制热力图时,会根据X轴和Y轴对应的两个桶型聚集,分别计算它们所对应的指标聚集,然后再在热力图矩阵中以不同的颜色绘制出来。
下面还是以飞行距离与机票价格的对应关系为基础,并添加航空公司这一桶型聚集,来看下飞行距离、航空公司在机票价格上形成的热力图。
1. 首先在创建文档可视化的窗口中选择Heat Map,并在接下来的索引模式中选择kibana_sample_data_flights。
2. 热力图的配置栏也包含Metrics和Buckets两个配置项,点击Metrics下的Value按钮,将热度对应的指标配置为AvgTicketPricee的平均值聚集,如下图
3. 接下来再来配置X轴和Y轴的桶型聚集。在Buckets下先选择 X-Axis,将X轴设置为Distancekilometers字段的Histogram桶型聚集, Minimum Intervall设置为 1000。这之后再点击Add sub-buckets,选择Y-Axis设置轴的桶型聚集为Carriers字段的Terms聚集。设置完成后点击右上角的Apply Changes按钮或直接按Enter键,热力图就会以下图的形式出现。

这个热力图看上去不是那么经典,这主要是因为指标值的范围比较集中,所以绘制出来的热力图层次感并不强。但在热力图配置的Options页面,可以设置包括热度颜色种类、指标数量或范围等内容,通过这些配置可以让热力图看起来更能反映实际情况。
在默认情況下,热力图中的指标值只划分为4个等级,所以在指标值比较集中时热力图就不会有明显的层次。根据上图可以看出,机票票价大多集中在600~800之间,所以在下图中将这个区间的票价范围按50为ー个阶梯设置,这样热力图的层次感就出来了。设置结束后单击 Save按钮,以[study] Heat.Map-Distance&Carrier&Price为名称保存热力图对象。

10.3.2 标签云
Kibana可视化对象还有一个Tag Cloud类型,即标签云。标签云是一组相关标签以及它们相应的权重,权重影向标签字体的大小或其他视觉效果。标签云本质上反映的也是热度问题,但它主要是针对标签或词项做热度分析。
Kibana使用基于词项的桶型聚集将文档字段中词项分桶,然后再根据某一指标聚集值设置这些词项的字体大小,最后将这些词项组合在一起形成标签云。在7.3节中介绍的使用词项分桶的聚集只有三个,所以标签云也只能使用这三种桶型聚集(terms聚集、significant_terms聚集、significant_text聚集)。
下面根据出发国家OriginCountry字段的terms聚集分桶,然后根据票价AvgTicketPrice字段的avg聚集值设置词项字体大小:
1. 选择Tag Cloud可视化对象和kibana_sample_data_flights索引模式后,
2. 在Metrics下单击Tag Size展开表单,将指标设置为AvgTicketPrice字段的Average指标聚集,这里设置了词项字体大小值的来源
3. 点击Buckets下的Tags展开表单,将桶型设置为OriginCountry字段的Terms聚集,这设置了词项的来源
4. 在Size参数中,将值修改为30,这设置了展示词项的数量
设置完成后单击右上角的Apply Changes按钮或直接按Enter键。
上图中每个词项代表一个国家,而它们字体的大小则代表了从这个国家出发航班机票的价格,将标签云保存为[study] Tag.Cloud-OriginCountry。在生成的图像上单击任意一个词项都会生成一个过滤器,而在Options标签页中则包含了一些配置选项,可自行尝试。
10.3.3 坐标地图
实际应用中,热度更多是应用在地图上,比如人口密度、交通流量、降雨量等。Kibana支持两种类型的地图,它们是
Coordinate Map:根据经纬度坐标在地图上绘制圆点,并以圆点的颜色和大小标识某一指标在这个坐标位置上的热度
Region Map:根据区域的名称编码定位到地图中的地区,并将地区填充上不同的颜色以标识某一指标在这个地区的热度
在kibana_sample_data_flights中,Originlocation和Destlocation这两个字段为地理坐标类型,分别代表出发机场和目的机场坐标。下面就来使用Coordinate Map在地图上根据航班数量的多少来标识出发机场。如下图

1. 选择Coordinate Map类型和kibana_sample_data_flights索引模式进入Coordinate Map配置页面。
2. Coordinate Map也包含两个配置项Metrics和Buckets,但它们都只能设置一个,并且Buckets只能设置为Geohash桶型聚集。单击Metrics选项下的Value,将指标聚集设置为Count聚集
3. 单击Buckets下的Geo Coordinates,将桶型聚集设置为Originlocation字段的Geohash聚集。
设置完成后单击右上角的Apply Changes按钮或直接按Enter键。
Kibana会根据OriginLocation坐标位置在地图上绘制圆点,圆点的大小和颜色则代表了该坐标位置的航班数量。当鼠标悬停在圆点上时,会弹出提示框以展示该位置的坐标和航班数量。通过Options标签页还可以设置圆点颜色等其他配置,最后将可视化对象保存为
[study] Coordinate.Map-OriginCountry
10.3.4 区域地图
在kibana_sample_data_flights中,OriginCountry和DestCountry两个字段保存的是国家代码,分别代表出发国家和目的国家。我们使用Region Map在地图上根据出发国家展示航班数量的热度
1. 选择Region Map和kibana_sample_data_flights后进入Region Map配置页面。
2. 与Coordinate Map类似,Region Map的Metrics和Buckets配置项也是都只能设置一个,并且Buckets只能设置为Terms桶型聚焦。设置Metrics为 Count指标聚集
3. 设置Buckets为Origincountry字段的Terms桶型聚集。
设置完成后单击右上角的Apply Changes按钮或直接按Enter键。如下图
将上图所示的可视化对象保存为[study] Region.Map- Origincountry。显然,在使用Region Map时区域名称必须要与地图中定义的名称一致,这就涉及Kibana地图绘制的实现问题。默认情下,Kibana使用Elastic地图服务提供的向量地图来绘制区域地图,服务地址为https://maps.elastic.co。区域编码默认使用ISO3166中定义的两字母代码,即ISO 3166-1 alpha-2 code (iso2),这些编码可以在Elastic地图服务网站上找到。在Options标签页上提供了修改这些默认配置的选项,可根据实际应用要求自行修改。
10.4 表格与控件
表格在文档可视化中的应用越来越少,但它在展示具体数值时具有一定的优势,所以在一些特定场景下表格是不可或缺的可视化元素。
控件不用于展示数据,而用于影响其他可视化对象展示结果。如通过下拉列表、滑动条等选择具体字段的值,以缩小或放大可视化展示文档的范围。
Kibana中表格对应的可视化对象为Data Table,应控件的可视化对象则是Controls,本节介绍这两种。
10.4.1 表格
表格由行和列组成,是一种通用的展现关系型数据的形式,所以要想绘制表格必须先确定行和列分别由什么来确定。在Kibana的表格中,行由桶型聚集決定,而列则由指标聚集决定。
下面来创建一个表格,并以航空公司为行分别统计它们的航班数量、平均票价、平均飞行距离等,这将形成 4 行 3 列的表格(不包含表头)。
1. 在创建可视化对象页面选择Data Table,然后选择kibana_sample_data_flights索引模式进入表格配置界面
2. 表格配置栏包含Metrics和Buckets两栏,Metric相当于列可以设置多个,Buckets相当于行也可以设置多个。先添加三个指标聚集,分别为Count聚集、 AvgTicketPrice字段的Average聚集和Distancekilometers字段的Average聚集
3. Buckets设置为Carrier的Terms聚集。
设置完成后单击右上角的Apply Changes按钮或直接按Enter键,这时就会生成如下图

如果想给表格增加更多列,可以在Metrics配置项中继续添加指标聚集。表格可按每一列排序,当鼠标指针悬停于每一行的表头时还会出现排除和包含按钮。单击它们可以在可视化对象中添加过潓器,表格中的数据也会跟着发生变化。将这个表格保存为[stud] Table-Carrier。
在添加Buckets时,有Split Rows和Split Table两个选择。它们与饼图加中的两个选项极为相似,前者在添加子桶型时会将父桶型按行分割,后者则会直接将表格分割成多个。
为上述表格再添加一个Destcountry的Terms聚集,在使用Split Rows形成的表格如下图

Split Table与饼图Split Chart类似,它会将表格分割成多个,而且也是只可以添加一次。不同的是,饼图Split Chart'必须要先于Split Slices添加,而表格的Split Table则可以在Split Rows后添加。同样是为表格添加一个 DestCountry的Terms聚集,这次使用Split Table,如下图所示

表格在展示时默认会分页,在Options标签页中可以设置每页展示数据的数量,默认值为10。
10.4.2 控件
与前述几种可视化对象不同,在创建控件时不需要选择索引模式,直接在创建可视化对象界面中选择Controls对象就可进入控件的配置页面。控制包括两种类型:
- Options list:会生成一个下拉列表控制,也是默认选项
- Range slider:会生成一个值范围的滑动条,用于设置数值类型字段的过条件
下面先创建一个根据Carrier字段选择航空公司的下拉列表控件。
1. 选择Options list并单击Add按钮
2. 在弹出的Control Label中填写Carrier,在Index Pattern中选择 kibana_sample_data_flights索索引模式
3. 最后在弹出的Field选项中选择Carrier字段
设置完成后单击右上角的Apply Changes按钮或直接按Enter键,这时会生成个名为Carrier的下拉列表选项,其中列出了所有可能的航空公司名称,如下图

接下来选择Range slider,
1. 单击Add按钮继续添加控制
2. 在弹出的Control Label中填写Price,在Index Pattern中选择kibana_sample_data_flights索引模式
3. 最后在弹出的 Field 选中选择AvgTicketPrice字段。
设置完成后单击右上角的Apply Changes按钮或直接按Enter键,如下图所示。

在Range slider中两个用于配置控件的选项,一个是Step Size用于控制滑动时数值增加的步长,另一个是Decimal Places用于设置小数位数。
控件单独使用时并没有什么意义,它一般与其他可视化对象一起在仪表盘中使用。当修改了控件后单击Apply changes按钮时,控件会在过滤器栏中添加相应的过滤器,这在仪表盘中会直接影响到其他可视化对象以限定仪表盘数据。所以,控件一般都出现在仪表盘的最前面。最后,将这个控件保存为[study] Controls-Carrier&Price,下章在讲解仪表盘时就可以使用了。
10.5 本章小结
本章将Kibana提供的可视化图表分为二维坐标图、圆形圆弧、热度等几大类分别介绍。
二维坐标图包括折线图、面积图和柱状图三种,它们本质上是样的,只是展现的形式不同而已。在二维坐标图中,一般以桶型聚集为X轴,而以指标聚集为Y轴,反映的是数据的某一指标值在不同桶中的变化趋势。事实上,表格与二维坐标图反映的内容相同,只是它更多的偏重于展示数据细节。
圆形圆弧包括饼图、目标和似表三种,尽管它们均以圆形或圆弧展示数据,但要展现的内容却完全不同。
饼图反映的是整体与局部的关系
目标和仪表则反映某一指标值的当前状态
饼图以桶型聚集将圆形分成多个扇面,而扇面的大小则由指标聚集決定。目标与仪表在本质上是相同的,都通过指标聚集计算某一指标的当前值。只是目标反映了指标与设定目标的关系,而仪表则反映指标值所在区间是否安全。
热度相关图形包括热力图、标签云、坐标地图和区域地图,它们共同的特定是都包含一个指标聚集反映某一指标值的热度。
热力图实际上是维坐标图,但它的两轴都是桶型聚集,而X与Y交又点则以指标值表示热度。
标签云使用基于词的桶型聚集分桶,然后以指标聚集值设置词字体大小以形成标签云。
坐标地图和区域地图以地理坐标或区域分桶,然后再以指标聚集设置坐标点的大小或区域颜色以示热度。
所以总的来看,这些图表都是组合桶型聚集与指标聚集,反映数据变化的趋势或形成对比。这些图表一般只能反映数据的一个側面,在下一章中将介绍如何将它们组合起来以更直观、更生动的方式展示数据。
第11章 Kibana综合展示
尽管查询对象和可视化对象都可以单独分享出来供其他系统使用,但它们展示出来的数据和图像比较单薄,只能反映系统的一个面。在实际应用中,更希望能够在一个页面中体现数据的各方面情况。Kibana提供的仪表盘和画布满足了这种需求,它们可以将多个查询对象和可视化对象组合到一起,共同将数据包含的信息展示出来。除了可以展示Easticsearch文档数据,Kibana还提供对Elastic Stack组件监控数据的可视化功能,这就是Kibana的监控功能。此外,在Kibanak 版本7中还新增加了地图功能,本节将一并介绍。
11.1 仪表盘
仪表盘(Dashboard)是Kibana提供的综合展示数据的功能,在Kibana中保存的查询对象和可视化对象可以在仪表盘中组合起来共同展示。
仪表盘是位于导航栏的第三个功能,如果已经导入了Kibana样例数据,进入仪表盘界面后会看到3个已经保存的似表盘对象,如下图

如果想要创建新的似表盘对象,可单击Create new dashboard按钮。如果读者按本书第9、10章的要求保存了查询对象和可视化对象,创建一个仪表盘还是非常简单的。下面就利用前两章保存的查询对象和可视化对象来创建一个仪表盘
11.1.1 创建仪表盘
1. 单击Create new dashboard按钮进入创建表盘界面,仪表盘界面与文档发现、文档可视化界面类似,也包含有工具栏、查询栏、时间栏和过滤器栏,只是工具栏中的按钮有些不同,如下图

2. 单击工具栏中的Add按钮或者是在展示区域中的Add链接会弹出 Add Panels 对话框,其中包含了已经保存的可视化对象和查询对象列表。用户可在其中挑选希望加入仪表盘的对象,也可以单击Add new Visualization按钮创建可视化对象,如下图

3. 在Add Panels对话框中还有一个查询栏,输入study关键字搜索第10章中保存的可视化对象,如上图。一般来说,会将控件放置在仪表盘最上面,继续在查询栏中输入study control,这时会定位到之前保存[study] Controls-Carrier&Pice控件对象上。单击这个控件名称,控件就被添加到似表盘中了。按相同的方式选择所有感兴趣的可视化对象将它们依次添加到仪表盘中,它们将按添加顺序依次出现在表盘中。在每一个面板的右上角都有一个设置按钮,单击这个按钮会弹出一个选项对话框,通过个这对话框的选项可以实现对每个面板的定制。在每一个面板的右下角还有一个
形状的按钮,可通过这个按钮调节面板大小。如下图

4. 使用鼠标左键按住面板的标题部分还可以在仪表盘中移动面板,调整面板在仪表盘中的位置。
除了添加可视化对象,查询对象也可以添加到仪表盘中。在Add Panels对话框中选择Saved Search标签页,找到第9章中保存的[study] Search-Kibana Airline对象,单击对象链接就可以将其添加到仪表盘中了,如下图

最终,查询对象的文档展示栏会在仪表盘中展示出来,如下图

很酷!仅仅通过鼠标进行几下简单的点击,一个像模像样的仪表盘就展现出来了。仪表盘也可以像查询对象和可视化对象一样保存起来,单击Save按钮,在弹出对话框中将它保存为[study] Dashboard-Flights。
11.1.2 控件作用
再来感受一下控件如何影响其他可视化对象和查询对象。在仪表盘的控件上随意设置Carrer和Price两个选项的值,这时Appy changes按钮就会由灰色变为绿色。单击这个按钮会仪表盘的过滤器栏中增加两个相应的过滤器,同时仪表盘中所有对象都会跟着一起刷新以反映控件数值的变化,如下图

如果想将控件设置的值清除,可以单击控件上的Clear form按钮。这时控件值会被完全清空。同时Apply changes按钮会被再次激活单击这个按钮就会恢复到默认值
11.1.3 分享
在第9章中曾经介绍过,文档发现保存的查询对象可通过CSV文件和链接的形式分享出来使用。可视化对象和仪表盘对象也类似,除了可以在Kibana界面中直接查看,还可以通过iframe的形式嵌入到其他页面,或者以链接的形式分享出来。由于可视化对象与似表盘对象分享的方式方法完全相同,所以本小节的内容对两者都是适用的。单击工具栏中的Share按钮,在弹出的菜单中有Embed code和Pemalinks两个选项,如图11-8(Share)。前者就是以iframe形式分享,而后者则以永久链接形式分享。

单击Embed code,进入生成iframe的页面,其中包括两个选项:
Snapshot:生成的iframe是当前仪表盘的快照,所有参数都编入地址中,所以对仪表盘对象的任何修改都不会反映到ifame中
Saved object: 是直接链接到保存的仪表盘对象上,对仪表盘对象的任何修改都会体现在iframe中
选择Snapshot并单击Copy iFrame code按钮,这时会在剪切板中生成一个HTML的iframe标签,其中的src属性就是仪表盘对象的链接地址。将这段代码复制进HTM文件,则在浏览器中查看这个页面时就会将仪表盘嵌入进来,如下图

Permalinksi选项与Embed code类似,也分为Snapshot和Savedobiect两种,但它最终生成的是链接地址而不是iframe标签。
11.2 画布
仪表盘将查询对象和可视化对象组合在一起,可以通过图表的形式直观地展示一组数据的各个方面。但仪表盘只能使用Kibana中已有的图表形式,而不支持使用自定义图片等其他更为生动的形式展示数据。同时由于仪表盘中包含的图表专业性比较强,更适合于开发和运维人员监控系统或排查错误,而不适合商务场合下展示,所以许多商务背景下的数据展示还是通过其他方式单独制作。为了提供更为生动更为灵活的数据展示方式,Kibana从版本6.5开始引入了另一项功能画布(Canvas),以类似幻灯片的形式展示数据。
11.2.1 使用workpad
Kibana画布功能以workpad为单元管理画布,一个workpad实例中可以包含多页画布。用户可以直接在画布功能中创建空白workpad实例,也可以通过模板创建workpad例。
Kibana画布中默认提供了Dark Theme和Light Theme两个创建workpad实例的模板,两者最主要的区别在于背景色不同。如果以Powerpoint来类比Kibana画布,那么整个PPT文件就是workpad,而PPT文件中的每一页就相当于ー个画布。在 Kibana导航栏中找到画布功能按钮,单击即可进入Canvas workpads页面,如下图
在Canvas workpads页面有两个标签页:一个是My Workpads标签页,它会列出所有已创建的workpad;另个则是Templates,其中列出了所有可使用的模板。在My Workpads标签页中单击Create workpad按钮,将进入创建空白画布页面,如下图

在workpad页面的最下侧显示了当前workpad名称和页码,单击workpad名称则会弹出所有workpad名称的列表,类似于【上上图】所示的列表;而单击页码则会在底部弹出当前woorkpad所有页面的列表,并且在页面列表后还有一个加号可用于增加新页面。当鼠标指针悬停于页面列表中某一具体页面时,页面上会出现两个图标,第一个用于复制当前页面,而另一个则用于删除当前页面。
新创建的workpad会自动以Untitled Workpad为名保存下来,可通过右侧Workpad栏的Name输入框设置新的名称,还可以设置页面的长度和宽度。接下来将以kibana_sample_data_flights索引为数据来源更新画布,所以将workpad名称设置为此处更新为[study] Canvas-flights
11.2.2 管理图片资源
在画布右上角有Manage assets和Add element两个按钮,前者用于向workpad添加资源(主要是图片),后者则用于向画布中添加元素。单击Manage assets会弹出源管理窗口,单击Select or drag and drop images按钮选择图片,或直接将图片拖拽到该按钮上,图片就会上传到workpad中成为可在当前workpad中使用的资源,如下图
需要注意的是,这些图片在workpad之间是隔离的,在一个workpad中上传的图片只能在当前workpad中使用。每一个上传图片上都有四个图标按钮,单击第一个按钮会将当前图片添加到画布中,而第二个按钮用于下载图片资源,第三个按钮用于复制资源ID,第四按钮则用于删除资源。
除了使用图片上的第一个按钮向画布添加图片以外,单击Add element按钮,在弹出的窗口中选择Image也可以将图片添加到画布中,如下图
在默认情況下,Kibana会在画布中插入一个Elastic的Logo图片,但在右侧的Image栏中可以更改图片。除了可以使用已经上传的图片以外,还可以通过Import或Link标签页临时上传或使用链接形式。已经添加到画布中的图片还可以复制粘贴,并可以以拖拽的形式放大缩小或更改位置。使用上述方式向画布中添加多个图片,如下图

画布可以使用自定义的图片,这就是 Kibana 其他可视化对象所不具备的优势。但如果只是使用图片那就不能体现出来 Kibana 在数据方面的优势了,接下来就来看看如何将数据也添加到画布中。
11.2.3 添加数据元素
事实上,在单击Add element按钮后弹出的对话框中,除了图片还有许多元素可选,而它们中的大多数体现就是某种数据特征。下面向图中的画布添加航班数量,它们代表从某一国家出发和到达的航班数量。在单击Add element按钮弹出的对话框中选择Metric,这时画布中就会增加一个指标元素,如下图

由于画布默认会使用一组自定义的样例数据,所以Metric元素在画布中体现的也是样例数据的统计信息。因此首先要在保证Metric元素被选中的情况下,在右侧Data标签页中单击Change your data Source链接更改元素的数据来源。由于目前画布对Elasticsearch的SQL支持最好,所以在数据来源中最好使用SQL。选择了Elasticsearch SQL后,页面中会出现一个录入SQL语句的输入框,输入select count(*) as in_flights from kibana_sample_data_flights where Destcountry="US"并单击Save按钮保存。这条SQL语句的含义是统计 Destcountry为US的文档数量同时给返回的数量起了个别名in_flights。
保存了SQL语句还不算结束,还需要告诉Metric元素要展示SQL中返回的哪一个数据。单击Display标签页并找到Measure栏,在Number下选择Value并在后面的下拉列表中选择in_flights,这时SQL语句返回的in_flights值就会出现在Measure元素中了。整个设置过程如下图

添加到画布中的Metric元素也可以复制粘贴,将所有的Metric元素补充完毕并修改它们对应的SQL语句。之后再通过右侧的Metric栏修改字体、颜色、大小等风格,这一页画布就制作完成了,如下图

通过Kibana制作的画布与PPT最大的区别在于它的数据来源是真实的和动态的,所以在使用时可以直接在 Kibana 界面中展示并体现数据的动态变化。在画布左上角有四个按钮:
第一个Refresh按钮可以设置画布数据的刷新频率
第二个按钮则可以全屏展示画布。如果再辅以浏览器全屏,就可以动态、全屏展示画布了。在很多公司的重大活动中,经常会使用大屏幕以非常生动的图像展示活动相关数据,它们其实完全可以通过Kibanal画布功能实现
第三个按钮提供了以PDF形式导出画布的功能,但这个功能需要商业授权才能开启。画布中还有许多其他可用的数据元素,但它们都与前述可视化对象类似也并不复杂,所以本节就不再一一介绍了。
11.3 监控
在分布式环境下,系统越重要,对这个系统的监控也就越重要。Elastic Stack组件本身可以用于对其他系统做监控,比如可以使用Metricbeat收集其他系统的指标信息然后再在Kibana中展示出来就实现了对该系统的监控。监控往往与报警联系在一起,监控收集数据但不理解数据;而报警则通过一些预警指标理解监控数据,并在系统指标数据异常常时向管理人员发出警报。
本节并不是要讨论如何使用Elastic Stack监控其他系统,而是要讨论Elastic Stack组件自身的监控问题。Elastic Stack中的多数组件都是运行在集群环境中,集群中节点是否运行正常也需要以某种方式展现出来。Elastic Stack在其Basic授权中支持对自身组件的监控,但报警功能则在其商业授权中,所以本节只讨论监控而不讨论报警。
Elastic Stack监控可以收集Elasticsearch、Logstash和Kibana运行数据,监控数据会被存储到Elasticsearch中,然后再通过Kibana监控功能将这些数据可视化。Elasticsearch在整个Elastic Stack监控体系中处于核心地位,它不仅要收集自身产生的监控数据,还要负责收集Logstash和Kibana产生的监控数据。这些监控数据会被一种称为导出器(Exporter)的组件保存在本地Elasticsearch索引中,或者通过HTTP协议发送给其他的Elasticsearch集群。所以要想监控Elastic Stack组件,首先要开启Elasticsearche的监控功能。
11.3.1 开启监控
默认情况下,Elasticsearch监控功能是开启的,但监控数据的收集却是关闭的。所以在Kibana中进入监控页面将会看到开启集群监控数据收集的提示,如下图

如果没有monitoring的标签,可能需要设置
xpack.monitoring.ui.enabledSet为true,参考:https://www.elastic.co/guide/en/kibana/7.4/monitoring-settings-kb.html
单击Turn on monitoring按钮将开启Elasticsearch监控数据收集,页面将跳转到对集群组件的监控页面上。在默认情下,当开启了监控数据收集功能后,Elasticsearcha和Kibana产生的监控数据都会存储在本地Elasticsearch中,也就是说监控数据将存放在与生产环境相同的Elasticsearch集群中。但将监控数据与生产数据保存在一起,无论对生产还是对监控都是不利的,所以最好能通过搭建专门的Elasticsearch监控集群将它们分隔开来。
前面提到,Elasticsearchk的导出器组件负责存储监控数据,该组件有local和http两种类型。其中的local是导出器的默认类型,它的作用就是将监控数据保存在当前Elasticsearch的索引中。所以如果想要将监控数据发送到专门的监控集群,需要在elasticsearch.yml配置文件中通过xpack. monitoring.exporters参数定制导出器。例如:

在示例中定义了一个名为myexportera的导出器,通过type参数定义了导出器的类型为http,并通过host参数指定专门用于监控的Elasticsearch集群地址。对于Kibana来说这些是无感知的,它还是会将自身的监控数据发送给原来的Elasticsearch,最后再由Elasticsearch导出器将监控数据发送到监控集群
通过Kibana监控功能开启收集监控数据非常方便,但它屏蔽了些技术细节。实际上开启收集监控数据是将Elasticsearch的xpack.monitoring.collection.enabled参数设置为true,它其实可以直接在Elasticsearch的配置文件elasticsearch.yml中直接设置。不仅如此,这个参数还可以通过_cluste接口动态设置
一旦开启了监控数据收集,Elasticsearch就会每隔10s收集一次监控数据,这个频率可通过xpack.monitoring.collection.interval参数修改。如果希望停止收集监控数据,则可以使用上述的_cluster接口将收集监控数据关闭。
11.3.2 查看监控图标
默认情况下,通过Kibana监控功能开启Elasticsearch收集监控数据后,Elasticsearch就会开始收集Elasticsearch和Kibana的监控数据。所以在Kibana监控功能的页面上将看到Elasticsearch和Kibana的监控信息,如下图,需要注意的是,如果Elasticsearch将监控数据通过导出器存储到了其他集群的索引上,那么需要在Kibana的配置文件通过xpack.monitoring.elasticsearch.hosts参数指明监控集群的地址。
监控页面上分为Elasticsearch和Kibana栏,在每一栏下又包含有多张卡片,这些卡片展示了它们运行状态的一个面。例如Elasticsearch下就包含了Overview、Nodes和Indices三个卡片,它们分别展示了Easticsearch集群中的整体情况、节点情况和索引情况。单击其中的 Overview卡片,可以看到监控如下图

在Elasticsearch监控界面的左上角,包含了多个标签页的切换按钮,可以通过它们快速切换到其他卡片的图形界面上。在页面上部条状信息栏中,列出了整个集群的健康状况和内存使用情况,同时还列出了集群节点、分片、索引和文档的数量,集群的整体情一目了然。
除了这个信息栏以外,页面主要包括有四个折线图
- Search Rate:检索请求的频率,即每秒有多少个检索请求;
- Search Latency:检索请求的时间,即平均每个检索消耗的时
- indexing Rate:文档编入索引的频率,即每秒有多个文档编入索引
- Indexing Latency:文档编入索引的时间,即平均每个文档编入索引消耗的时间
接下来再来看一下Kibana的Overview监控界面,它的界面与Elasticsearch的非常相似,如下图

在页面上部条状信息栏中,也列出了Kibana健康状态和内存使用情况,同时也列出了实例数量、请求和连接数量以及最大响应时间等。但Kibana监控界面中的折线图只有两个
- Oclient Requests:客户端请求数量
- Client Response Time:平均响应时间
Logstash和Beats组件也可以在Kibana中监控,有关这两个组件的监控问题将在介绍到它们的时候讲解。
11.4 地图
地图功能是Kibana版本7中オ加入的功能,在7.0.0 版中,这个功能还处理Beta版本中。地图功能的核心特点是它基于图层,所以可以在一张地图上附加多个图层,这也是它与可视化功能中的Coordinate Map和Region Map的区别。可视化功能中的这两个地图都只能展示一指标值,而地图功能则可以通过加多个图层的形式展示多个指标值。本节将介绍地图功能,同时会介绍几种常用的图层类型。
11.4.1 叠加图层
略
11.4.2 使用聚集
略
11.4.3 矢量图层
矢量图是由一系列点连接起来的图形,它最大的特点就是图像放大后不会失真。
略
11.5 本章小结
本章介绍了 Kibanal 中的四个功能:仪表盘、画布、监控和地图,其中地图是在Kibana版本7中才添加进来的新功能。
仪表盘是对查询对象和可视化对象的综合展示,这些对象在文档发现功能和文档可视化功能中创建并保存。仪表盘提供了对这些对象的布局管理,还可以通过控件筛选要展示的数据。仪表盘可以直接在Kibana中通过浏览器查看,也可以通过iframe或链接的形式分享出去。
画布是另一种更为灵活的综合数据展示形式,它的一个显著特点就是在画布中可以添加自定义的图片。制作画布的单元称为workpad,这类似于在桌面应用中使用的PPT。画布由于更灵活更生动,比较适商务场景下的数据展示,所以画布也提供了以PDF格式导出的功能。
监控是Kibana提供的对Elastic Stack组件监控数据可视化的功能,可用于监控Elasticsearch、Logstash和Kibana自身。在开启了Elasticsearch监控数据收集后,Elasticsearch和Kibanae的监控信息会在监控界面中展示出来。有关Logstash和Beats组件的监控将在后续章节中介绍。
地图是在底图的基础上,通过叠加图层的形式展示数据,可以在底图上加的图层主要是 Document、Grid aggregation和Vector shapes 三种。其中,Document图层是使用文档geo point类型字段绘制圆点,而Grid aggregation则通过聚集将文档归入不同的区域后再绘制点,它还可以在绘制的点上以大小或颜色表示某一指标值的大小。Vector shapes图形则是矢量形状的图层,需要将矢量形状与索引文档关联起来以展示数据。

浙公网安备 33010602011771号