構成
Zabbix Server
- Zabbix 3.4
- CentOS
監視対象サーバ
- Windows Server 2012R2
- Apache 2.4
- Tomcat8.0
状況
オープン当初は正常に可動していたが、サーバが応答なしとなった。 エラーログを確認すると、以下のログが出力されていた。
[mpm_winnt:error] [pid 6064:tid 3268] [client AH00326: Server ran out of threads to serve requests. Consider raising the ThreadsPerChild setting
このエラーメッセージを調査すると、このメッセージが出力されてもすぐにサーバ応答なしになるようなことはなく、 リクエスは来た順番に処理されるとのこと。とすると、タイムアウトまで処理の順番待ちが回ってこなかったために エラーになってしまったと考えられる。
そもそも、このメッセージが出力された時点で、想定以上のアクセスがあったと考えられる。 → そのため、設定値の変更が必要。
今回の記事とは直接関係ないが、設定箇所は httpd-mpm.conf
# WinNT MPM # ThreadsPerChild: constant number of worker threads in the server process # MaxConnectionsPerChild: maximum number of connections a server process serves <IfModule mpm_winnt_module> ThreadsPerChild 131 ThreadLimit 131 MaxConnectionsPerChild 0 AcceptFilter http none AcceptFilter https none EnableSendfile off EnableMMAP off </IfModule>
<Location /examples/ > # ProxyPass ajp://localhost:8009/manager/ ProxyPass ajp://localhost:8009/manager/ ttl=60 min=0 smax=16 max=128 acquire=60000 retry=3 </Location>
設定の変更は必要だが、スレッドの使用状況を監視する必要がある。
調査
ZabbixでApacheを監視するにはどうするのかを調査すると、どうやらApacheのServer-statusの設定をしてやればいいと判明する。 便利なスクリプトとテンプレートを発見!これを使ってみよう。
参考: https://www.zabbix.org/wiki/Docs/howto/apache_monitoring_script
Apache mod_statusを有効にする。
Linux系の情報しかほぼ見つからない。 便利なスクリプトとテンプレートを発見!するも、やはりLinux系
でもとりあえずやってみた。
以下手順
- mod_statusを有効にする 監視対象サーバーのmod_statusを有効にして、http://172.0.0.1/server-statusで稼働状況を確認できるようにします。
■httpd.confの編集
c:\Apache24\conf\httpd.conf 以下の2行のコメントアウトを解除します。
#LoadModule status_module modules/mod_status.so #Include conf/extra/httpd-info.conf
Includeのコメントアウト解除を忘れていると以下のエラーメッセージが出力されています。
File does not exist: C:/Apache24/htdocs/server-status
■httpd-info.confの編集
c:\Apache24\conf\extra\httpd-info.conf 以下の行を編集します。 【編集前】
<Location /server-status> SetHandler server-status Require host .example.com Require ip 127 </Location>
【編集後】
<Location /server-status> SetHandler server-status Require all denied Require ip 127.0.0.1 </Location>
ここでは、ローカルとIPからしかアクセスできないように設定しています。
なぜかlocalhostでは失敗しました。
失敗していると以下のエラーログが出力されています。
'client denied by server configuration: C:/Apache24/htdocs/server-status'
■Apacheの再起動
■server-statusの動作確認
監視対象のサーバー内でブラウザを開き、以下のURLへアクセスします。
'http://127.0.0.1/server-status' コンソールにHTMLが表示されればOKです。
■Zabbixエージェントが実行するスクリプトの用意
スクリプト置き場として任意のフォルダを作成します。
今回は以下に作成しました。
'C:\zabbix_script'
メモ帳などで新規テキストファイルを作成し、
以下のページのスクリプトをコピペして「zapache.sh」として保存します。
コピペするスクリプト 'https://www.zabbix.org/wiki/Docs/howto/apache_monitoring_script#Method_3'
■Zabbixエージェントの設定ファイルの編集
UserParameterに作成したスクリプトを追加します。
'C:\zabbix\zabbix_agentd.conf' 最下部に以下を追記します。
UserParameter=apache[*],c:\BusyWorker sh c:\zabbix_sript\zapache.sh \$1
■Zabbixエージェントの再起動
- BusyBoxの導入
今回準備したzapache.shは、「.sh」である通り、シェルスクリプトなので、
そのままではWindows環境では利用できません。
そのため、今回はインストールなしに、Windows環境でUNIX、Linuxのコマンドを利用可能になる
「BusyBox」を導入することにします。
■busybox.exeの入手
以下のURLより、busybox.exeを入手してください。 'http://frippery.org/busybox/'
■busybox.exeの配置
今回はこのBusyBox.exeをC直下に置きました。
※場所は適宜変更下さい。
■busybox.exeの動作確認
コマンドプロンプトにて以下のコマンドを実行して下さい。
'C:\busybox.exe'
BusyBoxの情報が表示されれば成功です。
ここまでで、監視対象サーバー上での作業は終わりです。
3.Zabbixサーバ側の設定
■Apache用の監視テンプレートの作成
以下のページのXML(Here’s the Zabbix Template XML: の下)をコピーして、ファイルを作成します。
'https://www.zabbix.org/wiki/Docs/howto/apache_monitoring_script#Method_3'
Template_Apache_Stats.xmlという名前にしました。
■テンプレートのインポート
ブラウザでZabbixのダッシュボードを開きます。
設定 -> テンプレート をクリックして、画面右上のインポートボタンをクリックします。
ファイルを選択してインポートボタンをクリックします。
■監視項目の設定変更
設定 -> テンプレート からインポートしたテンプレートの”アイテム”をクリックします。
“Apache/TotalAccesses.”をクリックします。
アイテムの横にある保存前処理を選択。
”保存前処理のステップ”に”差分”を追加して更新します。
TotalAccess数は単調増加するため、この設定をすることで1分ごと(更新間隔が60秒の場合)のアクセス数を記録することができます。
■監視対象サーバーのApache監視を有効にする
設定 -> ホスト から監視対象サーバーをクリックします。
テンプレートタブをクリックして、Apacheのテンプレートを追加します。