SlideShare a Scribd company logo
1 of 14
zabbixでvmc statsの情報など監視
 してオートスケール風に動かし
        てみました。

        DTS 大西
自己紹介
• 大西正太 (株)DTS @shouta_dev
• Rails歴7年位
    – 自社サービス グループウェア (2006~)
      • http://www.bizca.jp
    – 受託開発色々
      • 普通のRails
      • Heroku上アプリ(6 dyno)


•   自転車が大好き!
•   お酒が大好き!
•   岩ガキが大好き!
•   生肉が大好き!
今日の内容
• ZabbixでCloudFoundryのインスタンスを試し
  にオートスケールしてみました
• 連携できるか見たかっただけでさほど突き詰
  めてないですが、あまり突っ込まないでくだ
  さい!




             ×
オートスケール?
• 負荷が高くなってきたら自動的にスケールア
  ウトする機構
• 突然の負荷上昇に自動対応
• CloudFoundryには現状ない?
• サーバ側の何らかのメトリクスが閾値を超え
  たらスケールアウトを発動させる
 –   レスポンスタイム
 –   CPU、メモリ
 –   プロセス数
 –   スコアボードなど
Zabbix
• オープンソースの監視ソフト
• Itemを監視しTrigger条件を満
  たしたらActionを実行すると
  いう構造




   Item          Trigger   Action
今回やること
• vmc statsのItem種別を追加する
  – エージェント拡張の機構を用いることでItemの種別を追加
    できる
• vmc instancesでスケールアウトするActionを追加する
  – Actionはシェルコマンドを定義できる



  監視対象                      メール
               Trigger       通知
 CPU Item       条件          Action

 メモリItem
                            スケール
  vmc stats    Trigger       アウト
    Item        条件           Action
vmc stats?
•    vmc statsで該当アプリケーションのリソース状況を取得できる
$ vmc stats xxx

+----------+-------------+----------------+--------------+----------------+
| Instance | CPU (Cores) | Memory (limit) | Disk (limit) | Uptime |
+----------+-------------+----------------+--------------+----------------+
|0       | 0.0% (4) | 23.1M (128M) | 56.0K (2G) | 0d:18h:53m:10s |
|1      | 0.0% (4) | 18.0M (128M) | 52.0K (2G) | 0d:17h:42m:5s |
+----------+-------------+----------------+--------------+----------------+

•    vmcコマンドはCloudControllerのWebAPIを叩いてJSONで結果受け取り

