doodle-on-web

自分で調べたことや、仕事の中で質問されたことなどをまとめています。

ZaabbixからWindowsServerのApacheを監視する際のポイント

構成

Zabbix Server

監視対象サーバ

  • 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>

httpd-proxy-ajp.conf

<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

でもとりあえずやってみた。

以下手順

  1. 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エージェントの再起動

  1. BusyBoxの導入 今回準備したzapache.shは、「.sh」である通り、シェルスクリプトなので、
    そのままではWindows環境では利用できません。
    そのため、今回はインストールなしに、Windows環境でUNIXLinuxのコマンドを利用可能になる
    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のテンプレートを追加します。

以上で、Windows Server 版のApacheをZabbixで監視するための設定は終わりです。