SlideShare a Scribd company logo
Apache Spark+Zeppelinで
アドホックなネットワーク解析
Tetsuhiro Sato
自己紹介
 佐藤 哲大(tetz)
 某ネットワークベンダで、SDN(っぽい)仕事をして
ます
 ネットワークプログラマビリティ勉強会の企画、運営
をしてます
http://network-programmability.connpass.com/
2
全体像
3
Netflow
コレクタ
(自作)
 Apache SparkとApache Zeppelinでデータ
アナリストちっくにアドホックにネットワークトラ
フィックを解析するっていう、ゆるふわネタ
既成可視化ツールとの違い
 さまざまな観点からアドホックに可視化できる
 期間
 集約(インターフェース、ユーザ、サーバ、アプリケー
ション)
 上記集約の組み合わせ
 グラフ形式(棒、エリア、円、離散)
 とはいえ、ネットワークトラフィックの見たい観点
なんて、そんな多様ではないかも。。。
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
テンプレートフローセットから
データフローセットを動的に解析し、
適切なフィールド名になる
https://github.com/tetsusat/fnfc
ルータの設定
ちなみに
 fluentd-plugin-netflow + MongoDB Output
Pluginでも大体同じことができます
6
fluentd-plugin-
netflow
*作成されるレコードの構成およびフィールド名が若干違うので、適宜読み替え
る必要があります
Stratio Spark-MongoDB
 MongoDB上のコレクションに対してSpark SQLの処理
