Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
InfluxDB+αで
時系列データの異常検知を可
視化してみた
  InsightTechnology Inc. 札幌R&Dセンター
InsightLab 笹谷 泰輔
自己紹介
$whoami
笹谷泰輔
● 2015年 北海道大学経済学大学院 修士課程卒
● 同年 Insight Technology 札幌開発センター 入社
● 2017年 InsightLab 発足とともに所属
● 現在の主な仕事
○ 新製品開発用の...
※注意事項
※注意事項
時系列DB、InfluxDBに関して、やってみたことをお話します。
 =>時系列データベースとは?どんな技術?等のネタは…
 =>次の別セッションにて弊社中村よりじっくりたっぷりお話いたします!
InfluxDB等をバリバリ使い倒し...
おしながき
・はじめに
・InfluxDBについて
・TICKスタックについて
・Grafanaについて
・環境説明&構築デモ(with Docker)
・まとめと告知(InfluxDBとDockerについて)
6
はじめに
7
発端
こんなことやることになりました。
コレクターの集めてきたデータを
①リアルタイムに異常検知する
②時系列DBに保管する
③時系列DBに保管した過去データを使って分析する
※なるべくコードを書かない
8
経緯
時系列DB調査をまずは
InfluxDBからスタート。
引用:https://www.influxdata.com/tick-stack-update-influxdb-release-candidate-kapacitor-chrono...
経緯
時系列DB調査をまずは
InfluxDBからスタート。
引用:https://www.influxdata.com/tick-stack-update-influxdb-release-candidate-kapacitor-chrono...
経緯
時系列DB調査をまずは
InfluxDBからスタート。
引用:https://www.influxdata.com/tick-stack-update-influxdb-release-candidate-kapacitor-chrono...
やりたいこと
時系列のデータの”いつもと違う”をリアルタイムに検知したい!
ただ一般的な統計量では異常判定されすぎ、警告が上がりすぎ…
Kapacitorのユーザー定義関数(UDF)の仕組みを利用すれば、
Pythonのモジュール化した我々のア...
InfluxDBと周辺ツールを使って、時系列データをリアルタイムに異
常検知し、警告タイミングが従来手法とどう異なるか、わかりやす
く可視化しよう。
13
InfluxDB+α
軽くご紹介
時系列データベースとInfluxDB
時系列データベース:
時間と値が組になった形でデータを格納するデータベース。
タイムスタンプが必須。
InfluxDBについて
15
時系列データベースとInfluxDB
時系列データベースの一種。タイムスタンプと値のほかに、属性(サーバーメトリク
ス名など)を持たせることができ、タグ・フィールドという形でキーを登録、それらにも
値を持たせることができる。
InfluxDBに...
用語
Line protocol: 下記の構造を指す。
<measurement>[, <tag-key> = tag_value] <field-key> = field_value timestamp
series:
上記measureme...
:
:
InfluxDBについて(当日誤りがあったので修正しました!)
Database
series
<measurement>[, <tag-key>=tag_value]
Database
18
<retention policy>
fi...
引用元: https://www.influxdata.com/time-series-platform/influxdb/
TICKスタックについて
19
引用元: https://www.influxdata.com/time-series-platform/influxdb/
TICKスタックについて
20
Telegraf:あつめる人
デフォルトで指定できる項目(抜粋)
system cpu,mem,disk,diskio,netstat, etc...
snmp Interface
ipmi_sensor ipmitoolを使った各種ステータス...
引用元: https://www.influxdata.com/time-series-platform/influxdb/
TICKスタックについて
InfluxDB:ためる人
22
引用元: https://www.influxdata.com/time-series-platform/influxdb/
TICKスタックについて
InfluxDB:ためる人
23
引用元: https://www.influxdata.com/time-series-platform/influxdb/
TICKスタックについて
Kapacitor:処理する人
24
引用元: https://www.influxdata.com/time-series-platform/influxdb/
TICKスタックについて
Chronograf
25
TICKスタックについて
Chronografは
こんな感じ
ですが…
引用:https://docs.influxdata.com/chronograf/v1.3/introduction/getting-started/
26
Chronograf
※ただしChronografには使いたい機能がない
今回はGrafana使います。
TICKスタックについて
27
Grafana
Elastic社のKibanaのフォーク、Graphite&InfluxDB可視化ツール。
Chronografと同様、InfluxDBに格納したseriesを可視化する。
Annotation機能を用いて異常判定を強調するため...
環境説明&構築デモ(By Docker)
Demoの概要と環境の説明
デモの概要:
● InfluxDBと必要な周辺ツールをDockerで環境構築する。
● Telegrafが収集したシステムリソースの時系列データを、InfluxDBに格納
する。
● 上記時系列データを格納しつつ、K...
構成
環境説明&構築デモ(By Docker)
31
用意したもの:
● Docker,docker-composeをインストールしたUbuntu16.04
● Kapacitor+ユーザ定義関数(UDF) コンテナ用ファイル群
○ UDF実行用のPython環境
○ UDF設定用のkapacit...
Dockerを使った環境構築から可視化まで
デモの流れ:
Docker,docker-composeが予め入った環境で、
Telegraf,InfluxDB,Kapacitor,Grafanaのコンテナー群を作成し、
InfluxDB,Kapa...
Dockerを使った環境構築から可視化まで
デモの流れ:
Docker,docker-composeが予め入った環境で、
Telegraf,InfluxDB,Kapacitor,Grafanaのコンテナー群を作成し、
InfluxDB,Kapa...
Dockerを使った環境構築から可視化まで
可視化までは持っていけましたが、学習期間が足りないので…
学習期間を経た環境をお見せします。(ネットワークが不調でなければ)
35
まとめ (InfluxDB+α/Docker)
InfluxDBを触ってみて
● 基本InfluxDBが定義するLineProtocolの形でデータを書き込む。
○ デフォルトでは、telegraf経由でJSON形式のデータを入れようとすると、値が数値( int)のとき
は、構造が分かる形で...
InfluxDBを触ってみて
● CLIでinfluxDBを扱うと、表示形式がUNIXepoch timeなので、データ確認のときわ
かりづらい。
=> -precision rfc3339オプション付きで起動。
● RDBの感覚でtableを...
KapacitorとTICKスクリプト
Grafanaを使う場合、TICKスクリプト内でAlertのNodeを通す必要が特にないので
=> AlertNode部分を消す
=> InfluxDBにデータが入らない…
=> AlertNodeを全デ...
Docker悲喜交交
Docker-composeのlinksが効かない…
コンテナー間の依存関係とネットワークを定義したかった。
  depends_onで定義。(docker-compose Ver2からdepends_on推奨)
