【わたしに♥おまかせ Zabbix②】Zabbixサーバーと内部プロセスについて

Zabbix, まるごとおまかせZabbix, わたしにおまかせZabbix, 製品紹介

こんにちは!プラットフォーム技術部の齊藤(沙)です。

前回は Zabbix の構成要素と、その一つであるWebインターフェースについて確認しました。今回は Zabbix の構成要素の中でも監視や通知機能を担っている Zabbixサーバー について確認していきたいと思います。

前回の記事はこちら。

まとめ記事作りました♥

Zabbixを知ろう -設定ファイル編: Zabbixサーバー-

ZabbixサーバーはC言語で開発されており、Windows を除く Linux、Unix 系のOS上で動作する監視マネージャーです。Zabbixサーバーに関する設定ファイルは以下があります。

/etc/zabbix/zabbix_server.conf

こちらは、内部プロセスの起動数や、ロギング、データベースの接続先など Zabbixサーバー に関する様々な設定が記載されています。

ListenPort=10051                                #TrapperのListenポート番号
SourceIP=                                       #監視に利用するIPアドレス
LogType=file                                    #Log出力形式(syslog or file or console)
LogFile=/var/log/zabbix/zabbix_server.log       #Logファイル出力先(LogType=file時のみ指定)
LogFileSize=0                                   #Logファイルの最大サイズ(0=自動ローテーション無効)
DebugLevel=3                                    #Logレベル(0-5)
PidFile=/var/run/zabbix/zabbix_server.pid       #PidFile作成先
DBHost=localhost                                #データベース接続先
DBName=zabbix                                   #接続先データベース名
DBUser=zabbix                                   #データベース接続用ユーザー名
DBPassword=zabbix                               #データベース接続用パスワード
DBSocket=/tmp/mysql.sock                        #データベースソケットファイルPath
DBPort=3306                                     #データベース接続先ポート番号
StartPollers=5                                  #Poller起動数
StartIPMIPollers=0                              #IPMI Poller起動数
StartPollersUnreachable=1                       #Unreachable Poller起動数
StartTrappers=5                                 #Trapper起動数
StartPingers=1                                  #ICMP Pinger起動数
StartDiscoverers=1                              #Discover起動数
StartHTTPPollers=1                              #HTTP Poller起動数
StartTimers=1                                   #Timer起動数
StartEscalators=1                               #Escalator起動数
JavaGateway=127.0.0.1                           #Java Gateway接続先
JavaGatewayPort=10052                           #Java Gateway接続先Port
StartJavaPollers=2                              #Java Poller起動数
StartVMwareCollectors=0                         #VMware Collector期度数
VMwareFrequency=60                              #VMwareへの新データ取得間隔(秒)
VMwarePerfFrequency=60                          #VMwareへのパフォーマンスデータ取得間隔(秒)
VMwareCacheSize=8M                              #VMwareデータを保存するための共有メモリサイズ
VMwareTimeout=10                                #VMwareへの処理におけるタイムアウト間隔(秒)
SNMPTrapperFile=/var/log/snmptt/snmptt.log      #SNMPTrap受信用の一時ファイル名
StartSNMPTrapper=1                              #SNMP Trapper起動数
ListenIP=127.0.0.1                              #TrapperのListenIP
HousekeepingFrequency=1                         #ハウスキーピング処理実行間隔(時間)
MaxHousekeeperDelete=5000                       #1回のハウスキーピング処理で削除されるレコード数
SenderFrequency=30                              #Zabbixサーバーが未送信のアラートを送信する頻度(秒)
CacheSize=8M                                    #ホスト、アイテム、トリガーデータを保存するための共有メモリサイズ
CacheUpdateFrequency=60                         #Zabbixサーバーが設定キャッシュの更新を行う頻度(秒)
StartDBSyncers=4                                #DB Syncer起動数
HistoryCacheSize=16M                            #ヒストリデータを保存するための共有メモリサイズ
HistoryIndexCacheSize=4M                        #ヒストリインデックスを保存するための共有メモリサイズ
TrendCacheSize=4M                               #トレンドデータを保存するための共有メモリサイズ
ValueCacheSize=8M                               #アイテムヒストリデータの要求をキャッシュするための共有のメモリサイズ
Timeout=3                                       #監視ポーリングのタイムアウト間隔(秒)
TrapperTimeout=300                              #Trapperのタイムアウト間隔(秒)
UnreachablePeriod=45                            #ホストが利用不可とみなす接続できない期間(秒)
UnavailableDelay=60                             #ホストが稼働していない期間中に、ホストの可用性を確認する間隔(秒)
UnreachableDelay=15                             #ホストに接続できない期間中に、ホストの可用性を確認する間隔(秒)
AlertScriptsPath=/usr/lib/zabbix/alertscripts   #通知用スクリプト格納先Path
ExternalScripts=/usr/lib/zabbix/externalscripts #外部スクリプト格納先Path
FpingLocation=/usr/sbin/fping                   #fpingのバイナリ格納先Path
Fping6Location=/usr/sbin/fping6                 #fping6のバイナリ格納先Path
SSHKeyLocation=                                 #公開鍵と秘密鍵の格納先Path
LogSlowQueries=0                                #スロークエリのログ出力閾値(0=無効,ミリ秒)
TmpDir=/tmp                                     #一時ファイル格納先Path
StartProxyPollers=1                             #Proxy Poller起動数
ProxyConfigFrequency=3600                       #Zabbixプロキシに対する設定データ送信間隔(秒)
ProxyDataFrequency=1                            #Zabbixプロキシに対してヒストリデータを要求する間隔(秒)
AllowRoot=0                                     #Zabbixサーバーのroot起動可否(0=拒否,1=許可)
User=zabbix                                     #Zabbixサーバーの起動ユーザー指定
SSLCertLocation=${datadir}/zabbix/ssl/certs     #証明書格納先Path
SSLKeyLocation=${datadir}/zabbix/ssl/keys       #Keyファイル格納先Path
SSLCALocation=                                  #認証局ファイル格納先Path
LoadModulePath=${libdir}/modules                #サーバモジュールの格納先Path
LoadModule=                                     #起動時に読み込むモジュール名
TLSCAFile=                                      #認証局ファイル格納先Path
TLSCRLFile=                                     #証明書失効リストPath
TLSCertFile=                                    #証明書格納先Path
TLSKeyFile=                                     #Keyファイル格納先Path

