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.

[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎

695 views

Published on

企業が運用するサーバーの台数は仮想サーバーの普及などに伴い爆発的に増えており、効率的な運用管理が課題となっています。ICM(Insight Cloud Manager)は、1,000台超のサーバーから大量に発生するSNMPやIPMI、センサーデータを収集し、不正なアクセスの検知から監視カメラ情報の確認、ハード障害予測までもワンストップで実現可能な統合監視基盤です。本セッションでは、分析基盤構築に苦労した点やMongoDBやInfiniDBの活用による実現方法などについて解説するとともに、日本最大規模検証環境StarBEDで実際のサーバー1,000台をリアルタイム監視するデモをご覧いただきます。

Published in: Technology
  • Be the first to comment

[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎

  1. 1. 1000台のサーバをリアルタイム に分析するということ
  2. 2. 利用広がるSNMP監視
  3. 3. SNMP table: HOST-RESOURCES-MIB::hrStorageTable hrStorageIndex hrStorageType hrStorageDescr hrStorageAllocationUnits hrStorageSize hrStorageUsed 1 HOST-RESOURCES-TYPES::hrStorageFixedDisk C:¥ Label:Acer Serial Number dc55ed43 4096 Bytes 118146047 41240978 2 HOST-RESOURCES-TYPES::hrStorageCompactDisc D:¥ 0 Bytes 0 0 3 HOST-RESOURCES-TYPES::hrStorageRemovableDisk F:¥ Label:TOSHIBA Serial Number 893867a8 16384 Bytes 943873 104656 4 HOST-RESOURCES-TYPES::hrStorageVirtualMemory Virtual Memory 65536 Bytes 149636 46018 5 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 ストレージ情報
  4. 4. SNMP table: HOST-RESOURCES-MIB::hrSWRunTable hrSWRunIndex hrSWRunName hrSWRunPath hrSWRunParameters hrSWRunStatus 1 "init" "/sbin/init" "" runnable 2 "kthreadd" "kthreadd" "" runnable 3 "migration/0" "migration/0" "" runnable 4 "ksoftirqd/0" "ksoftirqd/0" "" runnable 5 "stopper/0" "stopper/0" "" runnable 6 "watchdog/0" "watchdog/0" "" runnable 5221 "rsyslogd" "/sbin/rsyslogd" "-i /var/run/syslogd.pid -c 5" runnable 5240 "httpd" "/usr/sbin/httpd" "" runnable 5252 "crond" "crond" "" runnable プロセス情報 hrSWRunIndex 5313 hrSWRunName "sendmail" hrSWRunPath "sendmail: Queue runner@01:00:00 for /var/spool/cli..." hrSWRunParameters "" hrSWRunStatus runnable
  5. 5. 秒間 10,000 を超えるデータ量って?
  6. 6. 秒間 10,000 を超える監視項目
  7. 7. データをストリームで扱い分析する
  8. 8. 1日100件の警告では無意味
  9. 9. 1億件/日からどうやって100件を出すか
  10. 10. 正規分布されたデータを自動判別・異常検知
  11. 11. <fixme>
  12. 12. 異常検知と変化検知 (機械学習プロフェッショナルシリーズ)
  13. 13. 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
  14. 14. 同等構成の環境でどれくらいスケールするか確認
  15. 15. mongoDBはこんな感じでメモリを使ってます mmap (insert) mmap (aggregate) WiredTiger (insert) ※cachesize = 1GB WiredTiger (aggregate) ※cachesize = 1GB StrageEngineが選択できるようになって 、メモリ管理が自前でできるようになっ た。
  16. 16. Current Fan Temperature Voltage ifHCInBroadca stPkts ifHCInOctets 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 } ] 比較 詰め込み型 個別型
  17. 17. 検索文: 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 % 程度のデータを集計。
  18. 18. 詰め込み型 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
  19. 19. 分析基盤
  20. 20. ソートするとデータサイズは割といい
  21. 21. ソートしないと データサイズはほんとうにわるい InfiniDBは、入れ方まちがえるとこうなります! 当たり前ですが。。。
  22. 22. 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 基本中の基本。 ソートしてない とこうなる!
  23. 23. 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 に入れようとしたら圧縮 されなかった。 当然!
  24. 24. 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
  25. 25. ソートしないとエクステントマップも無意味ない
  26. 26. ソートされていない
  27. 27. 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までのデータ数をカウント)
  28. 28. ソートされている
  29. 29. 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
  30. 30. エクステントマップのTips Tips1: 文字列キーでエクステントマップを聞かせたい場合 は、長さに注意。 char 型で 8 バイト、varchar 型で 7 バイトま でのものしかエクステントマップが利かない! Tips2: 1エクステントのデータ件数が 8,000,000 件 (=行) ということは、定型的にその数の中で繰り返し発生す るようなデータについては、エクステントマップが利 かない!
  31. 31. 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)
  32. 32. 新技術が可能にする セキュリティツールの 可能性
  33. 33. 内部漏洩が80% http://www.secomtrust.net/infomeasure/rouei/column1.html
  34. 34. ICMカメラの仕組み Unknown person!
  35. 35. OpenFaceとは Free and open source face recognition with deep neural networks. http://cmusatyalab.github.io/openface/
  36. 36. 利用が広がるカメラ コンビニでのマーケティングカメラ利用 例http://itpro.nikkeibp.co.jp/article/Watcher/20140519/557622/
  37. 37. マルチデータベース環境における SQL分析
  38. 38. プロアクティブ監視が実現する ハードウェアダウンタイムの削減
  39. 39. IPMIの主な監視項目
  40. 40. SMART監視で見るディスクの故障パターン例
  41. 41. ご清聴ありがとうございました。

×