を可能にするライブラリ
7
https://github.com/Stratio/Spark-MongoDB
• MongoDBのnetflowデータベースのrecordsコレクションをSpark DataFrame
へ読み込み
Apache Spark + Apache Zeppelin 1/6
• MongoDBから読み込んだデータフレーム
(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
• 問題点
• 通信のタイミングは、セッション毎に様々なので、そのままでは集約できない
• 集約されない結果、グラフ描画ライブラリの処理しきれないほどのレコード
時系列データをグラフ化する際の課題
• 解決策
• セッションのタイミングを特定間隔のタイムスロットに割り当てる
• 30分毎に集約
タイムスロットへ割り当て
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クエリー
の結果
2回目の
SQLクエリー
の結果
Timeslot列
の追加
Timeslot列で
Bytes&Packet列
を集約
timestamp bytes packets timeslot
2016-04-01 00:11:11 1111 111 2016-04-01 00:00:00
2016-04-01 00:22:22 2222 222 2016-04-01 00:00:00
2016-04-01 00:33:33 3333 333 2016-04-01 00:30:00
2016-04-01 00:44:44 4444 444 2016-04-01 00:30:00
2016-04-01 00:55:55 5555 555 2016-04-01 00:30:00
2016-04-01 01:07:06 6666 666 2016-04-01 01:00:00
bytes packets timeslot
3333 333 2016-04-01 00:00:00
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分毎に集約
タイムスロットへ割り当て(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 00:00:00
2016-04-01 00:22:22 2222 222 http 2016-04-01 00:00:00
2016-04-01 00:33:33 3333 333 ftp 2016-04-01 00:30:00
2016-04-01 00:44:44 4444 444 tftp 2016-04-01 00:30:00
2016-04-01 00:55:55 5555 555 ftp 2016-04-01 00:30:00
2016-04-01 01:07:06 6666 666 http 2016-04-01 01:00:00
bytes packets app timeslot
3333 333 http 2016-04-01 00:00:00
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クエリー
の結果
2回目の
SQLクエリー
の結果
Timeslot列
の追加
Timeslot&App列で
Bytes&Packet列
を集約
• 特定の1日で30分毎のバイト数を集計(アプリケーション毎の集約)
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

What's hot (20)

PPTX
Chainer と Microsoft Azure 広がる応用 (Chainer Meetup #5)
Hirono Jumpei
 
PPTX
How to deploy & operate OpenStack Production
VirtualTech Japan Inc.
 
PDF
分散ストレージソフトウェアCeph・アーキテクチャー概要
Etsuji Nakai
 
PDF
RDOで体験! OpenStackの基本機能
Etsuji Nakai
 
PDF
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No1
Etsuji Nakai
 
PDF
20120721_ishkawa
Yosuke Ishikawa
 
PDF
OpenStack Kuryrについて
skipping classes
 
PDF
Open Source Study Session #3
Satoshi Konno
 
PPTX
MUGT01 - mesos.DCOS demo
Tetsuya Sodo
 
PPTX
OpenStack Congress Deep Dive
masahito12
 
PDF
ソフトウェア・デファインドが再定義するストレージ -- OpenStackデファクト標準ストレージCeph - OpenStack最新情報セミナー 201...
VirtualTech Japan Inc.
 
PDF
OpenStack Updates
Masanori Itoh
 
PDF
Hadoop on eucalyptus_20110221
Etsuji Nakai
 
PPTX
【OpenStack共同検証ラボ】OpenStack監視・ログ分析基盤の作り方 - OpenStack最新情報セミナー(2016年7月)
VirtualTech Japan Inc.
 
PDF
Monitoring Intelligence
netopscoding
 
PDF
空回りのクラウド基盤導入
irix_jp
 
PDF
Linux女子部 systemd徹底入門
Etsuji Nakai
 
PDF
コンテナにおけるパフォーマンス調査でハマった話
Yuta Shimada
 
PPTX
Pakeana 06
彰 村地
 
PDF
Open Stack Day - Ansibleによる環境構築の自動化
shirou wakayama
 
Chainer と Microsoft Azure 広がる応用 (Chainer Meetup #5)
Hirono Jumpei
 
How to deploy & operate OpenStack Production
VirtualTech Japan Inc.
 
分散ストレージソフトウェアCeph・アーキテクチャー概要
Etsuji Nakai
 
RDOで体験! OpenStackの基本機能
Etsuji Nakai
 
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No1
Etsuji Nakai
 
20120721_ishkawa
Yosuke Ishikawa
 
OpenStack Kuryrについて
skipping classes
 
Open Source Study Session #3
Satoshi Konno
 
MUGT01 - mesos.DCOS demo
Tetsuya Sodo
 
OpenStack Congress Deep Dive
masahito12
 
ソフトウェア・デファインドが再定義するストレージ -- OpenStackデファクト標準ストレージCeph - OpenStack最新情報セミナー 201...
VirtualTech Japan Inc.
 
OpenStack Updates
Masanori Itoh
 
Hadoop on eucalyptus_20110221
Etsuji Nakai
 
【OpenStack共同検証ラボ】OpenStack監視・ログ分析基盤の作り方 - OpenStack最新情報セミナー(2016年7月)
VirtualTech Japan Inc.
 
Monitoring Intelligence
netopscoding
 
空回りのクラウド基盤導入
irix_jp
 
Linux女子部 systemd徹底入門
Etsuji Nakai
 
コンテナにおけるパフォーマンス調査でハマった話
Yuta Shimada
 
Pakeana 06
彰 村地
 
Open Stack Day - Ansibleによる環境構築の自動化
shirou wakayama
 

Viewers also liked (20)

PDF
Contiv
Shogo Katsurada
 
PDF
Lagopus + DockerのDPDK接続
Tomoya Hibi
 
PPTX
CDP Indicator
npsg
 
PDF
自動化と画面を考えてみました
skipping classes
 
PPTX
ラズパイ2で動く Docker PaaS
npsg
 
PDF
物理ネットワーク受け入れテストの自動化を考える
skipping classes
 
PPTX
ネットワークプログラマビリティ勉強会
Tomoya Hibi
 
PDF
API イントロダクション APIC-EM, Prime Infrastructure & CMX
npsg
 
PPTX
VPP事始め
npsg
 
PPTX
ラズパイ2で動く Docker PaaSを作ってみたよ
npsg
 
PPTX
いんふらフレンズ
Miho Yamamoto
 
PPTX
Dockerと外部ルータを連携させる仕組みを作ってみた
npsg
 
PDF
Ansible npstudy-shtsuchi
Shishio Tsuchiya
 
PPTX
Telemetry事始め
npsg
 
PPTX
Ansible x napalm x nso 解説・比較パネルディスカッション nso
Akira Iwamoto
 
PDF
NetOpsCoding#5 introduction
Taiji Tsuchiya
 
PDF
ネットワーク運用とIoT
cloretsblack
 
PDF
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
Yahoo!デベロッパーネットワーク
 
PDF
ネットワーク自動化ツール紹介(Ansible・NAPALM編)
akira6592
 
PDF
パケットキャプチャでインフラ主導のデバッグ環境を作る
cloretsblack
 
Lagopus + DockerのDPDK接続
Tomoya Hibi
 
CDP Indicator
npsg
 
自動化と画面を考えてみました
skipping classes
 
ラズパイ2で動く Docker PaaS
npsg
 
物理ネットワーク受け入れテストの自動化を考える
skipping classes
 
ネットワークプログラマビリティ勉強会
Tomoya Hibi
 
API イントロダクション APIC-EM, Prime Infrastructure & CMX
npsg
 
VPP事始め
npsg
 
ラズパイ2で動く Docker PaaSを作ってみたよ
npsg
 
いんふらフレンズ
Miho Yamamoto
 
Dockerと外部ルータを連携させる仕組みを作ってみた
npsg
 
Ansible npstudy-shtsuchi
Shishio Tsuchiya
 
Telemetry事始め
npsg
 
Ansible x napalm x nso 解説・比較パネルディスカッション nso
Akira Iwamoto
 
NetOpsCoding#5 introduction
Taiji Tsuchiya
 
ネットワーク運用とIoT
cloretsblack
 
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
Yahoo!デベロッパーネットワーク
 
ネットワーク自動化ツール紹介(Ansible・NAPALM編)
akira6592
 
パケットキャプチャでインフラ主導のデバッグ環境を作る
cloretsblack
 
Ad

Similar to Apache Spark+Zeppelinでアドホックなネットワーク解析 (20)

PDF
Sparkで始めるお手軽グラフデータ分析
Nagato Kasaki
 
PDF
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
Hidemasa Togashi
 
PPTX
2015 03-12 道玄坂LT祭り第2回 Spark DataFrame Introduction
Yu Ishikawa
 
PDF
クラウドではじめるリアルタイムデータ分析 #seccamp
Masahiro NAKAYAMA
 
PDF
Flume cassandra real time log processing (日本語)
CLOUDIAN KK
 
PDF
スマートニュースの世界展開を支えるログ解析基盤
Takumi Sakamoto
 
PDF
Fluentd Meetup #2 @外道父 Fluentdを優しく見守る監視事例
外道 父
 
PDF
Sparkによる GISデータを題材とした時系列データ処理 (Hadoop / Spark Conference Japan 2016 講演資料)
Hadoop / Spark Conference Japan
 
PDF
Spark GraphFrames のススメ
Nagato Kasaki
 
PPTX
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
AdvancedTechNight
 
PDF
Hadoopを用いた大規模ログ解析
shuichi iida
 
PDF
【18-B-2】データ分析で始めるサービス改善最初の一歩
Developers Summit
 
PPTX
Apache Spark 3.0新機能紹介 - 拡張機能やWebUI関連のアップデート(Spark Meetup Tokyo #3 Online)
NTT DATA Technology & Innovation
 
PDF
AWS Glueを使った Serverless ETL の実装パターン
seiichi arai
 
PDF
Sparkをノートブックにまとめちゃおう。Zeppelinでね!(Hadoopソースコードリーディング 第19回 発表資料)
NTT DATA OSS Professional Services
 
PDF
Amazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTips
yuichi_komatsu
 
PDF
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Amazon Web Services Japan
 
PDF
Facebookのリアルタイム Big Data 処理
maruyama097
 
PPTX
Flumeを活用したAmebaにおける大規模ログ収集システム
Satoshi Iijima
 
Sparkで始めるお手軽グラフデータ分析
Nagato Kasaki
 
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
Hidemasa Togashi
 
2015 03-12 道玄坂LT祭り第2回 Spark DataFrame Introduction
Yu Ishikawa
 
クラウドではじめるリアルタイムデータ分析 #seccamp
Masahiro NAKAYAMA
 
Flume cassandra real time log processing (日本語)
CLOUDIAN KK
 
スマートニュースの世界展開を支えるログ解析基盤
Takumi Sakamoto
 
Fluentd Meetup #2 @外道父 Fluentdを優しく見守る監視事例
外道 父
 
Sparkによる GISデータを題材とした時系列データ処理 (Hadoop / Spark Conference Japan 2016 講演資料)
Hadoop / Spark Conference Japan
 
Spark GraphFrames のススメ
Nagato Kasaki
 
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
AdvancedTechNight
 
Hadoopを用いた大規模ログ解析
shuichi iida
 
【18-B-2】データ分析で始めるサービス改善最初の一歩
Developers Summit
 
Apache Spark 3.0新機能紹介 - 拡張機能やWebUI関連のアップデート(Spark Meetup Tokyo #3 Online)
NTT DATA Technology & Innovation
 
AWS Glueを使った Serverless ETL の実装パターン
seiichi arai
 
Sparkをノートブックにまとめちゃおう。Zeppelinでね!(Hadoopソースコードリーディング 第19回 発表資料)
NTT DATA OSS Professional Services
 
Amazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTips
yuichi_komatsu
 
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Amazon Web Services Japan
 
Facebookのリアルタイム Big Data 処理
maruyama097
 
Flumeを活用したAmebaにおける大規模ログ収集システム
Satoshi Iijima
 
Ad

More from npsg (6)

PPTX
Webアプリケーションによる電源管理システムのご紹介
npsg
 
PDF
「宣言的プログラミング」とSDNのひとつの形態
npsg
 
PPTX
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
npsg
 
PPTX
ネットワークプログラマビリティ勉強会 目的と方針(暫定)
npsg
 
PPTX
IxVM on CML
npsg
 
PPTX
ネットワークエンジニアのための Puppet / Chef
npsg
 
Webアプリケーションによる電源管理システムのご紹介
npsg
 
「宣言的プログラミング」とSDNのひとつの形態
npsg
 
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
npsg
 
ネットワークプログラマビリティ勉強会 目的と方針(暫定)
npsg
 
IxVM on CML
npsg
 
ネットワークエンジニアのための Puppet / Chef
npsg
 

Recently uploaded (6)

PDF
Google Driveハブ型Obsidian同期環境:PC編集とモバイル閲覧を安全・効率的に実現するクロスデバイス構築ガイド
honeshabri
 
PDF
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
PPTX
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
PDF
LoRaWAN ウェザーステーションキット v3 -WSC3-L 日本語ユーザーマニュアル
CRI Japan, Inc.
 
PDF
VMUG Japan book vsan 20250515 CPU/Memory vSAN
Kazuhiro Sota
 
PDF
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
Google Driveハブ型Obsidian同期環境:PC編集とモバイル閲覧を安全・効率的に実現するクロスデバイス構築ガイド
honeshabri
 
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
LoRaWAN ウェザーステーションキット v3 -WSC3-L 日本語ユーザーマニュアル
CRI Japan, Inc.
 
VMUG Japan book vsan 20250515 CPU/Memory vSAN
Kazuhiro Sota
 
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 

Apache Spark+Zeppelinでアドホックなネットワーク解析

Editor's Notes

  • #9: 擬似データ生成コード 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}}); }