とってもたくさんのパラメーターがありますね!

初期構築時のセットアップや監視機能の拡張、パフォーマンスチューニングと様々なシーンで編集する機会がある設定ファイルです。

バージョンが進むにつれて、パラメーターも増加しており、LTS(長期サポート)バージョンでは3.0から新たに通信暗号化に関連するパラメーターが追加されています。

Zabbixサーバー のことをもっとよく知るために、続いて設定ファイルにも記載がある各内部プロセスについて確認していきます。

Zabbixを知ろう -Zabbixサーバー編: 内部プロセス その①-

Zabbix の構成要素の一つである Zabbixサーバー ですが、内部では役割に応じて様々な内部プロセスが動作しています。今回は監視機能を担う内部プロセスを中心に確認していきます。

Poller

Poller は、Zabbixエージェント や SNMP、シンプルチェックの一部などのポーリング系の監視を行います。Zabbix における監視項目の多くは Poller が実行を担うこととなるため、監視のパフォーマンスに大きく関連する内部プロセスです。

Poller の Busy 率が高い値で推移し続けたり、上記ポーリング系の監視 Queue の滞留などパフォーマンスに問題が生じた場合、Poller の起動数を増やすことでそれらの問題に対処します。

Poller に限った話ではないですが、各内部プロセスはデータベースへコネクションを張るため、起動数を増やした場合、データベース上の接続上限数が超過しないよう注意が必要です。

