# Timeseriesのlabel間集計

**URL:** https://discuss.elastic.co/t/timeseries-label/209419
**Category:** 日本語による質問・議論はこちら
**Created:** [November 26, 2019, 6:04am UTC](https://discuss.elastic.co/t/timeseries-label/209419 "2019-11-26T06:04:22Z")
**Posts on this page:** 10
**Page:** 1

<div class="post-metadata">

### Author: ![nakar-kashi](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/nakar-kashi/32/74374_2.png) [@nakar-kashi](https://discuss.elastic.co/u/nakar-kashi)
#### Post date: [November 26, 2019, 6:04am UTC](https://discuss.elastic.co/t/timeseries-label/209419/1 "2019-11-26T06:04:23Z")

</div>

こんにちは。  
現在kibanaでサーバごとのディスク使用量の前日との増減を表示したいと思っています。  
timeseriesで当日、前日のディス使用量は表示できたのですが、差分がうまく取れません。  
別ラベルのデータをとってくることは出来るのでしょうか。  
尚、ディスク使用量は1つのデータとなっているので、同じindexに対するoffsetを使用しています。

ラベル1  
Aggregation:MAX  
Field:use\_disk  
Aggregation:Backet Script  
Variable:max:Max of use\_disk

ラベル2  
Aggregation:MAX  
Field:use\_disk  
option:offset 1d  
Aggregation:Backet Script  
Variable:max\_1d:Max of use\_disk  
Painless.Script:params  
｛ラベル1のmaxデータ(ここの表示の仕方)｝- params.max\_1d

---

<div class="post-metadata">

### Author: ![tsgkdt](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/tsgkdt/32/39151_2.png) [@tsgkdt](https://discuss.elastic.co/u/tsgkdt)
#### Post date: [November 26, 2019, 8:05am UTC](https://discuss.elastic.co/t/timeseries-label/209419/2 "2019-11-26T08:05:09Z")

</div>

すぐ思いつくろで書いてしまい申し訳ないですがTSVBではなく、Timelionはどうでしょうか？

サーバーCと書いたところ、赤い線がディスク使用量のイメージで、下の青い色が塗っているAreaチャート風のところが増減を計算して出している部分です。  
増減のところは、同一Indexの同一フィールドで時間のフィールドのオフセット値を1日ずらすだけで、値を引き算して求めています。

 ![image](https://us1.discourse-cdn.com/elastic/original/3X/6/d/6d7ecf401bf373fa64f7f9e4650a4ce21579a4d7.png)

TimelioneのSubtractで青線のところを求めています。

青線のところはこのように書いています。

```auto
.es(q="*:*", index="Index名", timefield="@timestamp", metric='max:use_disk', split='server.keyword:10')
.subtract(
  .es(q="*:*", index="index名", timefield="@timestamp", metric='max:use_disk', split='server.keyword:10', offset='-1d'))
  .label("サーバー 増減$1", "(\S+)")
  .lines(fill=2)

```

見やすくするための便宜上、無駄な改行とスペースがありますが、本当は1行で書いているものと思ってください。

もっとよいアプローチもあると思いますが、もうすぐ出ないといけないので取り急ぎこれだけ書いておきます。

---

<div class="post-metadata">

### Author: ![nakar-kashi](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/nakar-kashi/32/74374_2.png) [@nakar-kashi](https://discuss.elastic.co/u/nakar-kashi)
#### Post date: [November 26, 2019, 9:56am UTC](https://discuss.elastic.co/t/timeseries-label/209419/3 "2019-11-26T09:56:25Z")

</div>

@tsgkdt ご回答いただき有難うございます。  
前日との差分はこれで表示できました。  
すみません。いろいろ情報が不足していて申し訳ないですが、下記を表現したいと思っています。

[インデックス]  
各サーバのディスク使用量を1日ごとに取得している

[実現したいこと]  
・サーバごとの当日ディスク使用量-前日ディスク使用量を取得(timelionで実現可能)  
・上記増減のうち、増加が多いサーバのtop10を表現

考えてみると日によって増加するサーバもあれば減少するサーバもあるので(単調増加ではないため)  
それをグラフで表現するのは難しいのでしょうか。

---

<div class="post-metadata">

### Author: ![tsgkdt](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/tsgkdt/32/39151_2.png) [@tsgkdt](https://discuss.elastic.co/u/tsgkdt)
#### Post date: [November 26, 2019, 12:55pm UTC](https://discuss.elastic.co/t/timeseries-label/209419/4 "2019-11-26T12:55:03Z")

</div>

SerialDiff Aggregationを使うと、Timelionのようなクエリを書かずともTSVBでできそうです。

[https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline-serialdiff-aggregation.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline-serialdiff-aggregation.html)

このようなデータを想定したとした場合を考えました。

| @timestamp | max(value) | 期待したい差分値 |
| --- | --- | --- |
| 2019/11/23 00:00:00 | 90.0 | なし |
| 2019/11/24 00:00:00 | 100.0 | 10 |
| 2019/11/25 00:00:00 | 300.0 | 200 |
| 2019/11/26 00:00:00 | 100.0 | -200 |

Max -\> Serial Difference を選択することで、下記のような図になります。

 ![image](https://us1.discourse-cdn.com/elastic/original/3X/0/3/03eb21d83135afb2a566414f93578dac36b274c4.png)

もし、Elasticsearchのクエリであるならば、このようなイメージです。

```auto
POST forum1126/_search
{
  "query": {
    "match": {
      "server": "A"
    }
  }, 
   "size": 0,
   "aggs": {
      "my_date_histo": {                  
         "date_histogram": {
            "field": "@timestamp",
            "calendar_interval": "day"
         },
         "aggs": {
            "max_aggs": {
               "max": {
                  "field": "value"     
               }
            },
            "diff_ga_hoshii": {
               "serial_diff": {                
                  "buckets_path": "max_aggs",
                  "lag" : 1
               }
            }
         }
      }
   }
}

```

変化量のトップ１０を出すのは、今すぐにアイデアがあるわけではないので、  
TSVBの情報だけ共有しておきたいと思います。

Elastic社がどう考えているかはわかりかねますが、Timelionが颯爽と登場してもTimelionの独自すぎる記法がネックになって使いづらかったので、TSVBが出てきたように思います。  
このことからすれば、個人的にはTSVBでやる方が、今後の苦労は少ないのではと思います。

ご参考になれば幸いです。

---

<div class="post-metadata">

### Author: ![nakar-kashi](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/nakar-kashi/32/74374_2.png) [@nakar-kashi](https://discuss.elastic.co/u/nakar-kashi)
#### Post date: [November 27, 2019, 1:15am UTC](https://discuss.elastic.co/t/timeseries-label/209419/5 "2019-11-27T01:15:28Z")

</div>

@tsgkdt ご回答いただき有難うございます。  
確かにTimelionの記法は独特で独学だと厳しいと感じました。  
TSVBの「Serial Difference」で差分が出せるんですね。labelを2にすれば2日前のデータとの差分がとれそうです。  
あとはうまくtop10が取れるかどうかはDocumenなどt読んで色々試してみようと思います！

---

<div class="post-metadata">

### Author: ![tsgkdt](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/tsgkdt/32/39151_2.png) [@tsgkdt](https://discuss.elastic.co/u/tsgkdt)
#### Post date: [November 27, 2019, 1:51am UTC](https://discuss.elastic.co/t/timeseries-label/209419/6 "2019-11-27T01:51:39Z")

</div>

ｎ台あるサーバーのディスク使用量のうち、前日との変化量のトップｍ件を・・・というのを簡単に実現できる方法はまだ思いつきませんが、こういうアプローチはどうでしょう？

Serialdiff Aggregationで前日との差異が取れることが分かりましたので、それを別のIndexにいったん格納する方法です。  
具体的には、Watcherによる定期実行で、前日との差分データを **別Index** に入れるようにし、Top10のデータの見せ方は新たに作成した別Indexの方から取得するイメージです。

WatcherでAggregation結果を別Indexに格納する、という方法は下記のブログで想像いただけるかと思います。５の解決策と書かれたところが該当します。

[https://shin0higuchi.hatenablog.com/entry/2017/06/20/022648](https://shin0higuchi.hatenablog.com/entry/2017/06/20/022648)  
（ via @shin-higuchi)

ご参考になれば。

---

<div class="post-metadata">

### Author: ![nakar-kashi](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/nakar-kashi/32/74374_2.png) [@nakar-kashi](https://discuss.elastic.co/u/nakar-kashi)
#### Post date: [November 27, 2019, 5:50am UTC](https://discuss.elastic.co/t/timeseries-label/209419/7 "2019-11-27T05:50:27Z")

</div>

@tsgkdt  
参考情報までありがとうございます！  
参考ブログも読ませていただきました。Dev Tools使うのが初めてだったのでてこずりましたが、何とか取得できました。  
ただ、watcherなんですが、こちら無償ライセンスを使用しており、  
「GET \_xpack」を実行してみたところ、下記出力されました。  
これは有償へのアップグレードが必要ということでしょうか？

GET \_xpack  
"watcher" : {  
"description" : "Alerting, Notification and Automation for the Elastic Stack",  
"available" : false,  
"enabled" : true  
}

---

<div class="post-metadata">

### Author: ![tsgkdt](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/tsgkdt/32/39151_2.png) [@tsgkdt](https://discuss.elastic.co/u/tsgkdt)
#### Post date: [November 27, 2019, 6:08am UTC](https://discuss.elastic.co/t/timeseries-label/209419/8 "2019-11-27T06:08:28Z")

</div>

確かにWatcher（アラート）は、ゴールド以上のサブスクリプションが必要ですね。  
[https://www.elastic.co/jp/subscriptions](https://www.elastic.co/jp/subscriptions)

しかし、 **お試し** で一定期間評価用に使うことはできるようになっています。  
[https://www.elastic.co/guide/en/elasticsearch/reference/current/start-trial.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/start-trial.html)

まずは試用してみて、やりたいことが実現できるかを確認していただき、  
あわせて代替手段の検討（cronやタスクスケジューラなどと組み合わせた何かを自作するなど）をするのが良いのではないでしょうか。

---

<div class="post-metadata">

### Author: ![nakar-kashi](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/nakar-kashi/32/74374_2.png) [@nakar-kashi](https://discuss.elastic.co/u/nakar-kashi)
#### Post date: [November 27, 2019, 6:17am UTC](https://discuss.elastic.co/t/timeseries-label/209419/9 "2019-11-27T06:17:22Z")

</div>

@tsgkdt  
ありがとうございます。  
開発機で実現できるか試用期間で評価して、有用であれば有償オプションの申し込みをしようと思います。  
出来ればkibana単体で実現したいですが、難しそうであれば組み合わせで実現させようと思います。  
完成系をお見せできなくて申し訳ございませんが、ご助力いただき有難うございました。

---

<div class="post-metadata">

### Author: ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)
#### Post date: [December 25, 2019, 6:17am UTC](https://discuss.elastic.co/t/timeseries-label/209419/10 "2019-12-25T06:17:24Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
