誰でも ZABBIX

Zabbixの使い方、役に立つ情報、等々

4. Zabbix serverの設定 - StartPollers

SNMP、Zabbixエージェント、外部スクリプト経由で監視データを取得する場合、Zabbixサーバのpollerプロセスがデータを取得します。

監視ホストやアイテムの数が増えていくと、pollerプロセスの処理能力を超えるタイミングが必ずきます。

今回は、pollerの起動数を増やす方法と、システムへの影響(メモリ使用量)を確認します。

pollerプロセスの負荷

pollerプロセスは、SNMP、Zabbixエージェントや外部スクリプトでデータを取得する際に、1つのプロセスが1件ずつ処理を行っています。 pollerプロセスが1つしか動いていない場合、1つのアイテムを取得するのに0.1秒要するのなら、1秒間に10件のアイテムが取得できます。プロセスを10個にすれば、100件/秒のアイテムが取得可能です。

監視プロトコルや、監視対象間の通信環境、負荷状況などにより、どのアイテムが何ミリ秒で取得できるかは、実際の環境で監視してみないとわからないケースがほとんどです。そのため、pollerプロセスの数がどの程度が適切かどうかは、実際の負荷状況を見ながら、調整することになります。

監視アイテムの応答速度、pollerプロセスの負荷の関係は、こちらに記載しました。

unam.hatenadiary.jp

pollerプロセスの数とメモリ消費量

pollerプロセスは、今現在の環境(V3.4.7)では、1つ10MByte程度のようです(RSSのところが物理メモリ(Kbyte)です)。

$ ps aux | egrep ": [p]oller|[R]SS"
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
zabbix   31558  0.0  0.9 241392 10104 ?        S    20:31   0:00 /usr/sbin/zabbix_server: poller #1 [got 2 values in 0.005837 sec, idle 1 sec]
zabbix   31559  0.0  0.9 241376 10112 ?        S    20:31   0:00 /usr/sbin/zabbix_server: poller #2 [got 0 values in 0.000008 sec, idle 1 sec]
zabbix   31560  0.0  0.9 241376 10140 ?        S    20:31   0:00 /usr/sbin/zabbix_server: poller #3 [got 1 values in 0.000726 sec, idle 1 sec]
zabbix   31561  0.0  0.9 241376 10112 ?        S    20:31   0:00 /usr/sbin/zabbix_server: poller #4 [got 0 values in 0.000007 sec, idle 1 sec]
zabbix   31562  0.0  0.9 241392 10124 ?        S    20:31   0:00 /usr/sbin/zabbix_server: poller #5 [got 0 values in 0.000265 sec, idle 1 sec]


監視対象が増えると、pollerプロセスの負荷を下げるためにプロセスを増やす必要がありますが、メモリの容量も計算に入れて値を設定する必要があります。 特定のプロセスがどの程度メモリを使っているかは、Zabbixエージェントのproc.mem[]で監視することも可能です。詳細は、こちらに記載しました。

unam.hatenadiary.jp

現時点(プロセス数5)のメモリ消費量をZabbixでグラフにすると以下のようになります。

Zabbixエージェントのキー

proc.mem[,,sum,"zabbix_server: poller",rss]


グラフ

f:id:Unam:20180220214254p:plain

プロセスのメモリ使用量の合計が20MBから50MBに急に上がっています。実は、このグラフを確認する直前にZabbixのバージョンを3.4.7に変えたので、その影響かもしれません。 メモリ容量ぎりぎりでプロセスを大量に起動している環境で、プロセスあたりのメモリ使用量が2.5倍になるとちょっときついと思うのですが・・・。バージョンアップを行う際は、こういう点も気をつけて確認しないと怖いですね。

pollerプロセスは、最大1000まで設定できるようですが、今確認している環境はあまりメモリの余裕がないので、設定値を30にして、実際にメモリがどの程度増えるか確認します。

pollerプロセスの数を変更

$ sudo vi /etc/zabbix/zabbix_server.conf
# StartPollers=5
StartPollers=30

$sudo service zabbix-server restart


再起動後、プロセスが増えた分、使用している物理メモリの量も増えています。

f:id:Unam:20180220215421p:plain

実際のOSへの影響は、他の監視データなども見ながら影響を見極める必要がありますが、まずは、プロセス数を増やしたらその分に比例して、メモリリソースがなくなる、ということを認識してプロセスの起動数を調整しましょう。