conbu api の開発

54
CONBU API の開発 2015-08- 22 @ YAPC::Asia 2015 TAKANO Mitsuhiro a.k.a. @takano32

Upload: takano-mitsuhiro

Post on 22-Jan-2018

5.926 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: CONBU API の開発

CONBU API の開発2015-08-22

@ YAPC::Asia 2015 TAKANO Mitsuhiro a.k.a. @takano32

Page 2: CONBU API の開発

お前、誰よ

@takano32

高野光弘 / TAKANO Mitsuhiro

Ruby committer ???

最近コミットしてないけどいまもコミット権あります…

日本UNIXユーザ会 理事

CONBU Core Team Member

今日の帽子はこれ ↑

Page 3: CONBU API の開発

興味分野とか

半田ごてとかマイコンは友だち

ネイティブアプリケーション楽しい

バイトで Windows 向けビデオチャットとか作成してた

OS とか 仮想化機構

前職で仮想化機構を作ってた

言語処理系オタク

分散オブジェクトの研究

電子商取引サイトで小遣い稼ぎ

Javaェ・・・

大規模インフラ管理

国内大手サービスプロバイダ

Page 4: CONBU API の開発

+ NETWORKBGP オペレーションとか

侵入検知システムとか

Page 5: CONBU API の開発

CONBU での立ち位置は ネットワークもよくわかる プログラミングおじさん

Page 6: CONBU API の開発

WEB系のみなさん こんにちは!!!

ネットワークの話をします

Page 7: CONBU API の開発
Page 8: CONBU API の開発

うっそっぴょん~ ここからは

HTTP REST API の話ですみんな大好き Web 2.0 (^−^)

Page 9: CONBU API の開発
Page 10: CONBU API の開発

CONBU API の紹介

Page 11: CONBU API の開発

CONBU API の発端

YAPC スタッフとネットワークの話になった

ネットワークの情報提供できたら面白いよね

CONBU でも API があれば面白いかもと話題になる

カンファレンスのネットワーク利用者が自分の利用しているネットワークについての状況を調べることができるアプリケーション作ったりとかできるんじゃね?

Page 12: CONBU API の開発

CONBU API の要求仕様

Page 13: CONBU API の開発

接続数公開すればよくね?すみませんすみませんすみません

まだ他の情報については整理できてません \(^O^)/

Page 14: CONBU API の開発

CONBU API V0.9

7月末の土日で作成

8月2日にクラブイベントで結合テスト

YAPC に向けてのテストフライト

いろいろ問題が起こった・・・

後ほど解説

Page 15: CONBU API の開発

CONBU API の基本構成

API サーバ

HTTP リクエストに応答してネットワーク情報を返却

返却する情報の生成は既存の死活監視ソフトウェア

死活監視ソフトウェア

Zabbix が JSON-RPC で接続数を取得できたのでそれを利用

Page 16: CONBU API の開発

CONBU API の基本構成

ZabbixAPI Serverthe Internet

JSON-RPC で情報取得

JSON 形式でデータ提供

Page 17: CONBU API の開発

CONBU API の 機能仕様

Page 18: CONBU API の開発

無線LANアクセスポイントの 接続数が取得できる

Page 19: CONBU API の開発

続きは WEB でhttp://conbu.net/doc/conbu-api/

読めば分かるし、説明するの面倒くせぇ

Page 20: CONBU API の開発

発生したトラブルと対応Web系のみんなは深夜にアラートが鳴って

電話に起こされるのとか好きでしょう!!!

Page 21: CONBU API の開発
Page 22: CONBU API の開発

CONBU API 初期構成

ZabbixAPI Serverthe Internet

リクエストごとに叩きまくり!!!

HTTPJSON-RPC

Page 23: CONBU API の開発

富豪的!ナウい!!!趣味プログラミングの醍醐味

Page 24: CONBU API の開発

実装イメージ

Page 25: CONBU API の開発

API は死んだ。何故だ!坊やだからさ

Page 26: CONBU API の開発

成果物イメージ

Page 27: CONBU API の開発

頓死例 突然 JSON-RPC が 502

Page 28: CONBU API の開発

[Sun Aug 02 14:35:17 2015] [error] [client 10.255.254.101] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 7899804 bytes) in /usr/share/zabbix/include/classes/json/CJson.php on line 142

Page 29: CONBU API の開発

犯人はこいつか?

Page 30: CONBU API の開発

原因はすぐに判明

PHP の memory_limit が低すぎる

/etc/php.ini を書き換えてみる

php -i や <? phpinfo(); でサイズアップ確認

Page 31: CONBU API の開発

謎のトラブル

Page 32: CONBU API の開発

ZABBIX のメモリだけ 増えない!!!

Page 33: CONBU API の開発

パッケージの設定だった

Page 34: CONBU API の開発

パッケージで入る ZABBIXの設定

狂ってるだろ!!!

Page 35: CONBU API の開発

共犯者はこいつ

Page 36: CONBU API の開発

まだ続きます

Page 37: CONBU API の開発

ZABBIX API が挙動不審

グラフに対応したデータを取れる

グラフにプロットされているのはアイテム

グラフを指定してアイテムを取得できるはずが…

なぜかすべてのグラフのアイテムを取得してくる

Page 38: CONBU API の開発

ZABBIX がいつの間にか ガッツリとメモリを喰ってる!!!

Page 39: CONBU API の開発

油断してるとやんちゃする

Page 40: CONBU API の開発

普通の男の子に戻りたい

Page 41: CONBU API の開発

システム構成を改善ガンガン Zabbix の API を叩くのを止めよう

富豪的にヤリ過ぎた

Page 42: CONBU API の開発

CONBU API V1.0 の構成

ZabbixAPI Serverthe Internet

API Daemon

定期的に取得

データを分散オブジェクトにキャッシュ

分散オブジェクトを共有

バックエンドの負荷が リクエスト数に依存しない

Page 43: CONBU API の開発

結果

Page 44: CONBU API の開発

驚くほど安定して 動くようになってしまった

特に話すことなくなったのでコードでも読むとよい

https://github.com/conbu/conbu-api-server https://github.com/conbu/conbu-api-daemon

Page 45: CONBU API の開発
Page 46: CONBU API の開発

活用事例

Page 47: CONBU API の開発

ヒートマップ

http://ikosin.github.io/conbu-api-server/

Page 48: CONBU API の開発

ヒートマップ

GitHub Pages でホスト

API では Access Control Allow Origin ヘッダで他のド

メインからの参照を許可した状態の JSON がきます

Canvas で描画

はい

Page 49: CONBU API の開発

ヒートマップ

Page 50: CONBU API の開発

まとめ

CONBU で提供しているネットワークについて、部屋ごとなどの単位で接続数を提供できるようにした

PHP は読みたくない

PHP は読みたくない

Page 51: CONBU API の開発

今後の展望夢ってやつですよ

言うだけなら何でも言える

Page 52: CONBU API の開発

今後の展望

あのセッションに興味があるひとはこのセッションにも興味がありますリコメンド

MACアドレスを識別子に使ってセッションごとに接続の遷移をトレースすればできそう

休憩室はこちらです機能みたいなの

空いているセッションなら座るくらいは許してくれるでしょ

CONBU API Daemon の複数バックエンド対応

Zabbix 以外からも集約した情報があればさらに API で提供できる情報が増える

Page 53: CONBU API の開発

最後に

API を使って何か作ったりすると CONBU によるネットワークの品質が 上がったりするかもしれないです

Page 54: CONBU API の開発

ご静聴ありがとうございましたMay the Internet be with you