この記事は Mackerel プラグインアドベントカレンダー(全部CRE) の2日目です。
それでは2日目は mackerel-plugin-apache2
です。
ここではApacheの細かい説明は割愛します。
mackerel-plugin-apache2はWebServerとして広く使われているApache2専用のpluginです。
こちらは README.md にも書いてある通り、 server-status
を可視化してくれるプラグインで簡単に導入することができます。
インストールと設定手順
本プラグインはプラグイン集として提供しているパッケージの mackerel-agent-plugins
に含まれています。
インストール先は /usr/bin/mackerel-plugin-apache2
です。
mackerel-plugin-apache2のインストールはこれだけではなく、Apache Server側にも追加の設定が必要です。 httpd.confを適宜設定して下記の内容を追記してください。
Listen 1080 ExtendedStatus On <VirtualHost 127.0.0.1:1080> <Location /server-status> SetHandler server-status </Location> </VirtualHost>
これにより http://127.0.0.1:1080/server-status/
にアクセスするとApache2の情報が見れるようになります。
実際にはプログラムで整形しやすいように http://127.0.0.1:1080/server-status?auto
にアクセスしており、下記のような出力になります。
mackerel-plugin-apache2はこの情報をパースしてグラフにしてくれるのです。 次にMackerelのプラグインはコマンドですので実行する事ができます。
※/usr/bin はPATHが通っているので省略出来ます
-- /usr/bin はPATHが通っているので省略出来ます # mackerel-plugin-apache2 -p 1080 apache2.workers.busy_workers 1.000000 1511852690 apache2.workers.idle_workers 9.000000 1511852690 apache2.bytes.bytes_sent 20.000000 1511852690 apache2.cpu.cpu_load 0.564763 1511852690 apache2.req.requests 20.000000 1511852690 apache2.scoreboard.score-_ 9.000000 1511852690 apache2.scoreboard.score-W 1.000000 1511852690 apache2.scoreboard.score- 246.000000 1511852690
設定ファイルであるmackerel-agent.confは標準では /etc/mackerel-agent/mackerel-agent.conf
にインストールされます。
こちらに下記のとおり追記しましょう。
[plugin.metrics.apache2] command = "mackerel-plugin-apache2 -p 1080"
以上を行った上でmackerel-agentを再起動してください。
見れるメトリック
server-statusで見れる情報についてはApacheの公式ドキュメントに纏まっています。
mod_status - Apache HTTP サーバ バージョン 2.4
ですがもう少し具体的に見ていきましょう。
各グラフ定義ごとに説明します。
また表に出てくるdiffとはプラグイン上で差分値計算をするかどうかです。
◯
となっている項目はプラグインで前回の実行時の値と差分値計算して出力しています。
Apache Workers
メトリック名(ラベル) | プラグインの出力名 | diff | 説明 |
---|---|---|---|
Busy Workers | apache2.workers.busy_workers | ー | リクエスト処理中のサーバプロセス(スレッド)数 |
Idle Workers | apache2.workers.idle_workers | ー | リクエスト待ち状態のサーバプロセス(スレッド)数 |
前述のコマンドでは下記の部分です。
apache2.workers.busy_workers 1.000000 1511852690 apache2.workers.idle_workers 9.000000 1511852690
現状のApacheのプロセスまたはスレッドの状態がわかります。
StartServers 60 MinSpareServers 60 MaxSpareServers 60 MaxClients 60
上記のようにApacheに設定されていた場合、常に busy_workers+idle_workers=60
となります。
例えばbusy_workersが多い場合はApacheが忙しいと言えますし100%になるとリクエストが捌けていない状態です。
この場合はWebServerの台数を増やしてロードバランシングするかアプリケーションをチューニングが必要です。
busy_workersがMaxClientsに達する前に気づく必要がありますのでbusy_workersがMaxClientsの7割程度でWarningのアラートを設定するのが良いでしょう。
逆にWebサービスとしてはアクセスされてなさ過ぎることも問題です。
その場合はidle_workersを監視して場合によってはWebServerの台数を減らすなどのチューニングを行いましょう。
Apache Bytes
メトリック名(ラベル) | プラグインの出力名 | diff | 説明 |
---|---|---|---|
Bytes Sent | apache2.bytes.bytes_sent | ◯ | 1分間あたりの合計通信量 |
前述のコマンドでは下記の部分です。
apache2.bytes.bytes_sent 20.000000 1511852690
元になるserver-statusは合計通信量ですがプラグインで出力される値は前回の実行された値との差分となっています。 例えばアクセスが少ないが画像ファイルが大量にあるようなWebページがボトルネックになっているなどがわかります。 この場合は更にCDNに移行してどれくらいトラフィックが減ったかなどもわかります。
Apache CPU Load
メトリック名(ラベル) | プラグインの出力名 | diff | 説明 |
---|---|---|---|
CPU Load | apache2.cpu.cpu_load | ー | CPU使用率(UNIX版) |
前述のコマンドでは下記の部分です。
apache2.cpu.cpu_load 0.564763 1511852690
こちらはシステムメトリックスのload average5やcpuとは違いApacheのみの値になります。 そのため該当のホストのCPUの高騰がApache起因なのか、それとも他のアプリケーション起因なのか切り分けすることが出来ます。 例えばWebServerがバッチ処理を兼任している場合など併せて見ると便利です。
Apache Requests
メトリック名(ラベル) | プラグインの出力名 | diff | 説明 |
---|---|---|---|
Requests | apache2.req.requests | ◯ | 1分間あたりの合計アクセス回数 |
前述のコマンドでは下記の部分です。
apache2.req.requests 20.000000 1511852690
元になるserver-statusは合計アクセス回数ですがプラグインで出力される値は前回の実行された値との差分となっています。 その名のとおり、Apacheに対するアクセス数です。 多く捌ければ捌けるほどホストを有効活用しているといえます。 他の値でアラートが来た時に想定どおりのアクセス数を捌けているかの確認することが大切です。
Apache Scoreboard
メトリック名(ラベル) | プラグインの出力名 | diff | 説明 |
---|---|---|---|
Waiting for connection | score-_ | ー | リクエスト待ち |
Starting up | score-S | ー | 起動処理中 |
Reading request | score-R | ー | クライアントからのリクエストを受信中 |
Sending reply | score-W | ー | リクエストの処理実行、およびクライアントへレスポンス送信中 |
Keepalive | score-K | ー | アイドル接続状態でリクエスト受信待ち |
DNS lookup | score-D | ー | ルックアップ中 |
Closing connection | score-C | ー | 接続終了 |
Logging | score-L | ー | ログ出力処理中 |
Gracefully finishing | score-G | ー | gracefulリスタートにおける処理終了待ち |
Idle cleanup | score-I | ー | スレッド停止中 |
Open slot | score- | ー | 起動してない状態 |
前述のコマンドでは下記の部分です。
apache2.scoreboard.score-_ 9.000000 1511852690 apache2.scoreboard.score-W 1.000000 1511852690 apache2.scoreboard.score- 246.000000 1511852690
前述の引用元にも書いてありますがスコアボートは稼働中のプロセスの個々の状態です。 上記のプロセス数をカウントした合計値がMackerelに投稿されています。 そのため、アクセス数が少なく、プロセスに余裕があればOpen slotが増えますし、アクセスが増えれば逆に他のプロセス状態が増えます。 そのためApacheの状態を知りたいときはスコアボートを活用することが重要ですがMackerelはとてもわかりやすくスコアボートを可視化してくれていますので是非ご活用ください。
2日目はWebServerで2大巨頭のApache2のプラグインについての説明でした。 明日は皆さんお待ちかね、Webサーバの2大巨頭のもう一つ、nginxです。 引き続き、Mackerel プラグインアドベントカレンダーをお楽しみに!