conbu api の開発
TRANSCRIPT
CONBU API の開発2015-08-22
@ YAPC::Asia 2015 TAKANO Mitsuhiro a.k.a. @takano32
お前、誰よ
@takano32
高野光弘 / TAKANO Mitsuhiro
Ruby committer ???
最近コミットしてないけどいまもコミット権あります…
日本UNIXユーザ会 理事
CONBU Core Team Member
今日の帽子はこれ ↑
興味分野とか
半田ごてとかマイコンは友だち
ネイティブアプリケーション楽しい
バイトで Windows 向けビデオチャットとか作成してた
OS とか 仮想化機構
前職で仮想化機構を作ってた
言語処理系オタク
分散オブジェクトの研究
電子商取引サイトで小遣い稼ぎ
Javaェ・・・
大規模インフラ管理
国内大手サービスプロバイダ
+ NETWORKBGP オペレーションとか
侵入検知システムとか
CONBU での立ち位置は ネットワークもよくわかる プログラミングおじさん
WEB系のみなさん こんにちは!!!
ネットワークの話をします
うっそっぴょん~ ここからは
HTTP REST API の話ですみんな大好き Web 2.0 (^−^)
CONBU API の紹介
CONBU API の発端
YAPC スタッフとネットワークの話になった
ネットワークの情報提供できたら面白いよね
CONBU でも API があれば面白いかもと話題になる
カンファレンスのネットワーク利用者が自分の利用しているネットワークについての状況を調べることができるアプリケーション作ったりとかできるんじゃね?
CONBU API の要求仕様
接続数公開すればよくね?すみませんすみませんすみません
まだ他の情報については整理できてません \(^O^)/
CONBU API V0.9
7月末の土日で作成
8月2日にクラブイベントで結合テスト
YAPC に向けてのテストフライト
いろいろ問題が起こった・・・
後ほど解説
CONBU API の基本構成
API サーバ
HTTP リクエストに応答してネットワーク情報を返却
返却する情報の生成は既存の死活監視ソフトウェア
死活監視ソフトウェア
Zabbix が JSON-RPC で接続数を取得できたのでそれを利用
CONBU API の基本構成
ZabbixAPI Serverthe Internet
JSON-RPC で情報取得
JSON 形式でデータ提供
CONBU API の 機能仕様
無線LANアクセスポイントの 接続数が取得できる
発生したトラブルと対応Web系のみんなは深夜にアラートが鳴って
電話に起こされるのとか好きでしょう!!!
CONBU API 初期構成
ZabbixAPI Serverthe Internet
リクエストごとに叩きまくり!!!
HTTPJSON-RPC
富豪的!ナウい!!!趣味プログラミングの醍醐味
実装イメージ
API は死んだ。何故だ!坊やだからさ
成果物イメージ
頓死例 突然 JSON-RPC が 502
[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
犯人はこいつか?
原因はすぐに判明
PHP の memory_limit が低すぎる
/etc/php.ini を書き換えてみる
php -i や <? phpinfo(); でサイズアップ確認
謎のトラブル
ZABBIX のメモリだけ 増えない!!!
パッケージの設定だった
パッケージで入る ZABBIXの設定
狂ってるだろ!!!
共犯者はこいつ
まだ続きます
ZABBIX API が挙動不審
グラフに対応したデータを取れる
グラフにプロットされているのはアイテム
グラフを指定してアイテムを取得できるはずが…
なぜかすべてのグラフのアイテムを取得してくる
ZABBIX がいつの間にか ガッツリとメモリを喰ってる!!!
油断してるとやんちゃする
普通の男の子に戻りたい
システム構成を改善ガンガン Zabbix の API を叩くのを止めよう
富豪的にヤリ過ぎた
CONBU API V1.0 の構成
ZabbixAPI Serverthe Internet
API Daemon
定期的に取得
データを分散オブジェクトにキャッシュ
分散オブジェクトを共有
バックエンドの負荷が リクエスト数に依存しない
結果
驚くほど安定して 動くようになってしまった
特に話すことなくなったのでコードでも読むとよい
https://github.com/conbu/conbu-api-server https://github.com/conbu/conbu-api-daemon
活用事例
ヒートマップ
GitHub Pages でホスト
API では Access Control Allow Origin ヘッダで他のド
メインからの参照を許可した状態の JSON がきます
Canvas で描画
はい
ヒートマップ
まとめ
CONBU で提供しているネットワークについて、部屋ごとなどの単位で接続数を提供できるようにした
PHP は読みたくない
PHP は読みたくない
今後の展望夢ってやつですよ
言うだけなら何でも言える
今後の展望
あのセッションに興味があるひとはこのセッションにも興味がありますリコメンド
MACアドレスを識別子に使ってセッションごとに接続の遷移をトレースすればできそう
休憩室はこちらです機能みたいなの
空いているセッションなら座るくらいは許してくれるでしょ
CONBU API Daemon の複数バックエンド対応
Zabbix 以外からも集約した情報があればさらに API で提供できる情報が増える
最後に
API を使って何か作ったりすると CONBU によるネットワークの品質が 上がったりするかもしれないです
ご静聴ありがとうございましたMay the Internet be with you