构建自己的仪表盘
准备加载一些数据并构建仪表盘?本教程将向你展示如何:
- 将数据集加载到Elasticsearch中
- 定义索引模式
- 发现并探索数据
- 可视化数据
- 将可视化添加到仪表盘
- 检查可视化背后的数据
加载样例数据
本教程需要三个数据集:
- William Shakespeare的全部作品,适当地解析成字段,下载shakespeare.json
- 一组带有随机生成数据的虚构帐户,下载account.zip
- 一组随机生成的日志文件,下载logs.jsonl.gz
其中两个数据集是压缩的,要提取文件,请使用以下命令:
unzip accounts.zip
gunzip logs.jsonl.gz
数据集的结构
Shakespeare数据集具有以下结构:
{
"line_id": INT,
"play_name": "String",
"speech_number": INT,
"line_number": "String",
"speaker": "String",
"text_entry": "String",
}
accounts数据集的结构如下:
{
"account_number": INT,
"balance": INT,
"firstname": "String",
"lastname": "String",
"age": INT,
"gender": "M or F",
"address": "String",
"employer": "String",
"email": "String",
"city": "String",
"state": "String"
}
logs数据集有许多不同的字段,以下是本教程的重要字段:
{
"memory": INT,
"geo.coordinates": "geo_point"
"@timestamp": "date"
}
设置映射
在加载Shakespeare和logs数据集之前,必须为字段设置映射,映射将索引中的文档划分为逻辑组,并指定字段的特征,这些特征包括字段的可搜索性以及它是否被标记化,或者分解为单独的单词。
如果启用了安全性,则必须具有运行本教程的所有Kibana权限,你还必须具有创建,管理读取,写入和删除索引权限,有关详细信息,请参阅 安全权限。
在Kibana Dev Tools > Console,为Shakespeare数据集设置映射:
PUT /shakespeare
{
"mappings": {
"doc": {
"properties": {
"speaker": {"type": "keyword"},
"play_name": {"type": "keyword"},
"line_id": {"type": "integer"},
"speech_number": {"type": "integer"}
}
}
}
}
此映射指定数据集的字段特征:
-
speaker
和play_name
字段是关键字字段,这些字段不被分析,即使字符串包含多个单词,它们也会被视为一个单元。 -
line_id
和speech_number
字段是整数。
logs数据集需要映射以通过应用geo_point
类型将纬度和经度对标记为地理位置。
PUT /logstash-2015.05.18
{
"mappings": {
"log": {
"properties": {
"geo": {
"properties": {
"coordinates": {
"type": "geo_point"
}
}
}
}
}
}
}
PUT /logstash-2015.05.19
{
"mappings": {
"log": {
"properties": {
"geo": {
"properties": {
"coordinates": {
"type": "geo_point"
}
}
}
}
}
}
}
PUT /logstash-2015.05.20
{
"mappings": {
"log": {
"properties": {
"geo": {
"properties": {
"coordinates": {
"type": "geo_point"
}
}
}
}
}
}
}
accounts数据集不需要任何映射。
加载数据集
此时,你已准备好使用Elasticsearch bulk API来加载数据集:
curl -H 'Content-Type: application/x-ndjson' -XPOST 'localhost:9200/bank/account/_bulk?pretty' --data-binary @accounts.json
curl -H 'Content-Type: application/x-ndjson' -XPOST 'localhost:9200/shakespeare/doc/_bulk?pretty' --data-binary @shakespeare_6.0.json
curl -H 'Content-Type: application/x-ndjson' -XPOST 'localhost:9200/_bulk?pretty' --data-binary @logs.jsonl
或者对于Windows用户,在Powershell中:
Invoke-RestMethod "http://localhost:9200/bank/account/_bulk?pretty" -Method Post -ContentType 'application/x-ndjson' -InFile "accounts.json"
Invoke-RestMethod "http://localhost:9200/shakespeare/doc/_bulk?pretty" -Method Post -ContentType 'application/x-ndjson' -InFile "shakespeare_6.0.json"
Invoke-RestMethod "http://localhost:9200/_bulk?pretty" -Method Post -ContentType 'application/x-ndjson' -InFile "logs.jsonl"
这些命令可能需要一些时间才能执行,具体取决于可用的计算资源。
验证加载成功:
GET /_cat/indices?v
你的输出应该类似于:
health status index pri rep docs.count docs.deleted store.size pri.store.size
yellow open bank 5 1 1000 0 418.2kb 418.2kb
yellow open shakespeare 5 1 111396 0 17.6mb 17.6mb
yellow open logstash-2015.05.18 5 1 4631 0 15.6mb 15.6mb
yellow open logstash-2015.05.19 5 1 4624 0 15.7mb 15.7mb
yellow open logstash-2015.05.20 5 1 4750 0 16.4mb 16.4mb
定义索引模式
索引模式告诉Kibana你想要探索哪些Elasticsearch索引,索引模式可以匹配单个索引的名称,或者包含通配符(*
)以匹配多个索引。
例如,Logstash通常以logstash-YYYY.MMM.DD
格式创建一系列索引,要浏览2018年5月的所有日志数据,你可以指定索引模式logstash-2018.05*
。
你将为Shakespeare数据集创建模式,该数据集具有名为shakespeare
的索引,和accounts数据集,其具有名为bank
的索引,这些数据集不包含时间序列数据。
- 在Kibana中打开Management,然后点击Index Patterns。
- 如果这是你的第一个索引模式,则Create index pattern页面将自动打开,否则,单击左上角的Create index pattern。
- 在Index pattern字段中输入
shakes*
。 - 单击Next step。
- 在Configure settings中,单击Create index pattern,对于这个模式,你不需要配置任何设置。
- 定义第二个名为
ba*
的索引模式,你不需要为此模式配置任何设置。
现在为Logstash数据集创建一个索引模式,这个数据集包含时间序列数据。
- 定义一个名为
logstash*
的索引模式。 - 单击Next step。
- 在Configure settings中,在Time Filter field name下拉菜单中选择@timestamp。
- 单击Create index pattern。
定义索引模式时,与该模式匹配的索引必须存在于Elasticsearch中,并且它们必须包含数据,要检查哪些索引可用,请转到 Dev Tools > Console并输入GET _cat/indices
,或者,使用curl -XGET "http://localhost:9200/_cat/indices"
。
发现你的数据
使用Discover应用程序,你可以输入Elasticsearch查询来搜索数据并过滤结果。
- 打开Discover。
当前索引模式显示在过滤条下方,在现在这种情况下是shakes*
,你可能需要在菜单栏中单击New以刷新数据。 - 单击当前索引模式右侧的插入符号,然后选择
ba*
。 - 在搜索字段中,输入以下字符串:
account_number:<100 AND balance:>47500
的
搜索返回0到99之间的所有帐号,余额超过47,500,它返回帐号8,32,78,85和97的结果。
默认情况下,会为每个匹配的文档显示所有字段,要选择要显示的字段,请将指针悬停在Available Fields列表上,然后单击要在表中包含的每个字段旁边的add。
例如,如果添加account_number
字段,则显示将更改为包含五个账户数的列表。
可视化你的数据
在Visualize应用程序中,你可以使用各种图表、表格和地图等来塑造数据,你将创建四个可视化效果:饼图、柱状图、坐标图和Markdown小部件。
- 打开Visualize。
- 点击Create a visualization或+按钮,你将在Kibana中看到所有的可视化类型。
- 点击Pie。
- 在New Search中,选择
ba*
索引模式,你将使用饼图了解银行账户数据中的账户余额。
饼图
实际上,饼图只包含一个“切片”,这是因为默认搜索匹配所有文档。
要指定要在饼图中显示哪些切片,可以使用Elasticsearch的bucket聚合,此聚合将匹配搜索条件的文档排序为不同的类别,也称为bucket。
使用bucket聚合来建立多个帐户余额范围,并找出每个范围中有多少帐户。
- 在Buckets窗格中,点击Split Slices。
- 在Aggregation下拉菜单中,选择Range。
- 在Field下拉菜单中,选择balance。
- 点击Add Range 4次,使范围总数达到6个。
-
定义以下范围:
0 999 1000 2999 3000 6999 7000 14999 15000 30999 31000 50000
- 点击Apply changes。
现在你可以看到1000个账户落入每个余额范围的比例是多少。
添加另一个关注帐户持有人年龄的bucket聚合。
- 在Buckets窗格的底部,单击Add sub-buckets。
- 在Select buckets type中,单击Split slice。
- 在Sub Aggregation下拉列表中,选择Terms。
- 在Field下拉列表中,选择age。
- 点击Apply changes。
现在,你可以看到帐户持有人的年龄细分,显示在余额范围的环形上。
保存此图表以便以后使用:
- 单击顶部菜单栏中的Save并输入
Pie Example
。
柱状图
你将使用柱状图查看Shakespeare的数据集,并比较play中speaking部分的数量。
- 创建一个Vertical Bar,并将搜索源设置为
shake*
。
最初图表是一个显示匹配默认通配符查询的文档总数的单一栏。
在y轴上显示每个play的speaking部分的数量,这需要你配置y轴指标聚合,这个聚合根据搜索结果的值计算指标。
- 在Metrics窗格中展开Y-Axis。
- 将Aggregation设置为Unique Count。
- 将Field设置为speaker。
- 在Custom Label框中,输入Speaking Parts。
- 点击Apply changes。
沿着x轴显示paly。
- 在Buckets窗格中,点击X-Axis。
- 将Aggregation设置为Terms,将Field设置为play_name。
- 要按字母顺序排列play,请在Order下拉菜单中选择Ascending。
- 给轴一个自定义的标签,
Play Name
。 - 点击Apply changes。
鼠标悬停在一个柱子上,会显示一个工具提示,其中包含该play的speaking部分的数量。
注意单独的play名字是如何以完整的短语出现的,而不是被分解成单独的单词,这是你在本教程开始时所做的映射的结果,当时你将play_name
字段标记为不分析。
使用名称Bar Example
保存此图表。
坐标图
使用坐标图,你可以在日志文件示例数据中可视化地理信息。
- 创建一个Coordinate map,并将搜索源设置为
logstash*
。 - 在顶部的菜单栏中,单击最右边的时间选择器。
- 点击Absolute。
- 将开始时间设置为2015年5月18日,结束时间设置为2015年5月20日。
- 点击Go。
你还没有定义任何桶,所以可视化是世界地图。
现在,从日志文件映射地理坐标。
- 在Buckets窗格中,单击Geo Coordinates。
- 将Aggregation设置为Geohash,将Field设置为geo.coordinate。
- 点击Apply changes。
现在地图看起来像这样:
你可以通过点击并拖动来导航地图,地图左上角的控件使你能够缩放地图并设置过滤器,试一下。
使用名称Map Example
保存此地图。
Markdown
最后的可视化是一个呈现格式化文本的Markdown小工具。
- 创建一个Markdown可视化。
-
在文本框中输入以下内容:
# This is a tutorial dashboard! The Markdown widget uses **markdown** syntax. > Blockquotes in Markdown use the > character.
- 点击Apply changes。
在预览窗格中呈现Markdown:
用名称Markdown Example
保存这个可视化。
在仪表盘中显示你的可视化
仪表盘是你可以排列和共享的可视化集合,你将构建一个仪表盘,其中包含在本教程中保存的可视化内容。
- 打开Dashboard。
- 点击Create new dashboard。
- 点击Add。
- 添加Bar Example、Map Example、Markdown Example和Pie Example。
你的示例仪表盘看起来像这样:
你可以通过点击可视化的标题并拖动来重新排列可视化,在可视化的右上角的齿轮图标显示编辑和删除可视化的控件,一个调整大小的控件在右下角。
要获得要共享的链接或将仪表盘嵌入web页面的HTML代码,请保存仪表盘并单击Share。
保存你的仪表盘。
检查数据
数据的可视化效果非常好,但是有时候你需要查看实际数据来了解真正发生了什么,你可以检查任何可视化后的数据,并查看用于检索它的Elasticsearch查询。
- 在仪表盘中,将指针悬停在饼图上方。
- 点击右上角的图标。
- 从Options菜单中,选择Inspect。
你还可以查看用于获取可视化数据的查询。
- 打开View:Data菜单并选择Requests。
- 单击选项卡查看请求统计信息、Elasticsearch请求和JSON中的响应。
- 要关闭检查器,请单击右上角的X。
总结
既然你已经掌握了基础知识,那么你就可以开始使用Kibana探索你自己的数据了。
- 有关搜索和过滤数据的信息,请参阅Discover。
- 有关Kibana提供的可视化类型的信息,请参阅Visualize。
- 有关配置Kibana和管理保存的对象的信息,请参阅Management。
- 有关可以用于向Elasticsearch提交REST请求的交互式控制台的信息,请参阅Console。