More Related Content
Similar to Zabbixでvmc statsの情報など監視
Similar to Zabbixでvmc statsの情報など監視 (20)
Zabbixでvmc statsの情報など監視
- 2. 自己紹介
• 大西正太 (株)DTS @shouta_dev
• Rails歴7年位
– 自社サービス グループウェア (2006~)
• http://www.bizca.jp
– 受託開発色々
• 普通のRails
• Heroku上アプリ(6 dyno)
• 自転車が大好き!
• お酒が大好き!
• 岩ガキが大好き!
• 生肉が大好き!
- 4. オートスケール?
• 負荷が高くなってきたら自動的にスケールア
ウトする機構
• 突然の負荷上昇に自動対応
• CloudFoundryには現状ない?
• サーバ側の何らかのメトリクスが閾値を超え
たらスケールアウトを発動させる
– レスポンスタイム
– CPU、メモリ
– プロセス数
– スコアボードなど
- 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
- 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で定義可能