40
おわりに
● InfluxDBとTICKstackは導入は簡単だが、操作・設定に特有の難しさがある。
● 意味のある異常検知、意味のある警告は、Kapacitorのユーザ定義関数を使えば
実装できる。
● OSSなので全て無料でできる。
● X...
告知
9/6 10:30~
Aルーム
まとめ
42
告知
9/7 10:30~
Dルーム
まとめ
43
告知
9/7 12:30~
Bルーム
まとめ
44
ご清聴ありがとうございました
Dockerのいいところ
● ハイパーバイザー型の仮想化に比べ、Linuxカーネルのコンテナー機能を使うの
で、ゲストOSの層がないぶん省リソースかつ起動が早い。
● Dockerfileがあれば、同じ環境が他のマシンでも再現できる。環境のポー...
Dockerを使った環境構築から可視化まで
あれ?デモ失敗?ネットワーク不調?
こんなこともあろうかと!
万が一デモができなかったときのために…
47
Dockerを使った環境構築から可視化まで
環境構築
48
Dockerを使った環境構築から可視化まで
構築後
49
Dockerを使った環境構築から可視化まで
学習済:
50
Upcoming SlideShare
Loading in …5
×

[db tech showcase Tokyo 2017] E21: InfluxDB+αで時系列データの異常検知を可視化してみた by 株式会社インサイトテクノロジー 笹谷泰輔

1,987 views

Published on

