Timelionで線、棒、固定値を含んだグラフを描く

# Timelionと戯れる

## Timelionとは

https://www.elastic.co/jp/blog/timelion-timeline

このあたりを見てもらうとして、「Kibanaで時系列データをもっと活用できたらいいのに」とあるように時系列データに特化した内容のようです。

kibanaだと画面からいろいろ条件を設定してVisualizationからダッシュボードを作っていけるのに対し、
Timelionは、１つの画面でいろいろできる反面、ぱっと見てどうしていいか迷ったので、その備忘録がてらに以下を書いておく。

## 線グラフをかく

基本は、.es()からスタートするのが良さそう。

↓　これで１つのグラフになる。　追加する場合は、 , で条件を追加していく。

``` 
.es(index='logstash-*', q='type:accesslog', timefield='daytime').label('アクセス件数')
```

| parameter名　| サンプル例 | 備考 |
|:-----------|:------------:|:--:|
| index       | logstash-* | 検索対象とするインデックスを指定する |
| q       | type:accesslog | 軸の値（y座標の値）をとる条件 |
| timefield | daytime | 時間を指定したフィールドを指定する。@timestampとか|
| label| アクセス件数| ラベルを指定する(Legendに出るラベルとなる）|

これで、logstash-*　に入れられた中から、 type:accesslogで検索し、その件数を timefieldで指定したdaytimeフィールドの値でグラフ描画する、となる。

![0001.png](https://qiita-image-store.s3.amazonaws.com/0/111676/db3dbbec-a5e1-f734-4d8f-a4c1391180e0.png)


画面右上のトグルメニューからヘルプを出すと、設定できるパラメータを見ることができる。
ただ、使わないで！的なのも含まれているため注意が必要。

![0004.png](https://qiita-image-store.s3.amazonaws.com/0/111676/6aed2460-dcf0-086c-4a85-bf73992a7a1e.png)

urlを指定することで、まったく異なるelasticsearchを呼び出して１つの画面内で見せる、ということができそう。
そのうち、elasticsearchのデータと、どこかのOracleDBと、Amazonの何とかサービスのデータをまとめて１つのグラフに、というのが出てきそう。

## 棒グラフにする

``` 
.es(index='logstash-*', q='type:accesslog', timefield='daytime').bars().label('アクセス件数')
```

棒グラフにする場合は、bars()で指定すると良い。

![0002.png](https://qiita-image-store.s3.amazonaws.com/0/111676/1fc63278-2e21-741f-ac7e-9aa1249d18a0.png)

## 散布図っぽく

線ではなく点をプロットしたい場合は、 points()を使用すると良い。
もっとも、このデータには全くそぐわない・・・。

``` 
.es(index='logstash-*', q='type:accesslog', timefield='daytime').points().label('アクセス件数')
```

![0005.png](https://qiita-image-store.s3.amazonaws.com/0/111676/4fbf5af7-a2d6-5d1e-857f-52c17bd4ea57.png)



## なんか目標値っぽい固定値を足してみる


elasticsearchの中に固定値を入れずに、グラフに表示するやり方がわからなかったので、無理やりやってみた。
他に良い方法があるかもしれない。　→　正式なやり方がわかったので後述。

アプローチとしては、存在しない値を検索すると0件になるので、その値に対して固定値を足すと、Y座標値が固定できるのでは、というもの。

```
.es(index='logstash-*', q='type:accesslog', timefield='daytime').label('アクセス件数').bars(), .es(index='logstash-*', q='a:b', timefield='daytime').plus(250).label('目標値=250')
```
.plus(250)　で　0件のカウント値 + 250 = 250　を得ているイメージ。


![0003.png](https://qiita-image-store.s3.amazonaws.com/0/111676/7a883838-9f9e-bd0a-ce50-0518e822683e.png)

~~

### 2016/02/19追加

<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">Being productive at <a href="https://twitter.com/hashtag/elasticon?src=hash">#elasticon</a>: Added a .static() function to to <a href="https://twitter.com/hashtag/timelion?src=hash">#timelion</a> for <a href="https://twitter.com/hashtag/kibana?src=hash">#kibana</a> for drawing baselines <a href="https://t.co/dJwphBMDPk">pic.twitter.com/dJwphBMDPk</a></p>&mdash; Rashid Khan (@rashidkpc) <a href="https://twitter.com/rashidkpc/status/700445676216299520">2016, 2月 18</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

によると、.static()を使うことでベースラインを描くことが可能っぽい。

![Timelion   Kibana2.png](https://qiita-image-store.s3.amazonaws.com/0/111676/7a419ac0-a36b-67c4-9cb0-45e2bf44fc48.png)


.static(value=ここに数値) を入れてやれば良い。軸の追加と同様、staticも足せるし、labelの指定もできる。

```
.es(index='applicationlog-*', timefield='log_create_date'), .static(value=250000).label('staticテスト'), .static(value=100000).label('staticテスト2')
```

![Timelion   Kibana.png](https://qiita-image-store.s3.amazonaws.com/0/111676/87af4667-b681-d292-12f2-a4174098fc32.png)

このstaticが追加された新しいバージョンを使うには、一度古いのを消すと良いようだ。

- kibana plugin -r timelion
- kibana plugin -i elastic/timelion

Timelionいいね！

### 参考にしたサイト

- 思い切ってelasticのTimelionを取り入れてみた[http://acro-engineer.hatenablog.com/entry/2016/02/04/121500]