[data analytics showcase] b12: サーバー1,000台を監視するということ by...

Post on 08-Feb-2017

251 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1000台のサーバをリアルタイムに分析するということ

利用広がるSNMP監視

SNMP table: HOST-RESOURCES-MIB::hrStorageTable

hrStorageIndex hrStorageType hrStorageDescr hrStorageAllocationUnits hrStorageSize hrStorageUsed1 HOST-RESOURCES-TYPES::hrStorageFixedDisk C:¥ Label:Acer Serial Number dc55ed43 4096 Bytes 118146047 412409782 HOST-RESOURCES-TYPES::hrStorageCompactDisc D:¥ 0 Bytes 0 03 HOST-RESOURCES-TYPES::hrStorageRemovableDisk F:¥ Label:TOSHIBA Serial Number 893867a8 16384 Bytes 943873 104656

4 HOST-RESOURCES-TYPES::hrStorageVirtualMemory Virtual Memory 65536 Bytes 149636 460185 HOST-RESOURCES-TYPES::hrStorageRam Physical Memory 65536 Bytes 129156 43369

hrStorageIndex 3

hrStorageType HOST-RESOURCES-

TYPES::hrStorageRemovableDisk

hrStorageDescr F:¥ Label:TOSHIBA Serial Number 893867a8

hrStorageAllocationUnits 16384 Bytes

hrStorageSize 943873

hrStorageUsed 104656

ストレージ情報

SNMP table: HOST-RESOURCES-MIB::hrSWRunTable

hrSWRunIndex hrSWRunName hrSWRunPath hrSWRunParameters hrSWRunStatus1 "init" "/sbin/init" "" runnable2 "kthreadd" "kthreadd" "" runnable3 "migration/0" "migration/0" "" runnable

4 "ksoftirqd/0" "ksoftirqd/0" "" runnable5 "stopper/0" "stopper/0" "" runnable6 "watchdog/0" "watchdog/0" "" runnable

5221 "rsyslogd" "/sbin/rsyslogd" "-i /var/run/syslogd.pid -c 5" runnable5240 "httpd" "/usr/sbin/httpd" "" runnable5252 "crond" "crond" "" runnable

プロセス情報

hrSWRunIndex 5313

hrSWRunName "sendmail"

hrSWRunPath "sendmail: Queue runner@01:00:00 for

/var/spool/cli..."

hrSWRunParameters ""

hrSWRunStatus runnable

秒間 10,000 を超えるデータ量って?

秒間 10,000 を超える監視項目

データをストリームで扱い分析する

1日100件の警告では無意味

1億件/日からどうやって100件を出すか

正規分布されたデータを自動判別・異常検知

<fixme>

異常検知と変化検知 (機械学習プロフェッショナルシリーズ)

より

StarBED 環境 insert 状況

insert query update delete getmore command flushes vsize res qr|qw ar|aw netIn netOut conn time

3937 *0 *0 *0 0 2|0 0 32.3G 12.1G 0|0 0|3 836k 24k 16 21:55:34

5288 *0 *0 *0 0 2|0 0 32.3G 12.0G 0|0 0|4 1m 25k 16 21:55:35

5306 *0 *0 *0 0 3|0 0 32.3G 12.1G 0|0 0|5 1m 25k 16 21:55:36

4144 *0 *0 *0 0 2|0 0 32.3G 12.1G 0|0 0|3 876k 25k 16 21:55:37

4109 *0 *0 *0 0 3|0 0 32.3G 12.0G 0|0 0|3 881k 25k 16 21:55:38

2989 *0 *0 *0 0 2|0 0 32.3G 12.3G 0|0 0|4 631k 24k 16 21:55:39

4330 *0 *0 *0 0 2|0 0 32.3G 11.9G 0|0 0|7 930k 24k 16 21:55:40

5166 *0 *0 *0 0 3|0 0 32.3G 11.8G 0|0 0|4 1m 24k 16 21:55:41

5653 *0 *0 *0 0 2|0 0 32.3G 11.7G 0|0 0|1 1m 24k 16 21:55:42

4755 *0 *0 *0 0 3|0 0 32.3G 11.8G 0|0 0|4 1m 25k 16 21:55:43