[{:state=>:RUNNING, :stats=>{:name=>“xxx", :host=>"172.30.49.137", :port=>40538, :uris=>[“xxx.cloudfoundry.co
      m"], :uptime=>71329.371288281, :mem_quota=>134217728, :disk_quota=>2147483648, :fds_quota=>256, :cores
      =>4, :usage=>{:time=>"2012-08-23 02:40:58
      +0000", :cpu=>0.0, :mem=>23660.0, :disk=>57344}}, :instance=>0}, {:state=>:RUNNING, :stats=>{:name=>"s
      houtahello", :host=>"172.30.50.23", :port=>28052, :uris=>["shoutahello.cloudfoundry.com"], :uptime=>67064.
      368383474, :mem_quota=>134217728, :disk_quota=>2147483648, :fds_quota=>256, :cores=>4, :usage=>{:time=
      >"2012-08-23 02:40:57 +0000", :cpu=>0.0, :mem=>18428.0, :disk=>53248}}, :instance=>1}]
vmc stats 用Item種別追加
■API叩く簡単な自作スクリプト                                    ■Item種別の追加
#vmc_stats.rb
                                                    #/etc/zabbix/zabbix-agentd.confに追記する
require 'cli'
opt = {
  :target => 'api.cloudfoundry.com',                UserParameter=cloudfoundry.vmc.stats,ruby
  :email => 'xxxx@example.com',
                                                       /home/zabbix/vmc_stats.rb
  :password => 'xxxx',
  :appname => 'xxxx'
}

client = VMC::Client.new(opt[:target], nil)
token = client.login(opt[:email], opt[:password])

stats = client.app_stats(opt[:appname])             ※vmcコマンド直接ではなくvmc内部の
sum = 0.0                                           クラスを利用
stats.each do |stat|                                →コマンドはログイン情報をファイルに
 sum += stat[:stats][:usage][:cpu].to_f
                                                    保持するため、複数のcloudfoundryアカ
end
                                                    ウントで監視したい場合などに動きがお
average = sum / stats.length                        かしくなりそうだと考えたため
#標準出力に数値を出力
puts average
Itemの作成
•   普通のCPU監視などと同様に、画面
    からcloudfoundry.vmc.statsを指定
    してItemを作成
•   Itemのグラフを定義するとグラフ表
    示!

※今回30秒毎の監視で指定
Trigger定義
• Zabbix書式で閾値を定義
Action定義
■スケールアウト自作スクリプト(徐々にスケールアウト)
#vmc_instances.rb
require 'cli'

opt = {
  :target => 'api.cloudfoundry.com',
  :email => ‘xxxx@example.com',
  :password => ‘xxxx',
  :appname => ‘xxxx'
}

client = VMC::Client.new(opt[:target], nil)
token = client.login(opt[:email], opt[:password])

app = client.app_info(opt[:appname])
current_instances_num = app[:instances]

cmd = VMC::Cli::Command::Apps.new
cmd.client(client)

if current_instances_num <= 5
  cmd.instances(opt[:appname], "+1")
end
負荷掛けてみる
• Jmeterで負荷
• CPUを消費するシンプルアプリ
   – 負荷掛けるとTrigger検知されて画面に出る


require 'sinatra'
get '/' do
 100000000.times{}
end
2500




                                1500
                                                                      3500




              500
                                       2000




                    1000
                                                               3000
                                                                             4000




          0
      1
    43
    85
   127
   169
    211
   253
  295
   337
  379
   421
  463
  505
                                                                                      善している
  547
  589
   631
  673



                                                     スケールアウト
   715
   757
  799
   841
  883
  925
  967
1009
 1051
1093
  1135
  1177
                           段になっている

 1219
 1261
 1303
 1345
1387
1429
 1471
  1513
 1555
1597
1639
 1681
                                                                                                           オートスケールしてる




                                              1


                                 5
                                       2


                           10
                                                               Jmeter
                                                                                    • スケールアウトが自動実行されて性能改



                                                               スレッド数




リクエスト数
実用するには?
• vmc statsで返ってくるCPUの精度が怪しい?
  •   平均値を返してるのか、使用率の上下が即時反映されない?
• そもそもItemはCPUでいいのか?
  – CPUはAPがボトルネックという切分にはなるけど…
  – レスポンスタイムとか
      • ZabbixのWeb監視で実現可能
  – 同時処理中のインスタンス数とか
      • そもそも取れる?Routerとか持ってない?
      • varzの情報にもないっぽい?
  – 複合条件
      • ZabbixのTriggerで定義可能
• 歯止めの対応
  – 連続で高負荷検知の場合スケールアウトとか
      • ZabbixのTriggerで定義可能
• スケールインの対応
      • ZabbixのTriggerで定義可能

More Related Content

What's hot

カンタン画像サムネイル作成「Smalllight」
カンタン画像サムネイル作成「Smalllight」カンタン画像サムネイル作成「Smalllight」
カンタン画像サムネイル作成「Smalllight」livedoor
 
S02 企業で活用が進む Microsoft Azureの仮想マシン (Linux)
S02 企業で活用が進む Microsoft Azureの仮想マシン (Linux)S02 企業で活用が進む Microsoft Azureの仮想マシン (Linux)
S02 企業で活用が進む Microsoft Azureの仮想マシン (Linux)Microsoft Azure Japan
 
クラウドデザイン パターンに見る クラウドファーストな アプリケーション設計 Data Management編
クラウドデザイン パターンに見るクラウドファーストなアプリケーション設計 Data Management編クラウドデザイン パターンに見るクラウドファーストなアプリケーション設計 Data Management編
クラウドデザイン パターンに見る クラウドファーストな アプリケーション設計 Data Management編Takekazu Omi
 
enchant.jsでゲーム制作をはじめてみよう
enchant.jsでゲーム制作をはじめてみようenchant.jsでゲーム制作をはじめてみよう
enchant.jsでゲーム制作をはじめてみようRyota Shiroguchi
 
Azure SQLデータベース最新動向&TIPS
Azure SQLデータベース最新動向&TIPSAzure SQLデータベース最新動向&TIPS
Azure SQLデータベース最新動向&TIPSnishioka1
 
松本克彦 ピグにおけるリアルタイムランキングの導入
松本克彦 ピグにおけるリアルタイムランキングの導入松本克彦 ピグにおけるリアルタイムランキングの導入
松本克彦 ピグにおけるリアルタイムランキングの導入matsumoto_katsuhiko
 
MySQLやSSDとかの話 前編
MySQLやSSDとかの話 前編MySQLやSSDとかの話 前編
MySQLやSSDとかの話 前編Takanori Sejima
 
SugarCRM meets Azure
SugarCRM meets AzureSugarCRM meets Azure
SugarCRM meets AzureToshiya TSURU
 
Fabric + Amazon EC2で快適サポート生活 #PyFes
Fabric + Amazon EC2で快適サポート生活 #PyFesFabric + Amazon EC2で快適サポート生活 #PyFes
Fabric + Amazon EC2で快適サポート生活 #PyFesSho Shimauchi
 
インフラエンジニアがUnityをやるべきたった一つの理由
インフラエンジニアがUnityをやるべきたった一つの理由インフラエンジニアがUnityをやるべきたった一つの理由
インフラエンジニアがUnityをやるべきたった一つの理由axsh co., LTD.
 
MySQLの運用でありがちなこと
MySQLの運用でありがちなことMySQLの運用でありがちなこと
MySQLの運用でありがちなことHiroaki Sano
 
blogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べblogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べMasahiro Nagano
 
Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Taro Hirose
 
Awsをちゃんと使ってみた 監視編
Awsをちゃんと使ってみた   監視編Awsをちゃんと使ってみた   監視編
Awsをちゃんと使ってみた 監視編Yoichi Toyota
 
EWD 3トレーニング・コース #4 ewd-xpressのインストールと構成
EWD 3トレーニング・コース #4 ewd-xpressのインストールと構成EWD 3トレーニング・コース #4 ewd-xpressのインストールと構成
EWD 3トレーニング・コース #4 ewd-xpressのインストールと構成Kiyoshi Sawada
 

What's hot (20)

カンタン画像サムネイル作成「Smalllight」
カンタン画像サムネイル作成「Smalllight」カンタン画像サムネイル作成「Smalllight」
カンタン画像サムネイル作成「Smalllight」
 
S02 企業で活用が進む Microsoft Azureの仮想マシン (Linux)
S02 企業で活用が進む Microsoft Azureの仮想マシン (Linux)S02 企業で活用が進む Microsoft Azureの仮想マシン (Linux)
S02 企業で活用が進む Microsoft Azureの仮想マシン (Linux)
 
クラウドデザイン パターンに見る クラウドファーストな アプリケーション設計 Data Management編
クラウドデザイン パターンに見るクラウドファーストなアプリケーション設計 Data Management編クラウドデザイン パターンに見るクラウドファーストなアプリケーション設計 Data Management編
クラウドデザイン パターンに見る クラウドファーストな アプリケーション設計 Data Management編
 
enchant.jsでゲーム制作をはじめてみよう
enchant.jsでゲーム制作をはじめてみようenchant.jsでゲーム制作をはじめてみよう
enchant.jsでゲーム制作をはじめてみよう
 
Azure SQLデータベース最新動向&TIPS
Azure SQLデータベース最新動向&TIPSAzure SQLデータベース最新動向&TIPS
Azure SQLデータベース最新動向&TIPS
 
松本克彦 ピグにおけるリアルタイムランキングの導入
松本克彦 ピグにおけるリアルタイムランキングの導入松本克彦 ピグにおけるリアルタイムランキングの導入
松本克彦 ピグにおけるリアルタイムランキングの導入
 
MySQLやSSDとかの話 前編
MySQLやSSDとかの話 前編MySQLやSSDとかの話 前編
MySQLやSSDとかの話 前編
 
SugarCRM meets Azure
SugarCRM meets AzureSugarCRM meets Azure
SugarCRM meets Azure
 
AzureでOracle
AzureでOracleAzureでOracle
AzureでOracle
 
OSC 2012.Cloud
OSC 2012.CloudOSC 2012.Cloud
OSC 2012.Cloud
 
Fabric + Amazon EC2で快適サポート生活 #PyFes
Fabric + Amazon EC2で快適サポート生活 #PyFesFabric + Amazon EC2で快適サポート生活 #PyFes
Fabric + Amazon EC2で快適サポート生活 #PyFes
 
Cloudshare のご紹介
Cloudshare のご紹介Cloudshare のご紹介
Cloudshare のご紹介
 
インフラエンジニアがUnityをやるべきたった一つの理由
インフラエンジニアがUnityをやるべきたった一つの理由インフラエンジニアがUnityをやるべきたった一つの理由
インフラエンジニアがUnityをやるべきたった一つの理由
 
MySQLの運用でありがちなこと
MySQLの運用でありがちなことMySQLの運用でありがちなこと
MySQLの運用でありがちなこと
 
130412 kayac-cinnamon
130412 kayac-cinnamon130412 kayac-cinnamon
130412 kayac-cinnamon
 
Ansible入門
Ansible入門Ansible入門
Ansible入門
 
blogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べblogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べ
 
Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)
 
