Rubyによる(力技)でのネットワーク運用<br />u-ichi<br />twitter: u1<br />mail: yuichi.u@gmail.com<br />
自己紹介<br />名前<br />u-ichi/u1<br />植村優一<br />twitter<br />http://twitter.com/u1<br />所属<br />NTTコミュニケーションズ<br />今年7月まで大規模ネット...
なぜRubyでネットワーク運用なのか?<br />
ネットワークを監視しようとした場合・・・<br />ネットワーク監視だけなら汎用製品使う場合が多いです<br />Hinemos,ZABBIX,JP1,NNM,Tiboli,Cm2,BMC,WebNMS,etc…<br />装置の死活監視したり...
ネットワーク装置単体の運用ではなく、<br />1つのシステムとして運用をするためには<br />運用システムの作り込みが必要<br />もう一つのアプローチとして、システムにあわせる形で<br />ネットワークを作り上げるというのもあるけど、...
でも最初からどう使うのかを全て想定して<br />運用システムを作り込むのって難しい<br />特にネットワークをサービスとして提供する立場だと、<br />ユーザ数の増加/ユーザ要望の変化によって<br />ネットワーク構成/要件が変化するの...
変化を受け入れられる力が欲しい<br />
 そこでruby!<br />
ネットワーク運用(主に保守側)に欲しい事<br />通常時<br />ログ監視(swatch等)<br />装置の定期的な正常性確認(ping,snmpwalk等)<br />故障/トラブル発生時<br />装置状態/ログの取得<br />取得...
装置状態を取得するには<br />情報取得の方法<br />snmpget,snmpwalk,snmpbulkwalk<br />telnet/ssh<br />取得する上で大変な点<br />装置台数は数百台以上、時には数千台<br />でも...
装置をコントロールするには<br />基本的にコントロールはtelnet/ssh経由でコマンドで実施<br />装置種別/OS毎にclassライブラリを作成<br />よく使う命令はテストを十分に施してメソッド化<br />router = C...
例として、rxカウンタが0なインタフェースを全てshutdownさせてみる<br />routers = [Cisco.login(“rubykaigi01_router”),<br />           Cisco.login(“ruby...
作ったシステムのテストは凄く重要<br />でも・・・<br />他装置との試験は時間がかかるし、準備も大変<br />装置のOSが新しくなる度に再試験が必要<br />そもそも柔軟な対応を現場でやりたいからシステムを内製してる<br />必要...
テストを管理/自動化出来る仕組み<br /><ul><li>テストケースの記述にrspecを利用
ラボでの試験もrspecで記述
日本語でケース書けるので後から凄く見やすい</li></ul>describe &quot;xxx構成の場合&quot; do<br />  before(:each) do<br /># ラボのネットワーク構成を作成するスクリプトを書く<br...
Upcoming SlideShare
Loading in …5
×

RubyKaigi2009 u-ichi - Rubyによる(力技での)ネットワーク運用

4,958 views

Published on

u-ichi(植村優一)が2009/07/18にRubyKaigi2009で発表した時の資料です。
意見・質問等はお気軽にyuichi.u@gmail.comかhttp://twitter.com/u1へどうぞ。

Published in: Technology, Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,958
On SlideShare
0
From Embeds
0
Number of Embeds
564
Actions
Shares
0
Downloads
16
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

RubyKaigi2009 u-ichi - Rubyによる(力技での)ネットワーク運用

  1. 1. Rubyによる(力技)でのネットワーク運用<br />u-ichi<br />twitter: u1<br />mail: yuichi.u@gmail.com<br />
  2. 2. 自己紹介<br />名前<br />u-ichi/u1<br />植村優一<br />twitter<br />http://twitter.com/u1<br />所属<br />NTTコミュニケーションズ<br />今年7月まで大規模ネットワーク(非OCN)の運用を5年やってました。<br />7月からホスティングサービスを提供する側へ異動・・・<br />今回はネットワーク運用の現場でRuby使って闘ってきた時に大事だと感じた点を共有します。<br />
  3. 3. なぜRubyでネットワーク運用なのか?<br />
  4. 4. ネットワークを監視しようとした場合・・・<br />ネットワーク監視だけなら汎用製品使う場合が多いです<br />Hinemos,ZABBIX,JP1,NNM,Tiboli,Cm2,BMC,WebNMS,etc…<br />装置の死活監視したり、リソース見たり<br />でも監視以上の事はあまり得意ではありません<br />×外部の死活監視の仕組みと連携して自動切替をさせたりとか<br />×帯域の空きが無くなってきたら、空いてるところにトラフィックを自動で逃がすとか<br />
  5. 5. ネットワーク装置単体の運用ではなく、<br />1つのシステムとして運用をするためには<br />運用システムの作り込みが必要<br />もう一つのアプローチとして、システムにあわせる形で<br />ネットワークを作り上げるというのもあるけど、今回は割愛<br />
  6. 6. でも最初からどう使うのかを全て想定して<br />運用システムを作り込むのって難しい<br />特にネットワークをサービスとして提供する立場だと、<br />ユーザ数の増加/ユーザ要望の変化によって<br />ネットワーク構成/要件が変化するのはよくあること<br />変化を受け入れる事が重要<br />
  7. 7. 変化を受け入れられる力が欲しい<br />
  8. 8. そこでruby!<br />
  9. 9. ネットワーク運用(主に保守側)に欲しい事<br />通常時<br />ログ監視(swatch等)<br />装置の定期的な正常性確認(ping,snmpwalk等)<br />故障/トラブル発生時<br />装置状態/ログの取得<br />取得した情報の解析<br />装置の操作(復旧作業)<br />etc…<br />←本LTでのカバー範囲<br />
  10. 10. 装置状態を取得するには<br />情報取得の方法<br />snmpget,snmpwalk,snmpbulkwalk<br />telnet/ssh<br />取得する上で大変な点<br />装置台数は数百台以上、時には数千台<br />でも1台の取得だけで1分以上かかる時も<br />処理プロセスのマルチスレッド化は必須!<br />
  11. 11. 装置をコントロールするには<br />基本的にコントロールはtelnet/ssh経由でコマンドで実施<br />装置種別/OS毎にclassライブラリを作成<br />よく使う命令はテストを十分に施してメソッド化<br />router = Cisco.login(“rubykaigi01_router”)<br />router.interface(“Gi0/1”).shutdown<br />装置のコントロールは検証がとれた<br />メソッドを組み合わていく形で実施する<br />
  12. 12. 例として、rxカウンタが0なインタフェースを全てshutdownさせてみる<br />routers = [Cisco.login(“rubykaigi01_router”),<br /> Cisco.login(“rubykaigi02_router”)]<br />threads = Array.new<br />routers.each do |router|<br /> threads &lt;&lt; Thread.new do<br />router.get_interfaces_counter<br /> router.interfaces.each do |interface|<br /> if interface.rx_counter == 0<br />interface.shutdown<br /> end<br /> end<br /> end<br />end<br />threads.each do |thread|<br /> thread.join<br />end<br />各装置毎に平行して処理を実施<br />ルータのインタフェースとトラフィック値を取得するメソッド<br />該当カウンタ値が0ならば、インタフェースをシャットダウンさせる<br />スレッドの処理終了待ち・・・<br />
  13. 13. 作ったシステムのテストは凄く重要<br />でも・・・<br />他装置との試験は時間がかかるし、準備も大変<br />装置のOSが新しくなる度に再試験が必要<br />そもそも柔軟な対応を現場でやりたいからシステムを内製してる<br />必要なのは・・・<br />「テストを管理/自動化出来る仕組み」<br />「単体テストが可能な設計」<br />
  14. 14. テストを管理/自動化出来る仕組み<br /><ul><li>テストケースの記述にrspecを利用
  15. 15. ラボでの試験もrspecで記述
  16. 16. 日本語でケース書けるので後から凄く見やすい</li></ul>describe &quot;xxx構成の場合&quot; do<br /> before(:each) do<br /># ラボのネットワーク構成を作成するスクリプトを書く<br />end<br /> describe “100回繰り返して負荷試験を実施する場合&quot; do<br /> before(:all) do<br /># 繰り返し処理をする内容を書く。ネットワークの切替とか。<br />end<br /> it &quot;装置状態が正常な事&quot; do<br /># 実際はもっと細かい精度で。(トラフィックカウンタとか)<br /> end<br /> end<br />end<br />
  17. 17. 単体テストが可能な設計<br />装置アクセス部と結果解析部を分割<br />装置アクセス部のテストはラボのみで実施させる<br />結果解析部のテストはautospecを用いて自動テスト<br />時間がかかる装置アクセス部のテストを実行している時間で結果解析部の開発が出来る<br />開発時間の大幅短縮に繋がる<br />
  18. 18. まとめ<br />急激な変化に対応しなくてはいけない運用の現場でRubyはすごく役に立つ!<br />現場でコードを書く時も、テストの自動化は大事<br />rspec使ってネットワーク(サーバも)装置の検証も書くと後から読みやすいのでオススメ!<br />運用現場でコーディングをもっとして、エンジニアの価値を高めよう!<br />

×