insert query update delete getmore command flushes vsize res qr|qw ar|aw netIn netOut conn time

4306 *0 *0 *0 0 3|0 0 32.3G 11.9G 0|0 0|3 961k 25k 16 21:55:44

4124 *0 *0 *0 0 2|0 0 32.3G 11.9G 0|0 0|1 895k 25k 16 21:55:45

2204 *0 *0 *0 0 3|0 0 32.3G 11.8G 0|0 0|4 516k 23k 14 21:55:46

4983 *0 *0 *0 0 2|0 0 32.3G 11.9G 0|0 0|2 1m 23k 14 21:55:47

5356 *0 *0 *0 0 3|0 0 32.3G 12.0G 0|0 0|5 1m 23k 14 21:55:48

6000 *0 *0 *0 0 2|0 0 32.3G 12.0G 0|0 0|6 1m 23k 14 21:55:49

5103 *0 *0 *0 0 2|0 0 32.3G 12.1G 0|0 0|5 1m 23k 14 21:55:50

6356 *0 *0 *0 0 3|0 0 32.3G 12.2G 0|0 0|5 1m 23k 14 21:55:51

5662 *0 *0 *0 0 2|0 0 32.3G 12.2G 0|0 0|3 1m 23k 14 21:55:52

5207 *0 *0 *0 0 3|0 0 32.3G 12.2G 0|0 0|4 1m 23k 14 21:55:53

同等構成の環境でどれくらいスケールするか確認

mongoDBはこんな感じでメモリを使ってます

mmap (insert)

mmap (aggregate)

WiredTiger (insert) ※cachesize = 1GB

WiredTiger (aggregate) ※cachesize = 1GB

StrageEngineが選択できるようになって、メモリ管理が自前でできるようになった。

Current Fan Temperature Voltage

ifHCInBroadca

stPktsifHCInOctets

ifHCInUcastPkt

s

ifHCInMulticast

Pkts

...

IPMI~Hardware_Resource~Current

IPMI~Hardware_Resource~Fan

IPMI~Hardware_Resource~Temperature

IPMI~Hardware_Resource~Voltage

...

SNMP~IF-MIB~ifHCInBroadcastPkts

SNMP~IF-MIB~ifHCInMulticastPkts

SNMP~IF-MIB~ifHCInOctets

SNMP~IF-MIB~ifHCInUcastPkts

...

All

"time" : 1262271600,

"major" : "MAJORNAME1",

"node" : "NODENAME1",

"item" : "ITEMNAME1",

"d" : [

{

"p" : "PARAMETER1",

"v" : 1.1

},

...

{

"p" : "PARAMETER3",

"v" : 3.3

}

]

"time" : 1262271600,

"major" : "MAJORNAME1",

"node" : "NODENAME1",

"item" : "ITEMNAME1",

"d" : [

{

"p" : "PARAMETER1",

"v" : 1.1

},

...

{

"p" : "PARAMETER3",

"v" : 3.3

}

]

比較

詰め込み型

個別型

検索文:db.daily.aggregate(

{'$match':{'major':'MAJORNAME3'

,'node':{'$in':['NODENAME7','NODENAME17','NODENAME27','NODENAME37','NODENAME47']}

,'time':{'$gte':1262314800,'$lt':1262401200}}} // 2010-01-01 12:00:00 ~ 2010-01-02 12:00:00

,{'$unwind':'$d'}

,{'$match':{'d.p':'PARAMETER2'}}

,{'$sort':{'time':1}}

,{'$group':{'_id':{'p':'$d.p','node':'$node'},'d':{'$push':{'time':'$time','v':'$d.v'}}}}

,{'$sort':{'_id.node':1}}

,{'$group':{'_id':{'p':'$_id.p'},'d':{'$push':{'node':'$_id.node','d':'$d'}}}}

)

データ:● major 種類 = 100、node 種類 = 100、item 種類 = 2

● 1組みのデータについて、time = 2880 ( 1 日 1 分に 1 データとして 2 日分 )

● インデックスは、(詰め込み型)major+node、(個別型) node に昇順で作成

検索:● major = 全体の 1/100、node = 全体の 1/20、timeレンジ = 全体の 1/2、綜合して、全体の 0.02 %