Awsをちゃんと使ってみた 監視編
Awsをちゃんと使ってみた   監視編Awsをちゃんと使ってみた   監視編
Awsをちゃんと使ってみた 監視編
 
EWD 3トレーニング・コース #4 ewd-xpressのインストールと構成
EWD 3トレーニング・コース #4 ewd-xpressのインストールと構成EWD 3トレーニング・コース #4 ewd-xpressのインストールと構成
EWD 3トレーニング・コース #4 ewd-xpressのインストールと構成
 

Similar to Zabbixでvmc statsの情報など監視

OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002
OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002
OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002Takeshi Kuramochi
 
プロファイラGuiを用いたコード分析 20160610
プロファイラGuiを用いたコード分析 20160610プロファイラGuiを用いたコード分析 20160610
プロファイラGuiを用いたコード分析 20160610HIDEOMI SUZUKI
 
Cloudstack networking の内側
Cloudstack networking の内側Cloudstack networking の内側
Cloudstack networking の内側Hiroaki Kawai
 
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)Daisuke Ikeda
 
Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニングKensuke Nagae
 
道具を磨くことのススメ
道具を磨くことのススメ道具を磨くことのススメ
道具を磨くことのススメKenichi Masuda
 
Apache cloudstack4.0インストール
Apache cloudstack4.0インストールApache cloudstack4.0インストール
Apache cloudstack4.0インストールYasuhiro Arai
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Masahiro Nagano
 