ICMP Pinger

ICMP Pinger は、fping を用いて ICMP Ping 監視を行います。

ICMP Pinger は監視対象機器が存在する Network レスポンスの影響を受けやすく、レイテンシが大きい場合、ICMP Pinger の Busy 率も上昇します。

Busy 率が高い値で推移し続けたり、Ping 監視の Queue の滞留が生じた場合は起動数を増やすことで対処します。ICMP による死活監視は多くの監視対象で実施すると思いますので、監視対象を追加時には ICMP Pinger の Busy 率に対して注視が必要です。

HTTP Poller

HTTP Poller は、HTTP や HTTPS によるWEB監視を行います。

HTTP Poller は、監視対象となるWebシステムのレスポンスの影響を受けやすく、レスポンスが悪い場合 HTTP Poller の Busy 率が上昇します。

Busy 率が高い値で推移し続けたり、WEB監視の Queue の滞留が生じた場合は、起動数を増やしたり、WEB監視設定上の TimeOut 設定を縮めることで対処します。

IPMI Poller

IPMI Poller は、IPMI によるHW監視を行います。

デフォルト設定では無効(起動数0)となっているため、HW監視を行う場合は起動数を増やし、有効化する必要があります。

IPMI Poller は監視対象のHW管理モジュールへコネクションを張ります。起動数を増やすとそれに応じてHW管理モジュールへの接続数も増加しますので、起動数を増やす場合にはHW管理モジュールのセッション数の上限値を超えないよう注意が必要です。

(私はZabbix触りたての頃、軽率に IPMI Poller の起動数を増やしてしまい、セッション上限超えの接続エラーを多発させ、監視通知の滞留を引き起こしてしまった苦い思い出があります。。。)

Java Poller

Java Poller は、 JMX(Java Management Extensions) 監視を行います。

JMX監視を行うためには、Zabbix の構成要素の一つである Zabbix Java Gateway の導入及び起動が必要となります。Java Poller は上記 Zabbix Java Gateway を介して、TOMCAT などのAPサーバーからスレッドやヒープに関する値を取得します。

起動数を変更する際には、Zabbix Java Gateway の START_POLLERS の値を上回らないよう注意が必要です。

Proxy Poller

Proxy Poller は Zabbix の構成要素の一つであるZabbixプロキシをパッシブモードで動作させている場合、それを介して監視を行います。

他の内部プロセス同様、Busy 率が上昇した場合は、起動数を増やすことで対処します。

Unreachable Poller

Unreachable Poller はネットワークエラー等で監視が行えなかった監視項目の再監視を行います。

ネットワークや監視対象の高負荷、障害発生時など監視が行えない状態が生じるとBusy率が急激に上昇するため比較的注視が必要な内部プロセスです。

Busy 率が上昇している場合は、上記障害や負荷の解消、リリース前の監視不能な監視対象のメンテナンスモード適用などの対応と併せて、起動数を増やすことで対処します。

まとめ

今回は、Zabbixサーバーの設定ファイルと、Zabbixサーバーの監視実行を主に担う内部プロセスについて、確認しました。考慮点は多々あるものの・・・Zabbixサーバーのチューニングは、

  • 内部プロセスの起動数を増やす!※不用意に増やしすぎない!
  • 各内部プロセスのBusy率は平常時30%以下になるように調整する

が大切ですね!

次回は、通知処理やデータベースへの書き込みなどを担う内部プロセスについて一緒に勉強しましょう!

次回の記事はこちら。

アークシステムでは、Zabbixの環境構築や保守サポートを低価格・短納期で実現する「まるごとおまかせZabbix」を提供しています。 本サービスの詳細や、Zabbixを活用したソリューションにご興味をお持ちの方がいらっしゃいましたら サービス紹介ページ からお気軽にお問合わせ下さい。

  • 株式会社アークシステムの来訪管理・会議室予約システム BRoomHubs
  • 低コスト・短納期で提供するまるごとおまかせZabbix