程度のデータを集計。

詰め込み型 vs 個別型

詰め込み型 個別型 (1/100)

データ件数 57,600,000 576,000

データサイズ 13183 MB 131 MB

インデックスサイズ 2270 MB 15 MB

インデックスなしでのクエリー時間 1m27.123s 0m3.567s

インデックスありでのクエリー時間 (初回) 1m21.860s 0m0.717s

インデックスありでのクエリー時間 (続けて2回目) 0m0.642s 0m0.628s

分析基盤

ソートするとデータサイズは割といい

ソートしないとデータサイズはほんとうにわるい

InfiniDBは、入れ方まちがえるとこうなります!当たり前ですが。。。

InfiniDB 使い方間違えたらこうなる!

+------------+

| count(*) |

+------------+

| 8083961328 |

+------------+

databaseSizeReport: /home/icm/insight/lib/libz.so.1: no version information available (required by

/usr/lib64/libxml2.so.2)

Schema Table Column Size

snmp raw major (token) 3.125771 GB

snmp raw major (string) 0.949005 GB

snmp raw minor (token) 3.230759 GB

snmp raw minor (string) 0.949005 GB

snmp raw date 3.125763 GB

snmp raw time 1.564735 GB

snmp raw offset 1.564728 GB

snmp raw node (token) 21.396988 GB

snmp raw node (string) 23.714630 GB

snmp raw item (token) 3.350883 GB

snmp raw item (string) 0.952698 GB

snmp raw p1name (token) 3.230728 GB

snmp raw p1name (string) 0.949005 GB

snmp raw p1value 2.500069 GB

snmp raw p2name (token) 3.230736 GB

snmp raw p2name (string) 0.949005 GB

snmp raw p2value 2.591858 GB

snmp raw p3name (token) 3.125763 GB

snmp raw p3name (string) 0.949005 GB

snmp raw p3value 1.564728 GB

Total 83.015862 GB

基本中の基本。ソートしてないとこうなる!

InfiniDB 使い方間違えたらこうなる!

+------------+

| count(*) |

+------------+

| 1063563513 |

+------------+

databaseSizeReport: /home/icm/insight/lib/libz.so.1: no version information available (required by /usr/lib64/libxml2.so.2)

Schema Table Column Size

snmp raw_201608 node (token) 0.462891 GB

snmp raw_201608 node (string) 0.125488 GB

snmp raw_201608 nodehash 0.462906 GB

snmp raw_201608 majorminor (token) 0.482422 GB

snmp raw_201608 majorminor (string) 0.125488 GB

snmp raw_201608 majorminorhash 0.504456 GB

snmp raw_201608 item (token) 0.465240 GB

snmp raw_201608 item (string) 0.125977 GB

snmp raw_201608 time 0.416954 GB

snmp raw_201608 offset 0.231689 GB

snmp raw_201608 p1name (token) 0.482460 GB

snmp raw_201608 p1name (string) 0.125488 GB

snmp raw_201608 p1value 0.460922 GB

snmp raw_201608 p1alertavg 0.300049 GB

snmp raw_201608 p1alertstddev 0.295891 GB

snmp raw_201608 p1invalid 0.277184 GB

snmp raw_201608 alertidhash (token) 4.030823 GB

snmp raw_201608 alertidhash (string) 11.750488 GB

snmp raw_201608 insdate 0.462891 GB

snmp raw_201608 timehour 0.258949 GB

Total 21.848656 GB

ユニークキーをInfiniDB

に入れようとしたら圧縮されなかった。当然!

InfiniDBデータ圧縮具合の確認

試験データとして、86,400,000 件 ( テスト環境 SNMP 1 日分ののおおよそ ⅔ 程度 ) を登録。

InfiniDB テーブル

+----------------+--------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+----------------+--------------+------+-----+---------+-------+

| node | varchar(40) | YES | | NULL | |

| nodehash | char(8) | YES | | NULL | |

| majorminor | varchar(64) | YES | | NULL | |

| majorminorhash | char(8) | YES | | NULL | |

| item | varchar(160) | YES | | NULL | |

| time | int(11) | YES | | NULL | |

| offset | float | YES | | NULL | |

| p1name | varchar(80) | YES | | NULL | |

