CPU使用率の検知について

環境:Zabbix 2.2
OS:RHEL6.4

現在、以下のトリガーでCPUの使用率超過エラーを検知するようになっています。

{ホスト名:system.cpu.util[,idle].avg(120)}<5
(アイテム「system.cpu.util[,idle]」はデータ型:数値(不動少数)、単位:%で設定しています)

この設定の場合、CPUの空き容量が2分間の平均で5%を下回った場合(=95%以上の使用率となった場合)エラーとして検知する、という内容と認識しています。

最近、特定の時間にCPU使用率超過を検知するようになったため、topコマンドを1分ごとに仕掛けて原因を調査しようとしました。
しかしながら、topコマンドの結果を確認しても、95%の使用率となるようなプロセスは発見できませんでした。
2分間の平均なので、1回は使用率が高騰しているプロセスが発見できると考えたのですが……。

質問なのですが、ZabbixはCPUの使用率の確認をどの程度の頻度で実施しているのでしょうか。
1分ごとのtopコマンドで確認できないほど瞬間的な上昇をZabbixは検知してるのではと考え、このような質問をさせていただきました。

コメント表示オプション

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

> 質問なのですが、ZabbixはCPUの使用率の確認をどの程度の頻度で実施しているのでしょうか。
> 1分ごとのtopコマンドで確認できないほど瞬間的な上昇をZabbixは検知してるのではと考え、このような質問をさせていただきました。

内部的には、top コマンドの上段付近に表示されている system/user/iowait/steal 等の値と
同じ場所を参照しているようです
初期値となっている「avg1」の指定では、1分平均の値が取得されています
##取得のタイミングずれ等で、topコマンド等での表示と全く同じ値にならないことがあります

ご質問いただいた状況下では、system.cpu.util アイテムにて、idle が 5% を切るような状況となったのは
間違いないのだと思います

以下ページにマニュアルがありますが、
https://www.zabbix.com/documentation/2.2/jp/manual/config/items/itemtype...
system.cpu.util アイテムに指定するパラメータ項目のうち、
idle 等、取得する値のタイプを指定する部分には、監視対象がLinuxの場合
idle, nice, user, system, iowait, steal を指定することができるようです

Linux システムの場合、idleが5%といった余裕のない状態であっても、
各ユーザプロセスがCPU演算に使用している(一般的にはuser)の占める比率が低いことがあります

それは、以下のような理由によるもので、top や ps コマンド等で見える各プロセスのCPU使用率
以外の部分で消費されるCPU演算リソースがあるためです
◆ディスクやネットワーク等のI/O待ちによる iowait
◆OSのコアであるカーネルが割り込みや各プロセスの調停処理などに使う system
◆当該LinuxがVMゲストだった際に、VM親サーバ側が、VMゲスト間のCPU割当を調整する際などで見られる steal

プロセスの演算以外の理由で、CPUが消費されていないか、top コマンドの上段付近に
表示されている system/user/iowait/steal 等の値を確認されることをお奨めします

ユーザー RTX-008L の写真

fripper 様

丁寧なご回答ありがとうございます。
一つ質問なのですが、

>system.cpu.util アイテムに指定するパラメータ項目のうち、
>idle 等、取得する値のタイプを指定する部分には、監視対象がLinuxの場合
>idle, nice, user, system, iowait, steal を指定することができるようです

ということはLinux上でコマンドを叩かなくても、Zabbixのアイテムで「system.cpu.util[,system]」や「system.cpu.util[,iowait]」を設定すればそれらの値を取得できるのでしょうか。
新しい監視アイテムの設定によってCPUに大きく負担がかからないのであれば、CPU使用率超過の発生する時間帯に短いサイクルで「system」や「iowait」の値を確認し、原因を特定したいと思います。

ユーザー TNK の写真

質問の内容を読ませていただいて気になった点がありましたので、
確認させてください。

Linux上では、複数のプロセスが動いていますので、1つのプロセス
だけで95%を超えているとは限らないと思います。
起動されている複数のプロセスで総合的に95%以上の負荷がかかっ
ている状態が発生しているのではないでしょうか。

