AWS(EC2)のCPU使用率の値が、Zabbixとコンソール(Cloudwatch)で乖離している
AWS上のEC2(Amazon Linux / Windows Server等)インスタンスを、Zabbixで監視しています。
その中で「CPU使用率」を、以下の式で取得しています。
・system.cpu.util[,user,avg5]
ところが、AWSのコンソール上のモニタ(Cloudwatch)で確認できるCPU使用率と、数値にかなり乖離があります。
・Zabbix:0~2%で推移(瞬間的に90%まで上昇することもある)
・AWSコンソール:20~60%で推移
こちらの要因について教えていただきたいです。
※おそらく、AWSコンソール側はインスタンスに割り当てられたCPUの中での使用率を表しており、監視すべきはこちらの値だと思っています。
ただ、Zabbixで今取得している値がいったい何なのかがよく分かりません。。
fripper - 投稿数: 495
Cloudwatch にて取得されるCPU使用率のメトリクス(CPUUtilization)で得られる値は
EC2 によってインスタンスへ割当されたCPU能力のうち、当該インスタンスがどの程度を
利用・消費しているか、という割合の指標だと思います
標準だと5分間、詳細モニタリングが有効だと1分間の値(おそらく平均値)だと考えます
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/viewing_metrics...
Zabbix の system.cpu.util[,user,avg5]の場合は
システム全体のCPU消費のうち、user プロセスに割当された時間の5分平均となります
https://www.zabbix.com/documentation/3.0/manual/config/items/itemtypes/z...
第2引数のtype 項目にて「user」を設定されているので、ユーザプロセスによる演算消費のみが
計上されている状況です
system/iowait や steal 等、他の要因によって消費されている部分が得られておらず、
EC2側にてトータルの使用率として計上されている「合算値」と一致しないのだと思います
ちなみに、system.cpu.util[]にて取得できる値をさまざまに合算しても、
EC2のメトリクス値と完全には一致しません
これは仮想マシンのハードウェア側レベルと、仮想マシン内のOSレベルとの差異もあるので
ある程度の誤差は許容するほか無いかと思います
また、Windows用エージェントの場合には、第2引数には「system」のみしかサポートされておらず
「user」を指定した場合には、値は取得できていないのではないかと思います
Windowsの場合には、パフォーマンスカウンタを利用した取得等、他の方法も含め
検討されると良いかと思います
参考:
http://www.zabbix.jp/node/3625
https://www.zabbix.com/forum/showthread.php?p=53017
hayap - 投稿数: 5
早速のご回答、ありがとうございました!大変助かりました。
「user」以外の状況を確認したところ、「nice」の消費が大きく、それを合算すると Cloudwatch に近い数値になり、合点がいきました。
(Zabbix の system.cpu.util[,user,avg5]はホストOS のCPU使用率という情報をどこかで握らされていたのですが、すっかり勘違いでした。。)
また、Windowsについてもご指摘いただき、ありがとうございました。
hayap - 投稿数: 5
fripperさま
すみません、可能であればまたご教授いただきたいのですが、
パフォーマンスカウンタを利用して(["\Processor(_Total)\% Processor Time"])取得したところ、こちらもややCloudwatchとの値に開きがありました。
・Zabbix:0~1%で推移
・AWSコンソール:5~6%で推移
こちらも、Linuxと同様、Cloudwatch上では「Processor Time」以外の値も含んでいるということだと思うのですが、何の差によるものか特定できずにいます。
もしご存知でしたら教えていただけますでしょうか。
TNK - 投稿数: 4754
少しだけ補足させて頂きます。
CloudWatchで取得できないStealの値が取得できると、運悪く物理
的に同じサーバー上で他のVMが大量にCPUの負荷をかけていて処理
が遅くなった時に、CloudWatch側ではCPUに負荷がかかっていない
と見えるのですが、Zabbix側ではStealという仮想環境の切り替え
処理にCPUの能力が消費されていることが確認できたりします。
他にも、Zabbixであれば、iowaitなどを参照することで、ディスク
のI/Oによるボトルネックを発見しやすいでしょう。
大雑把な負荷の把握であれば、CloudWatchで十分かもしれませんが、
詳細なOSの状態の変化を把握するのであれば、Zabbixが有効だと私
は考えています。
何をしたいか、それぞれのツールで何ができるのか、それらが要件
を満たしているかを合わせてご検討ください。
hayap - 投稿数: 5
補足ありがとうございました!
なるほど、一概にどちらが正しいというわけではなく、何をどう見たいのかをまず設計しないといけないということですね。。
勉強になります!
fripper - 投稿数: 495
先の投稿にて「参考」として挙げたURLの投稿で、TNKさんが、パフォーマンスカウンタに関するMSの記事をリンクされています
http://www.zabbix.jp/node/3625
https://technet.microsoft.com/ja-jp/library/2008.08.pulse.aspx#id0120037
この記事において、数種類のプロセッサ関連カウンタが列挙されているようです
また、検索した限りですが、他にも様々なProcessor関連カウンタがあるようですので
こちらの状況より、AWS側の値に近い値が得られるかもしれません
¥Processor(_Total)¥% Processor Time
¥Processor(_Total)¥% Privileged Time
¥Processor(_Total)¥% User Time
¥Processor(_Total)¥Interrupts/sec
私自身、Windows・パフォーマンスカウンタ周りの監視を利用した経験が乏しく、詳しくないので
あまりお力になれず、申し訳ありません