8. 数据可视化-kibana
过去都是假的,回忆是一条没有归途的路,以往的一切春天都无法复原,即使最狂热最坚贞的爱情,归根结底也不过是一种瞬息即逝的现实,唯有孤独永恒!
Kibana是一个开源的分析和可视化平台,设计用于搜索、查看交互存储在Elasticsearch索引中的数据。
参考:https://www.elastic.co/cn/kibana
用Kibana来搜索,查看,并和存储在Elasticsearch索引中的数据进行交互。
你可以轻松地执行高级数据分析,并且以各种图标、表格和地图的形式可视化数据。
Kibana使得理解大量数据变得很容易。它简单的、基于浏览器的界面使你能够快速创建和共享动态仪表板,实时显示Elasticsearch查询的变化。
8-1 向elasticsearch导入示例数据
示例数据 https://www.elastic.co/guide/cn/kibana/current/tutorial-load-dataset.html
1. 导入3类数据
- 威廉·莎士比亚全集,解析成合适的字段。点击这里下载这个数据集: shakespeare.json.
- 一组虚构的账户与随机生成的数据。点击这里下载这个数据集: accounts.zip.
- 一组随机生成的日志文件。点击这里下载这个数据集: logs.jsonl.gz.
shakespeare_6.0.json
下载第一个示例数据
通过bulk集群来导入数据;
--data-binary 指定数据格式;
# 传入文件 shakespeare_6.0.json
user1@imooc:~/data$ ll -r
总用量 771308
-rwxrw-rw- 1 user1 user1 25104673 8月 22 12:25 shakespeare_6.0.json*
# 导入数据
curl -H 'Content-Type: application/x-ndjson' -XPOST '192.168.0.103:9200/shakespeare/_doc/_bulk?pretty' --data-binary @shakespeare_6.0.json
GET shakespeare/_count
#--------------------------------------
{
"count" : 111396,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
}
}
accounts.json
不创建索引直接导入,会自动创建索引 bank;
curl -H 'Content-Type: application/x-ndjson' -XPOST '192.168.0.103:9200/bank/account/_bulk?pretty' --data-binary @accounts.json
GET _cat/indices
#------------------------------------
yellow open bank y_KuRpn_SJmvl3gXiTk1Ig 1 1 1000 0 381.8kb 381.8kb
GET bank/_count
#-------------------------
{
"count" : 1000,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
}
}
logs.jsonl
导入随机生成的日志文件
指定映射关系按天创建索引
PUT /logstash-2015.05.20
{
"mappings": {
"properties": {
"geo": {
"properties": {
"coordinates": {
"type": "geo_point"
}
}
}
}
}
}
PUT /logstash-2015.05.19
{
"mappings": {
"properties": {
"geo": {
"properties": {
"coordinates": {
"type": "geo_point"
}
}
}
}
}
}
PUT /logstash-2015.05.18
{
"mappings": {
"properties": {
"geo": {
"properties": {
"coordinates": {
"type": "geo_point"
}
}
}
}
}
}
打开json文件: 将 ,"_type":"log" 替换为空;
curl -H 'Content-Type: application/x-ndjson' -XPOST '192.168.0.103:9200/_bulk?pretty' --data-binary @logs.jsonl
GET _cat/indices
#-------------------------------
yellow open logstash-2015.05.18 9gzuGXSRRlu9Xu_HGcHK0Q 1 1 0 0 5.5mb 5.5mb
yellow open logstash-2015.05.19 2zEmN71RQKuwDxR_yMramw 1 1 0 0 5.6mb 5.6mb
yellow open logstash-2015.05.20 f1dMPvSdT5eX6hcW7ehMgg 1 1 0 0 5.7mb 5.7mb
GET logstash-2015.05.18/_count # 4631
GET logstash-2015.05.19/_count # 4624
GET logstash-2015.05.20/_count # 4750
8-2 kibana的index-pattern
1. 创建index-pattern索引模式
索引模式是kibana用来从elasticsearch取数据使用的
点击“Create index pattern”按钮来添加索引模式。第一个索引模式自动配置为默认的索引默认,以后当你有多个索引模式的时候,你就可以选择将哪一个设为默认。(提示:Management > Index Patterns)
选择timestamp
创建完成后会展示 索引包含的字段有哪些
2. 格式化 数据类型string
可以看到url.keyword 格式已经变成了URL
8-3 kibana的discover
kibana的discover可以用来分析和展示数据
1. 时间选框快速选择查看数据
修改时间为 2015.5.17
变+,再拖拽 选中,
2. 搜索索引 查看数据
2.1 搜索框 关键字 查询
geo.src.keyword :"CN"
2.2 命令行查询
GET logstash*/_search
{
"query": {
"match": {
"geo.src.keyword": "CN"
}
}
}
#-------------------------------------------
"hits" : {
"total" : {
"value" : 2550,
"relation" : "eq"
},
2.3 Lucene语言查看
关闭KQL
{"match":{"geo.src.keyword":"CN"}}
3. 数据的筛选
筛选条件都是并列的
编辑筛选
排除结果
数据取反
点击添加筛选条件
4. 添加字段
可以定制化的显示数据
添加tags字段: 看tags字段数据;
5. 查看周围文档
默认查看上下游 5 条数据;
8-4 elasticsearch聚合分析-Pipeline
Pipeline :管道聚合分析,支持对聚合分析结果再次进行聚合分析,支持链式调用
min_bucket
样例数据
GET employees/_count
#------------------------------------------
{
"count" : 20,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
}
}
# 按照工作分种类;
GET employees/_search
{
"size": 0,
"aggs": {
"job_term": {
"terms": {
"field":"job.keyword",
"size":10
}
}
}
}
# 按照工作分组,并求工资平均值;
GET employees/_search
{
"size": 0,
"aggs": {
"job_term": {
"terms": {
"field":"job.keyword",
"size":10
},
"aggs":{
"avg_salary":{
"avg":{
"field": "salary"
}
}
}
}
}
}
# 最低工资
GET employees/_search
{
"size": 0,
"aggs": {
"job_terms": {
"terms": {
"field":"job.keyword",
"size":10
},
"aggs":{
"avg_salary":{
"avg":{
"field": "salary"
}
}
}
},
"min_salary_by_job":{
"min_bucket": {
"buckets_path":
"job_terms>avg_salary"
}
}
}
}
根据直方图 求一个平均薪资\累加和
GET employees/_search
{
"size": 0,
"aggs": {
"age": {
"histogram": {
"field":"age",
"interval": 5
},
"aggs":{
"avg_salary":{
"avg":{
"field": "salary"
}
},
"sum_avg_salary":{
"cumulative_sum":{
"buckets_path": "avg_salary"
}
}
}
}
}
}
8-5 kibana的visualize基本图形-折线图
数据:修改 x/y轴;
指标和轴: 图表类型和 模式、线条模式
1. Histogram
注意:要关联到当前的时间里面(18,19,20)来;
2. 子聚合分析
拆分序列
按住=号,可以移动顺序,先进行GEO.src.keywords 分析(只有5个);
拆分图表
以行显示
以字段名显示
折线图
数值越大,点就越大;
条形图
8-6 kibana的visualize基本图形-热力图
X轴:时间; Data Histogram:直方图
Y轴:src
8-7 kibana的visualize基本图形-饼图
添加切片:
展示了 src 和 ip 的信息
8-8 kibana的visualize基本图形-数据图
8-9 kibana的visualize基本图形-仪表盘
最重要的是 选项部分:调整区间范围
8-10 kibana的visualize基本图形-目标图
最重要的是 选项部分:调整区间范围
按照国家 CN/ 来进行展示
8-11 kibana的visualize的timelion
Timelion是Kibana的一个时间序列可视化插件
timelion使用(类)
1. 数据源设定类
2. 可视化效果类
3. 数据运算类
4. 逻辑运算类
2. Timelion 表达式
表达式中没有空行或重新开头
# 查询全部数据
.es(*)
.es(index=logstash*,metric=count)
# 昨天与今天数据的比对
.es(index=logstash*,metric=count,offset=-1d),.es(index=logstash*,metric=count)
.es(index=logstash*,metric=count,offset=-1d).label("昨日"),.es(index=logstash*,metric=count).label("今日")
# 添加标题
.es(index=logstash*,metric=count,offset=-1d).label("昨日"),.es(index=logstash*,metric=count).label("今日").title("访问统计")
# 填充 fill
.es(index=logstash*,metric=count,offset=-1d).label("昨日").lines(width=0.5,fill=1),.es(index=logstash*,metric=count).label("今日").title("访问统计")
# 加颜色
.es(index=logstash*,metric=count,offset=-1d).label("昨日").lines(width=0.5,fill=1).color(red),.es(index=logstash*,metric=count).label("今日").title("访问统计").color(#1E90FF)
# 分组
.es(index=logstash*,metric=count,split=geo.src.keyword:3,)
# 指定中国CN,按机器分组并指定q关键字
.es(index=logstash*,q="geo.src.keyword:CN",metric=count,split=machine.os.keyword:3)
.es(index=logstash*,metric=sum:bytes,offset=-1d).label("昨日"),.es(index=logstash*,metric=sum:bytes).label("今日")
# 增加告警线
.es(index=logstash*,metric=sum:bytes,offset=-1d).label("昨日"),.es(index=logstash*,metric=sum:bytes).label("今日"),.static(1000000).label("告警线").color(red)
# 指定流量 范围 统计计数
(.es(index=logstash*).label("请求计数"),.es(index=logstash*,metric=sum:bytes).label("流量计数")).range(0,10000)
# 访问量和流量对比图
.es(index=logstash*).label("请求计数"),.es(index=logstash*,metric=sum:bytes).label("流量计数").yaxis(2)
昨天与今天的数据进行比对
填充图
加颜色
分组
按机器分组
告警线
指定流量 范围 统计计数
访问量和流量对比图