GKEで半年運用してみた
GKEで半年運用してみたGKEで半年運用してみた
GKEで半年運用してみたKatsutoshi Nagaoka
 
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例Shigeru UCHIYAMA
 
Azure Arc Jumpstart - Azure ArcBox を使った Azure Arc 対応 SQL MI 学習環境の構築
Azure Arc Jumpstart - Azure ArcBox を使った Azure Arc 対応 SQL MI 学習環境の構築Azure Arc Jumpstart - Azure ArcBox を使った Azure Arc 対応 SQL MI 学習環境の構築
Azure Arc Jumpstart - Azure ArcBox を使った Azure Arc 対応 SQL MI 学習環境の構築Kazuki Takai
 
Web時代の大富豪的プログラミングのススメ
Web時代の大富豪的プログラミングのススメWeb時代の大富豪的プログラミングのススメ
Web時代の大富豪的プログラミングのススメHideyuki Takeuchi
 
Q con shanghai2013- 荣先乾-qzone_touch跨终端优化_v2.0
Q con shanghai2013- 荣先乾-qzone_touch跨终端优化_v2.0Q con shanghai2013- 荣先乾-qzone_touch跨终端优化_v2.0
Q con shanghai2013- 荣先乾-qzone_touch跨终端优化_v2.0Michael Zhang
 
20161121 open hyperscale#6
20161121 open hyperscale#620161121 open hyperscale#6
20161121 open hyperscale#6ManaMurakami1
 
Apache CloudStack 4.0 インストール(ver0.5)
Apache CloudStack 4.0 インストール(ver0.5)Apache CloudStack 4.0 インストール(ver0.5)
Apache CloudStack 4.0 インストール(ver0.5)Yasuhiro Arai
 
PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理junichi anno
 
GPGPU deいろんな問題解いてみた
GPGPU deいろんな問題解いてみたGPGPU deいろんな問題解いてみた
GPGPU deいろんな問題解いてみたRyo Sakamoto
 
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)Insight Technology, Inc.
 
20130714 July Tech Festa 日本CloudStackユーザー会
20130714 July Tech Festa 日本CloudStackユーザー会20130714 July Tech Festa 日本CloudStackユーザー会
20130714 July Tech Festa 日本CloudStackユーザー会samemoon
 

Similar to Zabbixでvmc statsの情報など監視 (20)

OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002
OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002
OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002
 
プロファイラGuiを用いたコード分析 20160610
プロファイラGuiを用いたコード分析 20160610プロファイラGuiを用いたコード分析 20160610
プロファイラGuiを用いたコード分析 20160610
 
