kibana Timelion 使用参考备忘

时间序列数据可视化 Timelion

# Timelion主要用于在可视化中组合完全独立的数据源,检索时间序列数据、通过计算挑选复杂问题的答案展示可视化结果
# 如:
#   1.每个唯一的用户在一段时间内查看了多少次页面
#   2.本周与上周流量的区别
#   3.今天日本有多少百分比的人口访问本网站
#   4.标准普尔500指数的10天移动均线是什么
#   5.过去年内收到的所有搜索请求的和

https://www.elastic.co/guide/en/kibana/current/timelion.html

# Example ( 下例中.es函数的timefield属性用于指定哪个字段作为X轴的时间参考 )
.es(index=INDEX,timefield=@timestamp,q="not name : xxx AND level : err").label('当前').lines(width=1,fill=5).color('#de773f'),
.es(index=INDEX,timefield=@timestamp,q="not name : xxx AND level : err",offset=-168h).label('上周').lines(width=1,fill=1).color(#9d9087).legend(columns=2),
.es(index=INDEX,timefield=@timestamp,q="not name : xxx AND level : err").label('速率').lines(width=0.1,fill=2).color('red').derivative().legend(columns=3),
.es(index=INDEX,timefield=@timestamp,q="not name : xxx AND level : err").label('趋势').lines(width=5,fill=0).color('#ed1941').mvavg(20).legend(columns=4)
 
功能:可视化效果类
.bars($width):                                                  # 用柱状图展示数组
.lines($width, $fill, $show, $steps):                           # 用折线图展示数组
.points():                                                      # 用散点图展示数组
.color("#c6c6c6"):                                              # 颜色值
.hide():                                                        # 隐藏该数组
.title(title="qps")# 图表标题
.label("change from %s"):                                       # 标签名
.legend($position, $column):                                    # 图例位置
.static(value=1024, label="1k", offset="-1d", fit="scale")# 绘制一个固定的值
.value()# .static() 简写
.trend(mode="linear", start=0, end=-10)# 采用 linear 或 log 回归算法绘制趋势图形
.yaxis($yaxis_number, $min, $max, $position):                   # 设置Y轴属性,.yaxis(2) 表示第二根 Y 轴
功能:数据运算类
.abs():                             # 对整个数组元素求绝对值
.precision($number):                # 浮点数精度
.cusum($base):                      # 数组元素之和,再加上 $base
.derivative():                      # 对数组求导数
.divide($divisor):                  # 数组元素除法
.multiply($multiplier):             # 数组元素乘法
.subtract($term):                   # 数组元素减法
.sum($term):                        # 数组元素加法
.add():                             # 同 .sum()
.plus():                            # 同 .sum()
.first():                           # 返回第一个元素
.movingaverage($window):            # 用指定的窗口大小计算移动平均值,对于分析有很多噪音数据的时序图非常有帮助
.mvavg():                           # .movingaverage() 的简写
.movingstd($window):                # 用指定的窗口大小计算移动标准差
.mvstd():                           # .movingstd() 的简写
.fit($mode)# 使用指定的 fit 函数填充空值。可选项有:average, carry, nearest, none, scale
.holt(alpha=0.5, beta=0.5, gamma=0.5, season="1w", sample=2)# 即ES的 pipeline aggregation 所支持的 holt-winters 算法
.log(base=10)# 对数
.max()# 最大值
.min()# 最小值
.props()# 附加额外属性,比如 .props(label=bears!)
.range(max=10, min=1)# 保持形状的前提下修改最大值最小值
.scale_interval(interval="1s")# 在新间隔下再次统计,比如把一个原本 5min 间隔的 date_histogram 改为每秒的结果
.trim(start=1, end=-1)# 裁剪序列值
.metric()                           # 聚类,如metric=sum:bytes 则y轴即为bytes的和
.split()                            # 表示按某字段分隔,如 split=source:4 即按source字段进行划分,取数量前四的展现
功能:逻辑运算类
.condition(operator="eq", if=100, then=200)# 支持 eq/ne/lt/gt/lte/gte 等操作符,以及 if/else/then 赋值
.if()# .condition() 的简写
功能:数据源设定类
.elasticsearch():                                   # 从 ES 读取数据
.es(q="querystring", metric="cardinality:uid", index="logstash-*", offset="-1d"):   # 同上
.graphite(metric="path.to.*.data", offset="-1d"):   # 从 graphite 读取数据
.quandl():                                          # 从 quandl.com 读取 quandl 码
.worldbank_indicators():                            # 从 worldbank.org 读取国家数据
.wbi():                                             # .worldbank_indicators() 的简写
.worldbank():                                       # 从 worldbank.org 读取数据
.wb():                                              # .worldbanck() 的简写
基于 Timelion 的可视化
# 参考:https://segmentfault.com/a/1190000016679290

# 将创建的第一个可视化将比较在用户空间中花费的CPU时间与一小时的结果偏移量的实时百分比
# 为了创建这个可视化,需创建两个Timelion表达式,一个是system.cpu.user.pct的实时平均数,另一个是1小时的平均偏移量
.es(index=metricbeat-*, timefield='@timestamp', metric='avg:system.cpu.user.pct')

# 现在再添加另一个具有前一小时数据的系列,以便进行比较,为此必须向.es()函数添加一个offset参数 (用日期表达式偏移序列检索)
# 对于本例,使用日期表达式-1h将数据偏移一小时,使用逗号分隔这两个系列,在Timelion查询栏中新增以下表达式
.es(offset=-1h,index=metricbeat-*, timefield='@timestamp', metric='avg:system.cpu.user.pct').label('last hour')

# 最终如下
.es(index=metricbeat-*, timefield='@timestamp', metric='avg:system.cpu.user.pct').label('current hour'),
.es(offset=-1h,index=metricbeat-*, timefield='@timestamp', metric='avg:system.cpu.user.pct').label('last hour').title('CPU usage over time')

# 也可以在.es()函数后添加.lines()后缀来定义线条的类型,如:
.es(index=metricbeat-*, timefield='@timestamp', metric='avg:system.cpu.user.pct').label('current hour').lines(fill=1,width=0.5),.......

# 也可以对图表设置颜色:
.es(index=metricbeat-*, timefield='@timestamp', metric='avg:system.cpu.user.pct').label('current hour').title('CPU usage over time').color(#1E90FF)

# 也可以设置其可视化展示的位置:
.es(................).legend(columns=2, position=nw)

****.bars("args...")     # 设置为条形
****.libes(width=2)      # 线条宽度

# ----------------------------------------------------------------------

.es(index=shop_index,timefield=shopRegistDate,split=source.keyword:10)
# index:      索引名字
# timestamp:  timestamp字段,必须有,用于timeline时间序列图中的x-时间轴数据。
# split:      要group by的字段,数字10表示最多显示多少个分类的线条

.es().label("Current"),
.es(offset=-15m).label("Last 15min"),
.es().subtract(.es(offset=-15m)).label("Diff").lines(steps=1,fill=2,width=0)

你可能感兴趣的:(elk,kibana)