| p1value | float | YES | | NULL | |

| p1alertavg | float | YES | | NULL | |

| p1alertstddev | float | YES | | NULL | |

| p1invalid | int(11) | YES | | 0 | |

...

| p8name | varchar(80) | YES | | NULL | |

| p8value | float | YES | | NULL | |

| p8alertavg | float | YES | | NULL | |

| p8alertstddev | float | YES | | NULL | |

| p8invalid | int(11) | YES | | 0 | |

| insdate | datetime | YES | | NULL | |

| timehour | int(11) | YES | | NULL | |

+----------------+--------------+------+-----+---------+-------+

データサイズ

サイズ インポート用ファイルと比べての割合

インポート用ファイル(csv形式のplain text)

40.56 GB

InfiniDB データファイル(アロケート分)

6.89 GB 約 1/6

実データ(カラム圧縮された後のサイズ)

4.96 GB 約 1/8

ソートしないとエクステントマップも無意味ない

ソートされていない

mysql> select count(*) from snmp.raw_201609 where nodehash='a94517c0' /*'192.10.12.101'*/ and majorminorhash='88abe3de' /*'IP-

MIB~ipSystemStatsInBcastPkts'*/ and time>=1472655600 and time<1473087600;

+----------+

| count(*) |

+----------+

| 1383 |

+----------+

1 row in set, 1 warning (6.79 sec)

(トレース情報)

mysql> select calgettrace();

+-----------------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------------------+

| calgettrace()

|

+-----------------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------------------+

|

Desc Mode Table TableOID ReferencedColumns PIO LIO PBE Elapsed Rows

BPS PM raw_201609 7460 (majorminorhash,nodehash,time) 857296 530026 1272528 6.645 44032

TAS UM - - - - - - 6.481 1

|

+-----------------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------------------+

検索 (9/1から9/5までのデータ数をカウント)

ソートされている

mysql> select count(*) from snmp.raw_201609 where nodehash='a94517c0' /*'192.10.12.101'*/ and majorminorhash='88abe3de' /*'IP-

MIB~ipSystemStatsInBcastPkts'*/ and time>=1474383600 and time<1474815600;

+----------+

| count(*) |

+----------+

| 1437 |

+----------+

1 row in set, 1 warning (3.15 sec)

(トレース情報)

mysql> select calgettrace();

+--------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------

----+

| calgettrace()

|

+--------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------

----+

|

Desc Mode Table TableOID ReferencedColumns PIO LIO PBE Elapsed Rows

BPS PM raw_201609 7460 (majorminorhash,nodehash,time) 388388 247396 1362640 3.115 21504

TAS UM - - - - - - 3.084 1

|

+--------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------

----+

検索 (9/21から9/25までのデータ数をカウント)

ソートしてないときは、6.79

sec

ソートしてないときは、857,296 /

530,026

エクステントマップのTips

Tips1:

文字列キーでエクステントマップを聞かせたい場合は、長さに注意。char 型で 8 バイト、varchar 型で 7 バイトまでのものしかエクステントマップが利かない! Tips2:

1エクステントのデータ件数が 8,000,000 件 (=行)

ということは、定型的にその数の中で繰り返し発生するようなデータについては、エクステントマップが利かない!

3,000,000,000 件を10秒強で集計する

mysql> select majorminor,count(*),min(p1value),max(p1value),avg(p1value),stddev(p1value) from

snmp.raw_201609 where nodehash = '934af399' /*192.10.72.105*/ group by 1;

...

229 rows in set (14.77 sec)

新技術が可能にするセキュリティツールの可能性

内部漏洩が80%

http://www.secomtrust.net/infomeasure/rouei/column1.html

ICMカメラの仕組み

Unknown person!

OpenFaceとは Free and open source face recognition with deep neural networks.

http://cmusatyalab.github.io/openface/

利用が広がるカメラ

コンビニでのマーケティングカメラ利用例http://itpro.nikkeibp.co.jp/article/Watcher/20140519/557622/

マルチデータベース環境におけるSQL分析

プロアクティブ監視が実現するハードウェアダウンタイムの削減

IPMIの主な監視項目

SMART監視で見るディスクの故障パターン例

ご清聴ありがとうございました。

top related