kibana绘图实战
我们在网上见过无数的展示 elk 最终 dashboard 的文章,却从来没有见过哪篇文章详细讲解了那些漂亮的 dashboard 是如何绘制出来的,这,叫人恨的牙根生疼,无奈,只好去啃官方文档,官方文档非常好,它详细地介绍了每一个环节的每一个概念,但是唯一的缺憾就是,它给你了一百个点,却没有给一条线,如果你的心态不好,或者理解力差一点,恐怕早就淹没在那 100 个点里边了,事实上,我也曾不止一次淹没在那里边。
这一次,算是苍天眷顾,在公司之前小伙伴做好的一个模板参考中,加之不懈钻研之下,总算将之啃下,晓知了其中精髓的万千之一二,恐怕再忘记,赶紧记录下来。
进入正题之前,可以先看一眼最终的效果图:
# 1,简单介绍。
点击可视化,选中创建一个视图,可以看到支持了很多种类型:
以下简单列出,对应跳转链接是官方文档:
- 其他
- 地图
- 区域地图
- 坐标地图
- 数据
- 度量
- 数据表 (opens new window)
- 目标图
- 量表
- 时间序列
- 可视化构建
- 时间线
- 基本图表
- 垂直柱状图
- 折线图
- 水平柱状图
- 热点图 (opens new window)
- 面积图
- 饼状图 (opens new window)
# 2,从标签云开始看。
可能你对这些丰富的功能还不熟悉,对上边定义了那么多的字段该如何应用也不清楚,简直有一些无从下手,那么,不要着急,就先从创建一个标签云开始吧,从标签云出发,慢慢熟悉,先了解一下我们所创建的那些字段的意义吧。
事实上我个人在晕晕乎乎去摸索这些视图的时候,也是像无头苍蝇一样,不知哪里是哪里的,但当我在玩味标签云的时候,隐隐约约了解到了一些精髓,于是当即觉得,要入门画图行业,非先从标签云开始不可。
现在,正式进入体验之旅。
创建一个标签云的视图,会进入到索引选择界面:
选择我们定义了的nginx-access-
这个索引,然后进行配置。
针对各个参数详细说明一下,这个地方的说明整理自官方文档,可能有点详细,容易看蒙,建议先跳过,等熟悉了之后,可以再回过头来深入理解。
Metrics
里边包含了不同的类型内容。
- Count 计数 聚合返回所选索引模式中元素的原始计数。
- Average 该聚合返回数字字段的平均值 。从下拉菜单中选择一个字段。
- Sum 总和 聚合返回数字字段的总和。从下拉菜单中选择一个字段。
- Min 最小值 聚合返回数字字段的最小值。从下拉菜单中选择一个字段。
- Max 最大值 聚合返回数字字段的最大值。从下拉菜单中选择一个字段。
- Unique Count 基数 聚合返回字段中唯一值的数量。从下拉菜单中选择一个字段。
Parent Pipeline Aggregations
(父级管道聚合):就像使用父级管道聚合一样,您需要提供一个用于计算同级聚合的指标。除此之外,还需要提供一个桶聚合,它将定义同级聚合将在其中运行的桶。
- Average Bucket 桶平均值 计算同级聚合中指定指标的(中数)平均值
- Sum Bucket 桶总和 计算同级聚合中指定指标值的总和
- Min Bucket 桶最小值 计算同级聚合中指定指标的最小值
- Max Bucket 桶最大值 计算同级聚合中指定指标的最大值
Sibling Pipeline Aggregations
(兄弟管道聚合):对于每个父管道聚合,您必须定义用于计算聚合的指标。这可能是您现有的指标之一或新的指标。
- Cumulative Sum 累计总和 聚合计算父直方图中指定指标的累计总和。
- Moving Average 移动平均值 聚合将动态移动数据窗口,生成该窗口数据的平均值。
- Serial Diff 串行差分 是一种时间序列中的值在不同时间滞后或周期内从自身减去的技术。
这个地方,我们就使用Count
,下边的聚合当中,我们可以选择不同的字段,然后来通过右侧的显示效果,来理解字段所代表的意义。
因为是第一张图,所以详细说明下:
- 1,上边已经说明的够详细了,选择 count。
- 2,唯一的选项,tags。
- 3,选择我们自己定义的 terms。
- 4,随便选择其中的某一个字段,这里选择了 agent.keyword。
- 5,点击播放,可以在右侧看到配置效果。
- 6,通过所显示的字段,大概可以明白,刚刚的
agent.keyword
所代表的意义是客户端类型。 - 7,最下边是一些说明信息,可以在左侧的
Custom Label
当中填写以帮助理解。
接下来就再更换一下 terms 类型,然后了解不同的字段意义。这就是我所说的,从标签云开始,来理解每个字段的意义。
geoip.city_name.keyword:
xff.keyword:
还可以点点其他的,来画一些图,现在就把刚刚的访问地域那个保存下来,保存方法是:
# 3,客户端 ip 请求 top。
创建一个数据表
的视图–>度量依旧选择 count–>Custom Label 写入访问次数–>添加 Split Rows–>聚合依旧选择 terms–>字段选择 xff.keyword(你的可能要选择 clientip)–>下边 Size 填入 10–>Custom Label 写入访问 IP。
然后点击播放,如此,一个前十请求的 IP 以及次数就都列出来了。
然后保存一下。
# 4,客户端类型 top。
创建一个饼状图
的视图–>度量依旧选择 count–>Custom Label 写入访问次数–>添加 Split Slices–>聚合依旧选择 terms–>字段选择 agent.keyword–>下边 Size 填入 10–>Custom Label 写入客户端。
然后保存一下。
# 5,客户端 IP 切片。
创建一个饼状图
的视图–>度量依旧选择 count–>Custom Label 写入访问次数–>添加 Split Slices–>聚合依旧选择 terms–>字段选择 xff.keyword(你的可能要选择 clientip)–>下边 Size 填入 10–>Custom Label 写入客户端。
这里看到其中一个-
占了很大一部分,其实这个是自身的一些请求,不过可以通过配置将这部分过滤掉,方法是点击绿色部分–>然后在左侧标签栏排除即可,这一点是刚刚在配置过程中发现的,那么上边的几个视图也可以对不需要查看的部分进行过滤的配置。
如下是排除之后的效果:
这个地方还可以在左侧标签栏中的选线处,进行更细致的配置,选中显示标签,然后保存这个视图。
# 6,日志条数统计。
创建一个度量
的视图–>度量依旧选择 count–>Custom Label 写入日志条数–>添加 Split Group–>聚合依旧选择 Date Range–>字段选择@timestamp–>其余默认即可。
注意,这个日志的条数显示依据,是根据上边时间戳显示的,所以目前这个数字是最近 15 分钟的日志条数,可以调整其他时间戳,然后看日志的条数。
# 7,网络流量监控。
创建一个面积图
的视图–>度量选择 Sum–>字段选择 Size–>添加 X-Axis–>聚合选择 Date Histogram–>字段选择@timestamp–>Interval 选择 second。
# 8,异常状态码统计。
创建一个饼状图
的视图–>度量依旧选择 count–>Custom Label 写入访问次数–>添加 Split Slices–>聚合依旧选择 terms–>字段选择 status.keyword(你的可能要选择 clientip)–>下边 Size 填入 10–>Custom Label 写入异常状态码–>右边选项当中选中显示标签。
# 9,将所有视图聚合。
接下来就可以进入到仪表盘界面,进行自由自在的绘图阶段了,上边的视图只是举了一些例子,还可以根据很多实际情况,绘制出许多的图,这里就不一一列举了。
最后展示一下刚刚制作的几个视图聚合在一起的样子吧: