zabbixでnginx+passenger+Ruby on RailsのCPU利用率の監視方法について

識者の皆様

いつも勉強をさせて頂いています
今回、zabbixでnginx+passenger+Ruby on Railsの環境を監視をしたいと考えています
nginx+passenger+Ruby on Rails環境にはzabbix_agentをinstallしてあります

nginx+passenger+Ruby on Railsに外部よりwebの負荷をかけ、zabbix_serverでCPUの利用率を確認すると
userの利用率は上昇せず、CPUのidle値のみが減少をするという状況になります

自分なりに原因を想像をしてみたのですが、Ruby on Railsはnginx+passenger経由で呼び出されており
zabbixとしてはnginx負荷のみを計測しているかでは無いかと考えています

この様な状況の場合、どの様なアイテムを作成すればRuby on Railsの負荷をzabbixで計測する事が出来るのでしょうか

識者の皆様、ご指導よろしくお願い申し上げます

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー KAZ の写真

TETSUYA Saitoさん

ご使用のZabbixのバージョン(マイナーバージョン)書いて頂けますか?A(^^;

自分なりに原因を想像をしてみたのですが、Ruby on Railsはnginx+passenger経由で呼び出されており
zabbixとしてはnginx負荷のみを計測しているかでは無いかと考えています

Zabbixは/proc/cpuinfoを取ってるはずです。A(^^;

どの監視項目についてか書いてないですがsystem.cpu.utilで取得している値の話でしょうか?
Linux2.6系ならuser 、nice、idle、system、iowait、interrupt、softirq、stealの値が取れるのですが、
変化しているのはidleだけでしょうか?
基本idle以外の使用率+idleの使用率で100%にならないとおかしいのですが…A(^^;

ちなみにvmstatのuserはuser+niceの値を表示していて、Zabbixと比べると変わって見えるはずです。

ユーザー KAZ の写真

TETSUYA Saitoさん

ご使用のZabbixのバージョン(マイナーバージョン)書いて頂けますか?A(^^;

自分なりに原因を想像をしてみたのですが、Ruby on Railsはnginx+passenger経由で呼び出されており
zabbixとしてはnginx負荷のみを計測しているかでは無いかと考えています

Zabbixは/proc/cpuinfoを取ってるはずです。A(^^;

どの監視項目についてか書いてないですがsystem.cpu.utilで取得している値の話でしょうか?
Linux2.6系ならuser 、nice、idle、system、iowait、interrupt、softirq、stealの値が取れるのですが、
変化しているのはidleだけでしょうか?
基本idle以外の使用率+idleの使用率で100%にならないとおかしいのですが…A(^^;

ちなみにvmstatのuserはuser+niceの値を表示していて、Zabbixと比べると変わって見えるはずです。

ユーザー TETSUYA Saito の写真

KAZさん

ご指導ありがとうございます
情報の提示が不足しており、申し訳有りませんでした

現在、利用をしているのはamazon linuxでzabbix2.2.5を利用しています

正確には、nice、iowaitの値は変化をしています
一番、わかりやすいところとしてはidleの値で監視サーバーにwebの負荷をかけると
idle値が減少します
所が、userの値はzabbixをグラフを見ている限り変化をしません

監視対象サーバーでtopを利用うぃsて確認すると、Passenger経由でRuby on Railsが起動し
CPUも利用しているのが確認できます
この時のPassenger経由でRuby on Railsを実行しているユーザーはroot以外の一般ユーザーです

もしかすると、root以外のuserのCPU利用率はzabbix+zabbix_agentでは確認することが出来ないのでしょうか?
※そんなことないですよね

ユーザー TNK の写真

特定ユーザのプロセスの負荷しか計測しないということはありませ
ん。

CPUに関してKAZさんが書かれていた、

 user 、nice、idle、system、iowait、interrupt、softirq、steal

のすべてを確認されていますか?
掛ける負荷が低すぎて負荷試験になっていないということはありま
せんか?

ユーザー KAZ の写真

TETSUYA Saitoさん

niceの値が変わっているんですよね?
優先度高いプロセスが割り込みで動作しているだけでは?
niceの値が上がる代表的なプログラムはウィルス対策ソフトかな?

↓ちなみにtopのユーザモードやシステムモードにはniceが含まれるそうです。
http://codezine.jp/unixdic/w/top

vmstatを例に出しましたが、vmstatのuserはuser+niceを表示してます。
zabbixはuserのみです。

Passenger経由のRuby on Railsは不勉強で良くわかりませんが、
優先順位が高いプログラムならniceが上がりますよ。

なので、TETSUYA Saitoさんが見たいuserの値はZabbixではuser+niceみれば良いのではないですか?

↓niceについてはこのwikiに書いてあります。
nice (UNIX)
https://ja.wikipedia.org/wiki/Nice_(UNIX)

ユーザー TETSUYA Saito の写真

TNKさん
KAZさん

ご指導ありがとうございます
KAZさんにご指導を頂いた

user 、nice、idle、system、iowait、interrupt、softirq、steal
についてはzabbixのCPU Utilizationで各状況を確認していました

このグラフ事態は多くの情報が一つのグラフにまとめられているのですが、あまりに情報が重なりすぎて
視認性がわるく、下記のアイテムのグラフを作成しました

【アイテム】
system.cpu.util[,idle,avg1]
system.cpu.util[,system,avg1]
system.cpu.util[,user,avg1]
上記のアイテムでグラフを作成し、監視対象に負荷をかけて、グラフを確認をすると
idleの値のみが減少していき、system、userともに、ほぼグラフに変化はありませんでした

現在はcpuのidle値を計算アイテムで100から引くことでCPUの利用率を可視化をしています

この状況で概ね問題ないのですが、userのCPU利用率が上手く確認できない疑問は残ったままで
原因がわかれば今後の運用にやくだつのではと考えています

どうぞ、ご指導をよろしくお願いします

ユーザー TNK の写真

例えば、他のツールなどを利用してどの程度の負荷がかかっている
ことが確認できているのですか?

あと、どの程度の時間負荷をかけてみたのですか?
デフォルトのTemplate OS Linuxなどをそのまま利用した場合、60
秒間隔での値取得ですので、負荷を掛けてもリアルタイムで値が上
昇するわけではありません。

つまり、5分とか10分とか負荷を掛け続けて、他のツールやコマン
ドの出力との比較をされましたか?

ユーザー KAZ の写真

備忘録的に…

■Zabbix
system.cpu.util[,system,] … sys
system.cpu.util[,user,] … user
system.cpu.util[,nice,] … nice

■vmstat
sy … sys
ur … user + nice

■top
system … sys + nice
user … user + nice
nice … nice

■参考URL
http://www.tomiryu.com/others/vmstat_timestamp/
http://codezine.jp/unixdic/w/top
http://itpro.nikkeibp.co.jp/article/COLUMN/20060228/231193/

因みに上記でZabbixとvmstatは去年とある時にソース解析してます。
Zabbixは2.0系でしたけどZabbix2.2でも基本変わってないかと。
vmstatはCentOS6.5にバンドルのバージョンのsrpmを解析しました。
topはネットの情報より推測になります。

違っていたらご指摘ください。

ユーザー TETSUYA Saito の写真

TNKさん
KAZさん

早速のご指導、ありがとうございます
webの負荷は5分程度は継続させて確認をしています

zabbix以外のツールとしてはsarやtop等で確認をしています
topで確認をすると、ユーザー名でCPU利用率は少なからず変動(10%〜30%程度)変動をしています
ずっと張り付いているわけではないので、もしかするとavg1で平均化されると値がそれほど高くはならないのかもしれません

sarも”sar 10”で10秒単位でweb負荷を変えた状態のアプリケーションサーバーでuserのCPU利用率を確認していたのですが
topで確認できる内容と近似値にならない状況です

そもそも、sarでもzabbixと同様の事象なのですが、この辺りに因果関係をあったりするのでしょうか

ユーザー KAZ の写真

TETSUYA Saitoさん

確か、sarもZabbixと同様にuserはuserのみでniceが入ってません。

vmstatとzabbix比べてみてください。
zabbixのuser+niceがvmstatのurになる筈です。

ユーザー TETSUYA Saito の写真

KAZさん

遅いresponseで申し訳ありません
たしかに、nice+userでvmstatのデータと同じになりました

今回のRuby on RailsのuserのCPU利用率としては、user値とnice値の合算が一番の近似値という理解でいいでしょうか?

今の所、zabbixでは100-idleをした値を可視化しています
system全体としては上記が正しいですし、純粋のRuby on Railsの値はuser値とnice値の合算になると思いますので
両方をグラフ化してみて、負荷をかけた時のデータを可視化して、推移を観察をしたいと思います

今回はご指導ありがとうございました

ユーザー KAZ の写真

TETSUYA Saitoさん

たしかに、nice+userでvmstatのデータと同じになりました

良かった。
ソース読んだといった手前違ってら恥ずかし~な、と…A(^^;

今回のRuby on RailsのuserのCPU利用率としては、user値とnice値の合算が一番の近似値という理解でいいでしょうか?

如何計測したいかなのですが…A(^^;
topコマンド userの近似値はuser値とnice値の合算かと。

今の所、zabbixでは100-idleをした値を可視化しています
system全体としては上記が正しいですし、純粋のRuby on Railsの値はuser値とnice値の合算になると思いますので
両方をグラフ化してみて、負荷をかけた時のデータを可視化して、推移を観察をしたいと思います

トータルの使用率はそれ良いかと~
全体のcpuパワーをグラフにするならtotalとidle以外を積層グラフにすれば良いかな?

因みにtopとかvmstatはOSに入ってくるライブラリのsrpmを取ってきて解析すると動きわかります。
※:Zabbixの共有メモリ周りの処理読むよりよっぽど簡単に読めます。(笑)

詰まった時にはソース読んでみるのもお勧めです。
私はZabbixとvmstatのuserの値が違うのでソース読み解決しました。A(^^;

ユーザー heya の写真

>topコマンド userの近似値はuser値とnice値の合算かと。

Zabbix とはあまり関係ないんですが、実際試してみたところ、top の user と nice は足されてないような気がします。
#ソースは読んでいません・・・。

確認方法
・ほとんど何もしていないサーバー(CentOS 7、id(idle) がほぼ 100 で、us(user) も sy(system) も ni(nice) もほぼ 0)で、yes > /dev/null (※)だけを実行するシェルスクリプト test.sh を作る
・top を実行して %Cpu(s) を眺めておく
・別ターミナルでログインして、test.sh を、nice で優先度を変えて実行する

その結果、nice 値を 10 にして実行した場合は、ni の値が大きくなりましたが us はほぼ 0 のままでした。
#ちなみに、nice 値を 0 以下にした場合は、ni はほぼ 0 のままで us が大きくなりました。

※これを実行すると一気に CPU 使用率が上がります。Ctrl-C で止めます。

同様のことを FreeBSD でもやってみましたが、こちらも nice だけが大きくなり user はほぼ 0 のままでした。

>↓ちなみにtopのユーザモードやシステムモードにはniceが含まれるそうです。
>http://codezine.jp/unixdic/w/top
このページには
  nice :nice値が負のプロセス
  なお、nice値が負のプロセスのCPU使用時間は、ユーザモードやシステムモードの
  時間としてもカウントされるので、これらの総計は100%より大きくなります。
と書いてありますが、top では nice 値が正(0 より大きい=優先度が低い)のプロセスの%が出ていると思うので、どこかに勘違いがあるんじゃないかと思います。
#そもそも私がこんなこと調べたのは top の CPU 欄の nice って何だ?
#ページによって書いてあることが違う・・・どれが正しいの?と思って調べ始めたので。

http://qiita.com/k0kubun/items/7368c323d90f24a00c2f
  niceで実行優先度を変更したプロセスがユーザモードでCPUを消費した時間
→正負は関係なく、0 以外ということ?

https://serverfault.com/questions/116950/what-does-nice-mean-on-cpu-util...
  the "nice" CPU percentage is the % of CPU time occupied by user level
  processes with a positive nice value (lower scheduling priority
  -- see man nice for details)
→正の値?

vmstat ははっきり man に書かれているから分かりやすいんですけどね・・・。
 CPU
  These are percentages of total CPU time.
  us: Time spent running non-kernel code. (user time, including nice time)
  (以下略)