昨今、データベース技術は、多様な広がりを見せています。中でも時系列データベースは、サーバーのメトリクスやセンサーデータなど、身近なものから得られる時系列のデータの扱いに長けています。本セッションでは、最近ホットな時系列DBであるInfluxDBおよびTelegraf,Grafana,Kapacitorを用い、実際の環境構築からユーザ定義関数による時系列データの異常検知の可視化まで、全ての流れをセッション内でお見せします。

Published in: Technology
  • Be the first to comment

[db tech showcase Tokyo 2017] E21: InfluxDB+αで時系列データの異常検知を可視化してみた by 株式会社インサイトテクノロジー 笹谷泰輔

  1. 1. InfluxDB+αで 時系列データの異常検知を可 視化してみた   InsightTechnology Inc. 札幌R&Dセンター InsightLab 笹谷 泰輔
  2. 2. 自己紹介
  3. 3. $whoami 笹谷泰輔 ● 2015年 北海道大学経済学大学院 修士課程卒 ● 同年 Insight Technology 札幌開発センター 入社 ● 2017年 InsightLab 発足とともに所属 ● 現在の主な仕事 ○ 新製品開発用の環境構築・技術検証 ○ データベース性能検証 ○ 企業説明会札幌若手枠 ○ 札幌北海道グルメ担当(今の旬は鮭・鱒・花咲ガニ・トロサンマ・イワシ) 3
  4. 4. ※注意事項
  5. 5. ※注意事項 時系列DB、InfluxDBに関して、やってみたことをお話します。  =>時系列データベースとは?どんな技術?等のネタは…  =>次の別セッションにて弊社中村よりじっくりたっぷりお話いたします! InfluxDB等をバリバリ使い倒している方は、広い心でお聞きください。 5
  6. 6. おしながき ・はじめに ・InfluxDBについて ・TICKスタックについて ・Grafanaについて ・環境説明&構築デモ(with Docker) ・まとめと告知(InfluxDBとDockerについて) 6
  7. 7. はじめに 7
  8. 8. 発端 こんなことやることになりました。 コレクターの集めてきたデータを ①リアルタイムに異常検知する ②時系列DBに保管する ③時系列DBに保管した過去データを使って分析する ※なるべくコードを書かない 8
  9. 9. 経緯 時系列DB調査をまずは InfluxDBからスタート。 引用:https://www.influxdata.com/tick-stack-update-influxdb-release-candidate-kapacitor-chronograf-v0-10/ 9
  10. 10. 経緯 時系列DB調査をまずは InfluxDBからスタート。 引用:https://www.influxdata.com/tick-stack-update-influxdb-release-candidate-kapacitor-chronograf-v0-10/ 10
  11. 11. 経緯 時系列DB調査をまずは InfluxDBからスタート。 引用:https://www.influxdata.com/tick-stack-update-influxdb-release-candidate-kapacitor-chronograf-v0-10/ いけるやん! 11
  12. 12. やりたいこと 時系列のデータの”いつもと違う”をリアルタイムに検知したい! ただ一般的な統計量では異常判定されすぎ、警告が上がりすぎ… Kapacitorのユーザー定義関数(UDF)の仕組みを利用すれば、 Pythonのモジュール化した我々のアルゴリズムで異常検知ができそう。 12
  13. 13. InfluxDBと周辺ツールを使って、時系列データをリアルタイムに異 常検知し、警告タイミングが従来手法とどう異なるか、わかりやす く可視化しよう。 13
  14. 14. InfluxDB+α 軽くご紹介
  15. 15. 時系列データベースとInfluxDB 時系列データベース: 時間と値が組になった形でデータを格納するデータベース。 タイムスタンプが必須。 InfluxDBについて 15
  16. 16. 時系列データベースとInfluxDB 時系列データベースの一種。タイムスタンプと値のほかに、属性(サーバーメトリク ス名など)を持たせることができ、タグ・フィールドという形でキーを登録、それらにも 値を持たせることができる。 InfluxDBについて 16
  17. 17. 用語 Line protocol: 下記の構造を指す。 <measurement>[, <tag-key> = tag_value] <field-key> = field_value timestamp series: 上記measurement + tag ひとまとまりを指す。 measurement: RDBでいうところのテーブル名に当たる。 tag: Indexされるキーおよび値。(オプショナル) field: Indexされないキーおよび値。(必須) timestamp: タイムスタンプ。省略すると、データが格納された時間が入る。 InfluxDBについて 17
  18. 18. : : InfluxDBについて(当日誤りがあったので修正しました!) Database series <measurement>[, <tag-key>=tag_value] Database 18 <retention policy> field and timestamp <field-key>=field_value timestamp series <measurement>[, <tag-key>=tag_value] <retention policy> field and timestamp <field-key>=field_value timestamp series <measurement>[, <tag-key>=tag_value] <retention policy> field and timestamp <field-key>=field_value timestamp series <measurement>[, <tag-key>=tag_value] <retention policy> field and timestamp <field-key>=field_value timestamp
  19. 19. 引用元: https://www.influxdata.com/time-series-platform/influxdb/ TICKスタックについて 19
  20. 20. 引用元: https://www.influxdata.com/time-series-platform/influxdb/ TICKスタックについて 20
  21. 21. Telegraf:あつめる人 デフォルトで指定できる項目(抜粋) system cpu,mem,disk,diskio,netstat, etc... snmp Interface ipmi_sensor ipmitoolを使った各種ステータス mysql ログファイルサイズやパフォーマン ススキーマのロック待ちなど docker 各コンテナーに割り振られたリソー ス minecraft マルチプレイサーバのプレイヤーと スコアボードのステータス TICKスタックについて 21
  22. 22. 引用元: https://www.influxdata.com/time-series-platform/influxdb/ TICKスタックについて InfluxDB:ためる人 22
  23. 23. 引用元: https://www.influxdata.com/time-series-platform/influxdb/ TICKスタックについて InfluxDB:ためる人 23
  24. 24. 引用元: https://www.influxdata.com/time-series-platform/influxdb/ TICKスタックについて Kapacitor:処理する人 24
  25. 25. 引用元: https://www.influxdata.com/time-series-platform/influxdb/ TICKスタックについて Chronograf 25
  26. 26. TICKスタックについて Chronografは こんな感じ ですが… 引用:https://docs.influxdata.com/chronograf/v1.3/introduction/getting-started/ 26
  27. 27. Chronograf ※ただしChronografには使いたい機能がない 今回はGrafana使います。 TICKスタックについて 27
  28. 28. Grafana Elastic社のKibanaのフォーク、Graphite&InfluxDB可視化ツール。 Chronografと同様、InfluxDBに格納したseriesを可視化する。 Annotation機能を用いて異常判定を強調するために使用。 実際の画面はこの後のデモでお見せします。 TICKスタックについて 28
  29. 29. 環境説明&構築デモ(By Docker)
  30. 30. Demoの概要と環境の説明 デモの概要: ● InfluxDBと必要な周辺ツールをDockerで環境構築する。 ● Telegrafが収集したシステムリソースの時系列データを、InfluxDBに格納 する。 ● 上記時系列データを格納しつつ、Kapacitorとユーザ定義関数を用いてリ アルタイムで異常判定する。(※学習期間の前提あり) ● 異常判定されたタイミングをGrafanaで可視化する。 環境説明&構築デモ(By Docker) 30
  31. 31. 構成 環境説明&構築デモ(By Docker) 31
  32. 32. 用意したもの: ● Docker,docker-composeをインストールしたUbuntu16.04 ● Kapacitor+ユーザ定義関数(UDF) コンテナ用ファイル群 ○ UDF実行用のPython環境 ○ UDF設定用のkapacitor.conf ○ Pythonパッケージ化した異常検知モジュール ○ UDFタスク定義用TICKスクリプト ● docker-compose用のymlファイル ● Grafanaの設定用JSONファイル ● Kapacitor以外のコンテナーのimageファイル(ネットワーク事情を考慮) 環境説明&構築デモ(By Docker) 32
  33. 33. Dockerを使った環境構築から可視化まで デモの流れ: Docker,docker-composeが予め入った環境で、 Telegraf,InfluxDB,Kapacitor,Grafanaのコンテナー群を作成し、 InfluxDB,Kapacitor,Grafanaの設定を行い、可視化。 33
  34. 34. Dockerを使った環境構築から可視化まで デモの流れ: Docker,docker-composeが予め入った環境で、 Telegraf,InfluxDB,Kapacitor,Grafanaのコンテナー群を作成し、 InfluxDB,Kapacitor,Grafanaの設定を行い、可視化。 DEMO開始 34
  35. 35. Dockerを使った環境構築から可視化まで 可視化までは持っていけましたが、学習期間が足りないので… 学習期間を経た環境をお見せします。(ネットワークが不調でなければ) 35
  36. 36. まとめ (InfluxDB+α/Docker)
  37. 37. InfluxDBを触ってみて ● 基本InfluxDBが定義するLineProtocolの形でデータを書き込む。 ○ デフォルトでは、telegraf経由でJSON形式のデータを入れようとすると、値が数値( int)のとき は、構造が分かる形でデータが入るが、値が文字列のときは無視される。 ○ telegrafのconfファイルで使用するtag keyを予め登録しておくと、 JSONのトップレベルにある key = 文字列 は、tag key = tag valueとして認識される。 まとめ 37
  38. 38. InfluxDBを触ってみて ● CLIでinfluxDBを扱うと、表示形式がUNIXepoch timeなので、データ確認のときわ かりづらい。 => -precision rfc3339オプション付きで起動。 ● RDBの感覚でtableを作ってデータを入れよう! => そんなものはない。InfluxDBはschemaless。 => insertすると同時に、measurementが作成される。 まとめ 38
  39. 39. KapacitorとTICKスクリプト Grafanaを使う場合、TICKスクリプト内でAlertのNodeを通す必要が特にないので => AlertNode部分を消す => InfluxDBにデータが入らない… => AlertNodeを全データが素通りするように記述してやっとGrafana用 にデータが入った。 AlertNodeは必須のよう。 まとめ 39
  40. 40. Docker悲喜交交 Docker-composeのlinksが効かない… コンテナー間の依存関係とネットワークを定義したかった。   depends_onで定義。(docker-compose Ver2からdepends_on推奨) 40
  41. 41. おわりに ● InfluxDBとTICKstackは導入は簡単だが、操作・設定に特有の難しさがある。 ● 意味のある異常検知、意味のある警告は、Kapacitorのユーザ定義関数を使えば 実装できる。 ● OSSなので全て無料でできる。 ● Xamarinはいいぞ。 Dockerはいいぞ。 ○ 環境構築の試行錯誤はDocker,docker-composeで軽くサクサクできる。 ■ Dockerコンテナーの公式イメージは、シンプルな構成ならすぐ動くように できている。 ● InfluxDBについてもっと知りたい | 異常検知モジュールについて詳しく知りたい方 は… 41
  42. 42. 告知 9/6 10:30~ Aルーム まとめ 42
  43. 43. 告知 9/7 10:30~ Dルーム まとめ 43
  44. 44. 告知 9/7 12:30~ Bルーム まとめ 44
  45. 45. ご清聴ありがとうございました
  46. 46. Dockerのいいところ ● ハイパーバイザー型の仮想化に比べ、Linuxカーネルのコンテナー機能を使うの で、ゲストOSの層がないぶん省リソースかつ起動が早い。 ● Dockerfileがあれば、同じ環境が他のマシンでも再現できる。環境のポータビリティ が高い。 ● DockerHubやDockerレジストリに作成したイメージをpush,pullして使える。 ○ メジャーなアプリケーションのイメージなら、既に構築済のものがほとんどなので、わざわざ自作す る手間もない。 ● 開発としては:コンテナーであれば環境を作るも壊すもサクサクできる。 ● 運用としては:マイクロサービス化できる。切り分けてアップデート可能。 46
  47. 47. Dockerを使った環境構築から可視化まで あれ?デモ失敗?ネットワーク不調? こんなこともあろうかと! 万が一デモができなかったときのために… 47
  48. 48. Dockerを使った環境構築から可視化まで 環境構築 48
  49. 49. Dockerを使った環境構築から可視化まで 構築後 49
  50. 50. Dockerを使った環境構築から可視化まで 学習済: 50

×