際際滷

際際滷Share a Scribd company logo
Apache Spark+Zeppelinで
アドホックなネットワ`ク盾裂
Tetsuhiro Sato
徭失B初
? 恃儲 學寄tetz
? 蝶ネットワ`クベンダで、SDN┐辰櫃ぃ碧並をして
ます
? ネットワ`クプログラマビリティ茶氏の二鮫、\
をしてます
http://network-programmability.connpass.com/
2
畠悶
3
Netflow
コレクタ
徭恬
? Apache SparkとApache Zeppelinでデ`タ
アナリストちっくにアドホックにネットワ`クトラ
フィックを盾裂するっていう、ゆるふわネタ
屡撹辛晒ツ`ルとの`い
? さまざまなQ泣からアドホックに辛晒できる
? 豚g
? 鹿s┘ぅ鵐食`フェ`ス、ユ`ザ、サ`バ、アプリケ`
ション
? 貧鹿sのMみ栽わせ
? グラフ侘塀┛堯▲┘螢◆辧x柊
? とはいえ、ネットワ`クトラフィックのたいQ泣
なんて、そんな謹ではないかも。。。
4
徭恬Netflowコレクタ
5
flow record FLOW-RECORD
match ipv4 protocol
match ipv4 source address
match ipv4 destination address
match transport source-port
match transport destination-port
match application name
collect counter bytes
collect counter packets
collect timestamp absolute first
collect timestamp absolute last
テンプレ`トフロ`セットから
デ`タフロ`セットを啜弔暴睥し、
m俳なフィ`ルド兆になる
https://github.com/tetsusat/fnfc
ル`タのO協
ちなみに
? fluentd-plugin-netflow + MongoDB Output
Pluginでも寄悶揖じことができます
6
fluentd-plugin-
netflow
恬撹されるレコ`ドの撹およびフィ`ルド兆が飛孤`うので、m卷iみ紋え
る駅勣があります
Stratio Spark-MongoDB
? MongoDB貧のコレクションにしてSpark SQLのI尖
を辛嬬にするライブラリ
7
https://github.com/Stratio/Spark-MongoDB
? MongoDBのnetflowデ`タベ`スのrecordsコレクションをSpark DataFrame
へiみzみ
Apache Spark + Apache Zeppelin 1/6
? MongoDBからiみzんだデ`タフレ`ム
org.apache.spark.sql.DataFrameのスキ`マ
Apache Spark + Apache Zeppelin 2/6
? アプリケ`ション阿離丱ぅ畔
Apache Spark + Apache Zeppelin 3/6
%sql
SELECT record.application_name, sum(record.client_bytes) bytes FROM records GROUP BY record.application_name
? アプリケ`ション阿離丱ぅ畔WHERE鞘をパラメ`タ晒
Apache Spark + Apache Zeppelin 4/6
%sql
SELECT record.application_name, sum(record.client_bytes) bytes FROM records
WHERE record.ipv4_src_addr="${src}" AND record.ipv4_dst_addr="${dst}"
GROUP BY record.application_name
? }泣
? 宥佚のタイミングは、セッション阿?なので、そのままでは鹿sできない
? 鹿sされないY惚、グラフ宙鮫ライブラリのI尖しきれないほどのレコ`ド
r狼双デ`タをグラフ晒するHのn}
? 盾Q貨
? セッションのタイミングを蒙協g侯のタイムスロットに護り輝てる
? 30蛍阿房s
タイムスロットへ護り輝て
timestamp bytes packets
2016-04-01 00:11:11 1111 111
2016-04-01 00:22:22 2222 222
2016-04-01 00:33:33 3333 333
2016-04-01 00:44:44 4444 444
2016-04-01 00:55:55 5555 555
2016-04-01 01:07:06 6666 666
圷デ`タ
1指朕の
SQLクエリ`
のY惚
2指朕の
SQLクエリ`
のY惚
Timeslot双
の弖紗
Timeslot双で
Bytes&Packet双
を鹿s
timestamp bytes packets timeslot
2016-04-01 00:11:11 1111 111 2016-04-01 000000
2016-04-01 00:22:22 2222 222 2016-04-01 000000
2016-04-01 00:33:33 3333 333 2016-04-01 003000
2016-04-01 00:44:44 4444 444 2016-04-01 003000
2016-04-01 00:55:55 5555 555 2016-04-01 003000
2016-04-01 01:07:06 6666 666 2016-04-01 010000
bytes packets timeslot
3333 333 2016-04-01 000000
13332 1332 2016-04-01 00:30:00
6666 666 2016-04-01 01:00:00
? 蒙協の1晩で30蛍阿離丱ぅ畔を鹿
Apache Spark + Apache Zeppelin 5/6
%sql
SELECT from_unixtime(m.timeslot*(30*60)) dtime, sum(m.bytes) bytes
FROM (
SELECT record.client_bytes bytes, floor(unix_timestamp(record.absolute_first)/(30*60)) timeslot
FROM records
WHERE record.absolute_first >= "2016-03-24" AND record.absolute_first < "2016-03-25^
) AS m
GROUP BY m.timeslot ORDER BY m.timeslot
? アプリケ`ション阿30蛍阿房s
タイムスロットへ護り輝て2
timestamp bytes packets app
2016-04-01 00:11:11 1111 111 http
2016-04-01 00:22:22 2222 222 http
2016-04-01 00:33:33 3333 333 ftp
2016-04-01 00:44:44 4444 444 tftp
2016-04-01 00:55:55 5555 555 http
2016-04-01 01:07:06 6666 666 ftp
timestamp bytes packets app timeslot
2016-04-01 00:11:11 1111 111 http 2016-04-01 000000
2016-04-01 00:22:22 2222 222 http 2016-04-01 000000
2016-04-01 00:33:33 3333 333 ftp 2016-04-01 003000
2016-04-01 00:44:44 4444 444 tftp 2016-04-01 003000
2016-04-01 00:55:55 5555 555 ftp 2016-04-01 003000
2016-04-01 01:07:06 6666 666 http 2016-04-01 010000
bytes packets app timeslot
3333 333 http 2016-04-01 000000
8888 888 ftp 2016-04-01 00:30:00
4444 444 tftp 2016-04-01 00:30:00
6666 666 http 2016-04-01 01:00:00
圷デ`タ
1指朕の
SQLクエリ`
のY惚
2指朕の
SQLクエリ`
のY惚
Timeslot双
の弖紗
Timeslot&App双で
Bytes&Packet双
を鹿s
? 蒙協の1晩で30蛍阿離丱ぅ畔を鹿┘▲廛螢羽`ション阿亮s
Apache Spark + Apache Zeppelin 6/6
%sql
SELECT from_unixtime(m.timeslot*(30*60)) dtime, m.app, sum(m.bytes) bytes
FROM (
SELECT record.client_bytes bytes, record.application_name app, floor(unix_timestamp(record.absolute_first)/(30*60)) timeslot
FROM records
WHERE record.absolute_first >= "2016-03-24" AND record.absolute_first < "2016-03-25^
) AS m
GROUP BY m.timeslot, m.app ORDER BY m.timeslot
おわり
ご賠、ありがとうございました
m(_ _)m
17