Cloudstack networking の内側
Cloudstack networking の内側Cloudstack networking の内側
Cloudstack networking の内側
 
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
 
Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニング
 
道具を磨くことのススメ
道具を磨くことのススメ道具を磨くことのススメ
道具を磨くことのススメ
 
Apache cloudstack4.0インストール
Apache cloudstack4.0インストールApache cloudstack4.0インストール
Apache cloudstack4.0インストール
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
 
GKEで半年運用してみた
GKEで半年運用してみたGKEで半年運用してみた
GKEで半年運用してみた
 
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
 
Azure Arc Jumpstart - Azure ArcBox を使った Azure Arc 対応 SQL MI 学習環境の構築
Azure Arc Jumpstart - Azure ArcBox を使った Azure Arc 対応 SQL MI 学習環境の構築Azure Arc Jumpstart - Azure ArcBox を使った Azure Arc 対応 SQL MI 学習環境の構築
Azure Arc Jumpstart - Azure ArcBox を使った Azure Arc 対応 SQL MI 学習環境の構築
 
Web時代の大富豪的プログラミングのススメ
Web時代の大富豪的プログラミングのススメWeb時代の大富豪的プログラミングのススメ
Web時代の大富豪的プログラミングのススメ
 
Q con shanghai2013- 荣先乾-qzone_touch跨终端优化_v2.0
Q con shanghai2013- 荣先乾-qzone_touch跨终端优化_v2.0Q con shanghai2013- 荣先乾-qzone_touch跨终端优化_v2.0
Q con shanghai2013- 荣先乾-qzone_touch跨终端优化_v2.0
 
Eight meets AWS
Eight meets AWSEight meets AWS
Eight meets AWS
 
20161121 open hyperscale#6
20161121 open hyperscale#620161121 open hyperscale#6
20161121 open hyperscale#6
 
Apache CloudStack 4.0 インストール(ver0.5)
Apache CloudStack 4.0 インストール(ver0.5)Apache CloudStack 4.0 インストール(ver0.5)
Apache CloudStack 4.0 インストール(ver0.5)
 
PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理
 
GPGPU deいろんな問題解いてみた
GPGPU deいろんな問題解いてみたGPGPU deいろんな問題解いてみた
GPGPU deいろんな問題解いてみた
 
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
 
20130714 July Tech Festa 日本CloudStackユーザー会
20130714 July Tech Festa 日本CloudStackユーザー会20130714 July Tech Festa 日本CloudStackユーザー会
20130714 July Tech Festa 日本CloudStackユーザー会
 