topコマンドで見るのであれば、%CPUの列の値を足し合わせてみて
ください。

質問なのですが、ZabbixはCPUの使用率の確認をどの程度の頻度で実施しているのでしょうか。

アイテムのキーの設定が、

 system.cpu.util[,idle]

であるならば、1分間での平均値が取得されているでしょう。

内部的には、10秒単位で取得して計算していたと思いますが、アイ
テムの値として取得できるのは、マニュアルにもあるとおり、引数
で指定することによって1分間、5分間、15分間の平均値を取得でき
ます。
https://www.zabbix.com/documentation/2.2/jp/manual/config/items/itemtype...

先の例でもあったように、引数で指定しないと1分間での平均値と
なります。

ということはLinux上でコマンドを叩かなくても、Zabbixのアイテムで「system.cpu.util[,system]」や「system.cpu.util[,iowait]」を設定すればそれらの値を取得できるのでしょうか。

fripperさんが書かれている通り、I/Oの負荷やOSの負荷、仮想環境
の切り替え処理でCPUが消費されているのであれば、それぞれiowait、
system、stealなどを指定することで、それぞれの負荷の割合を確
認することができます。

テンプレートのTemplate OS Linuxを使用されているのであれば、
それぞれ用のアイテムが登録されています。
グラフのCPU utilizationをみれば、それぞれがどのような比率に
なっているかもグラフで確認することができるようになっていると
思いますので、そちらもご確認ください。

ユーザー RTX-008L の写真

TNK様

ご指摘ありがとうございます。

>Linux上では、複数のプロセスが動いていますので、1つのプロセス
>だけで95%を超えているとは限らないと思います。
>起動されている複数のプロセスで総合的に95%以上の負荷がかかっ
>ている状態が発生しているのではないでしょうか。
>
>topコマンドで見るのであれば、%CPUの列の値を足し合わせてみて
>ください。

確認したのですが、合計でも95には届かない値でした。

>内部的には、10秒単位で取得して計算していたと思いますが、アイ
>テムの値として取得できるのは、マニュアルにもあるとおり、引数
>で指定することによって1分間、5分間、15分間の平均値を取得でき
>ます。
>https://www.zabbix.com/documentation/2.2/jp/manual/config/items/itemtype...

>先の例でもあったように、引数で指定しないと1分間での平均値と
>なります。

なるほど、avg1とは1分間の間に取得した6個(10秒ごと)の値の平均、という意味だったのですね。よくわかりました。

>テンプレートのTemplate OS Linuxを使用されているのであれば、
>それぞれ用のアイテムが登録されています。
>グラフのCPU utilizationをみれば、それぞれがどのような比率に
>なっているかもグラフで確認することができるようになっていると
>思いますので、そちらもご確認ください。

ありがとうございます、確認してみます。

ユーザー fripper の写真

> Zabbixのアイテムで「system.cpu.util[,system]」や「system.cpu.util[,iowait]」を設定すればそれらの値を取得できるのでしょうか
はい、示して戴いているとおりのアイテムを追加すれば取得可能です

> CPUに大きく負担がかからないのであれば‥短いサイクルで‥
結局のところ、3つ目のパラメータ(avg1 , avg5 , avg15 , 省略時の初期値はavg1)で、
取得される値が「1分平均」「5分平均」「15分平均」となるので
あまり細かい頻度で監視収集しても、それほどの意味は無いと思います

ユーザー RTX-008L の写真

> > CPUに大きく負担がかからないのであれば‥短いサイクルで‥
> 結局のところ、3つ目のパラメータ(avg1 , avg5 , avg15 , 省略時の初期値はavg1)で、
> 取得される値が「1分平均」「5分平均」「15分平均」となるので
> あまり細かい頻度で監視収集しても、それほどの意味は無いと思います

10秒ごとの値そのものを見ることはできないのですね、ご指摘ありがとうございます。