More Related Content

Apache Spark+Zeppelinでアドホックなネットワ`ク盾裂

Editor's Notes

  • #9: M貌デ`タ伏撹コ`ド var app = [ {id:'3:21', name: 'ftp'}, {id:'3:25', name: 'smtp'}, {id:'3:69', name: 'tftp'}, {id:'3:80', name: 'http'}, {id:'3:', name: 'secure-http'}, {id:'13:1', name: 'unknown'}, {id:'13:41', name: 'syslog'}, {id:'13:49', name: 'exchange'}, {id:'13:49', name: 'rtp'}, {id:'13:479', name: 'ping'}, {id:'13:497', name: 'ms-update'} ] for (var i = 0; i < 100000; i++) { var src_ip = 3221225985 + Math.floor( Math.random() * 100 ); // 192.0.2.1-100 var dst_ip = 3221226085 + Math.floor( Math.random() * 100 ); // 192.0.2.101-200 var index = Math.floor( Math.random() * 11 ) var app_id = app[index]["id"] var app_name = app[index]["name"] var pkts = 1 + Math.floor( Math.random() * 100 ); // 1-100 var byte = pkts * (64 + Math.floor( Math.random() * 1437 )); // 64-1500 var date = new Date(); date.setTime(date.getTime() - Math.floor( Math.random() * 7 * 24 * 3600 * 1000 )) db.records.save( { template_id: 256, "exporter" : "192.0.2.1", record: {ipv4_src_addr: src_ip, ipv4_dst_addr: dst_ip, client_bytes: byte, client_pkts: pkts, application_id: app_id, application_name: app_name, absolute_first: date, absolute_last: date}}); }