Zabbixでvmc statsの情報など監視

  • 2. 自己紹介 • 大西正太 (株)DTS @shouta_dev • Rails歴7年位 – 自社サービス グループウェア (2006~) • http://www.bizca.jp – 受託開発色々 • 普通のRails • Heroku上アプリ(6 dyno) • 自転車が大好き! • お酒が大好き! • 岩ガキが大好き! • 生肉が大好き!
  • 3. 今日の内容 • ZabbixでCloudFoundryのインスタンスを試し にオートスケールしてみました • 連携できるか見たかっただけでさほど突き詰 めてないですが、あまり突っ込まないでくだ さい! ×
  • 4. オートスケール? • 負荷が高くなってきたら自動的にスケールア ウトする機構 • 突然の負荷上昇に自動対応 • CloudFoundryには現状ない? • サーバ側の何らかのメトリクスが閾値を超え たらスケールアウトを発動させる – レスポンスタイム – CPU、メモリ – プロセス数 – スコアボードなど
  • 5. Zabbix • オープンソースの監視ソフト • Itemを監視しTrigger条件を満 たしたらActionを実行すると いう構造 Item Trigger Action
  • 6. 今回やること • vmc statsのItem種別を追加する – エージェント拡張の機構を用いることでItemの種別を追加 できる • vmc instancesでスケールアウトするActionを追加する – Actionはシェルコマンドを定義できる 監視対象 メール Trigger 通知 CPU Item 条件 Action メモリItem スケール vmc stats Trigger アウト Item 条件 Action
  • 7. vmc stats? • vmc statsで該当アプリケーションのリソース状況を取得できる $ vmc stats xxx +----------+-------------+----------------+--------------+----------------+ | Instance | CPU (Cores) | Memory (limit) | Disk (limit) | Uptime | +----------+-------------+----------------+--------------+----------------+ |0 | 0.0% (4) | 23.1M (128M) | 56.0K (2G) | 0d:18h:53m:10s | |1 | 0.0% (4) | 18.0M (128M) | 52.0K (2G) | 0d:17h:42m:5s | +----------+-------------+----------------+--------------+----------------+ • vmcコマンドはCloudControllerのWebAPIを叩いてJSONで結果受け取り [{:state=>:RUNNING, :stats=>{:name=>“xxx", :host=>"172.30.49.137", :port=>40538, :uris=>[“xxx.cloudfoundry.co m"], :uptime=>71329.371288281, :mem_quota=>134217728, :disk_quota=>2147483648, :fds_quota=>256, :cores =>4, :usage=>{:time=>"2012-08-23 02:40:58 +0000", :cpu=>0.0, :mem=>23660.0, :disk=>57344}}, :instance=>0}, {:state=>:RUNNING, :stats=>{:name=>"s houtahello", :host=>"172.30.50.23", :port=>28052, :uris=>["shoutahello.cloudfoundry.com"], :uptime=>67064. 368383474, :mem_quota=>134217728, :disk_quota=>2147483648, :fds_quota=>256, :cores=>4, :usage=>{:time= >"2012-08-23 02:40:57 +0000", :cpu=>0.0, :mem=>18428.0, :disk=>53248}}, :instance=>1}]
  • 8. vmc stats 用Item種別追加 ■API叩く簡単な自作スクリプト ■Item種別の追加 #vmc_stats.rb #/etc/zabbix/zabbix-agentd.confに追記する require 'cli' opt = { :target => 'api.cloudfoundry.com', UserParameter=cloudfoundry.vmc.stats,ruby :email => 'xxxx@example.com', /home/zabbix/vmc_stats.rb :password => 'xxxx', :appname => 'xxxx' } client = VMC::Client.new(opt[:target], nil) token = client.login(opt[:email], opt[:password]) stats = client.app_stats(opt[:appname]) ※vmcコマンド直接ではなくvmc内部の sum = 0.0 クラスを利用 stats.each do |stat| →コマンドはログイン情報をファイルに sum += stat[:stats][:usage][:cpu].to_f 保持するため、複数のcloudfoundryアカ end ウントで監視したい場合などに動きがお average = sum / stats.length かしくなりそうだと考えたため #標準出力に数値を出力 puts average
  • 9. Itemの作成 • 普通のCPU監視などと同様に、画面 からcloudfoundry.vmc.statsを指定 してItemを作成 • Itemのグラフを定義するとグラフ表 示! ※今回30秒毎の監視で指定
  • 11. Action定義 ■スケールアウト自作スクリプト(徐々にスケールアウト) #vmc_instances.rb require 'cli' opt = { :target => 'api.cloudfoundry.com', :email => ‘xxxx@example.com', :password => ‘xxxx', :appname => ‘xxxx' } client = VMC::Client.new(opt[:target], nil) token = client.login(opt[:email], opt[:password]) app = client.app_info(opt[:appname]) current_instances_num = app[:instances] cmd = VMC::Cli::Command::Apps.new cmd.client(client) if current_instances_num <= 5 cmd.instances(opt[:appname], "+1") end
  • 12. 負荷掛けてみる • Jmeterで負荷 • CPUを消費するシンプルアプリ – 負荷掛けるとTrigger検知されて画面に出る require 'sinatra' get '/' do 100000000.times{} end
  • 13. 2500 1500 3500 500 2000 1000 3000 4000 0 1 43 85 127 169 211 253 295 337 379 421 463 505 善している 547 589 631 673 スケールアウト 715 757 799 841 883 925 967 1009 1051 1093 1135 1177 段になっている 1219 1261 1303 1345 1387 1429 1471 1513 1555 1597 1639 1681 オートスケールしてる 1 5 2 10 Jmeter • スケールアウトが自動実行されて性能改 スレッド数 リクエスト数
  • 14. 実用するには? • vmc statsで返ってくるCPUの精度が怪しい? • 平均値を返してるのか、使用率の上下が即時反映されない? • そもそもItemはCPUでいいのか? – CPUはAPがボトルネックという切分にはなるけど… – レスポンスタイムとか • ZabbixのWeb監視で実現可能 – 同時処理中のインスタンス数とか • そもそも取れる?Routerとか持ってない? • varzの情報にもないっぽい? – 複合条件 • ZabbixのTriggerで定義可能 • 歯止めの対応 – 連続で高負荷検知の場合スケールアウトとか • ZabbixのTriggerで定義可能 • スケールインの対応 • ZabbixのTriggerで定義可能