これは何?
Apache のチューニングに使える情報を Datadog でモニタリングする手段を試した結果の共有です!
EC2 インスタンスサイズの最適化のためにサーバーのサイズに合わせて Apache をチューニングしたいという場合などに役立てば幸いです😌
構成図
理解しやすくなると思うので最終的な状態の構成図を先に見ていただきます!
登場する主な用語について
Amazon EC2 インスタンス
AWS の仮想サーバー
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-instances-and-amis.html
Apache
Webサーバソフトウェア
https://httpd.apache.org/
status モジュール
Apache の状態を読み取ることができるモジュール
https://httpd.apache.org/docs/2.4/ja/mod/mod_status.html
Datadog
クラウド アプリケーションのための モニタリングとセキュリティ プラットフォーム
https://www.datadoghq.com/ja/
ゴールについて
Apache の status モジュールで読み取れる情報を Datadog ダッシュボードで表示する
前提
- Datadog のインテグレーション設定で Apache Integration が有効になっている
- AWS アカウントで EC2 インスタンスが起動している
- EC2 インスタンス の OS は Amazon Linux 2 とする
- EC2 インスタンス にはすでに Datadog エージェントがインストールされているものとする
- EC2 インスタンス にはすでに Apache がインストールされているものとする
- EC2 インスタンス の Apache のバージョンは 2.4 とする
- EC2 インスタンス の Apache の MPM は event とする
- EC2 インスタンス の Apache では VirtualHost を利用している前提とする
手順
EC2 インスタンスの Apache で status モジュールが有効になっているか確認する
以下のコマンドで現在 status モジュールがロードできているか確認します。
httpd -M | grep status
以下のような結果になったらすでに Apache で status モジュールが有効になっています。
# httpd -M | grep status status_module (shared)
上記で確認して有効になっていなかった場合は status モジュールを有効にします。
方法については割愛します。
EC2 インスタンスの Apache で status モジュール用の設定をする
今回は status モジュール用の VirtualHost として /etc/httpd/conf.d/localhost_vhost.conf
を作成することにします。
vi /etc/httpd/conf.d/localhost_vhost.conf
以下の内容を保存します。
ExtendedStatus On <VirtualHost 127.0.0.1:80> ServerName Localhost DocumentRoot /var/www/html ErrorLog /var/log/httpd/localhost.error.log CustomLog /var/log/httpd/localhost.access.log combined <Location /server-status> SetHandler server-status Require all denied Require ip 127.0.0.1 </Location> </VirtualHost>
設定のシンタックスチェックをします。
httpd -t
結果が Syntax OK
になることを確認します。
設定を読み込ませるために Apache を再起動します。
systemctl restart httpd
EC2 インスタンスの Apache で status モジュールへの疎通確認をする
以下のコマンドを実行して status モジュールへの疎通確認をします。
curl http://localhost:80/server-status?auto
以下のような結果になれば疎通確認が成功となります。
# curl http://localhost:80/server-status?auto localhost ServerVersion: Apache/2.4.61 () ServerMPM: event Server Built: Jul 16 2024 16:34:56 CurrentTime: Friday, 09-Aug-2024 08:45:51 UTC RestartTime: Friday, 09-Aug-2024 08:26:35 UTC ParentServerConfigGeneration: 1 ParentServerMPMGeneration: 0 ServerUptimeSeconds: 1155 ServerUptime: 19 minutes 15 seconds Load1: 0.00 Load5: 0.00 Load15: 0.00 Total Accesses: 5 Total kBytes: 5 Total Duration: 1 CPUUser: .06 CPUSystem: .04 CPUChildrenUser: 0 CPUChildrenSystem: 0 CPULoad: .00865801 Uptime: 1155 ReqPerSec: .004329 BytesPerSec: 4.4329 BytesPerReq: 1024 DurationPerReq: .2 BusyWorkers: 1 GracefulWorkers: 0 IdleWorkers: 74 Processes: 3 Stopping: 0 ConnsTotal: 0 ConnsAsyncWriting: 0 ConnsAsyncKeepAlive: 0 ConnsAsyncClosing: 0 Scoreboard: _____________________________W_____________________________________________.....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
EC2 インスタンスの Datadog エージェントの設定を変更する
以下のコマンドを実行して Datadog エージェントの Apache に関する設定ファイルのディレクトリの中身を確認します。
ls /etc/datadog-agent/conf.d/apache.d
以下のような結果が表示されます。
# ls /etc/datadog-agent/conf.d/apache.d auto_conf.yaml conf.yaml.example
この結果の中で auto_conf.yaml
が存在する場合は注意が必要です。
これは Datadog エージェントがインストールされたときに自動で作成された設定ファイルになります。
ただ、今回のケースでは自動で作成された設定ファイルのままではやりたいことが実現できないため、このファイルはファイル名を変更して使えないようにします。
具体的には以下のコマンドを実行します。
mv /etc/datadog-agent/conf.d/apache.d/auto_conf.yaml /etc/datadog-agent/conf.d/apache.d/auto_conf.yaml_`date +'%Y%m%d'`
このコマンドを実行することでファイル名が auto_conf.yaml_20240809
のように末尾に年月日が付きます。
その後、今回のケースのために設定ファイルを新たに作ります。
vi /etc/datadog-agent/conf.d/apache.d/conf.yaml
中身は以下を書き込みます。
init_config: instances: - apache_status_url: http://localhost:80/server-status?auto
今回のケースのための設定ファイルを作成したら Datadog エージェントを再起動して設定ファイルを読み込ませます。
systemctl restart datadog-agent
意図した通りに設定ファイルが読み込まれたかどうかを確認します。
具体的には以下のコマンドを実行します。
datadog-agent status
出力結果の中に以下のような項目が表示されていれば成功です。
========= Collector ========= Running Checks ============== apache (4.5.1) -------------- Instance ID: apache:XXXXXXXXXXXX [OK] Configuration Source: file:/etc/datadog-agent/conf.d/apache.d/conf.yaml Total Runs: 4 Metric Samples: Last Run: 25, Total: 100 Events: Last Run: 0, Total: 0 Service Checks: Last Run: 1, Total: 4 Average Execution Time : 62ms Last Execution Date : 2024-08-09 09:07:29 UTC (1723194449000) Last Successful Execution Date : 2024-08-09 09:07:29 UTC (1723194449000)
Apache の status モジュールで取得できる情報を Datadog で見てみる
今回は apache.performance.busy_workers
という Apache でリクエストを処理しているワーカースレッドの数を表す項目について Datadog でデータの可視化を試みます。
この項目について公式ドキュメントでは以下のように説明されています。
https://docs.datadoghq.com/integrations/apache/?tab=host
The number of workers serving requests.
日本語訳 : リクエストを処理するワーカーの数
Apache のチューニング項目対象になるものとして MaxRequestWorkers
, ThreadsPerChild
, ServerLimit
が挙げられると思います。
その際にそれらの値をチューニングする際に、実際にどんなリクエストがどれだけ来たらこれくらいの間にこれだけの数のワーカースレッドが処理中となることが分かればチューニングの助けになると思います。
そのため、今回は リクエストを処理するワーカーの数 に当たる apache.performance.busy_workers
をモニタリングします。
モニターで見てみる
Datadog で apache.performance.busy_workers
の値でのモニター作成を試みている様子が以下です。
query は以下のようにしています。
avg:apache.performance.busy_workers{host:【EC2 インスタンスの Datadog エージェントで設定されている hostname】} by {host}
ちゃんと値が取れていることが確認できました!
ダッシュボード見てみる
上記では以下を並べて確認しています。
- Apache の リクエストを処理しているワーカースレッドの数 (
apache.performance.busy_workers
) - CPU 使用率
- メモリ使用率
こうすることによってその時その時のリクエスト処理数とサーバーのリソース使用状況を見比べることができるので Apache のチューニングの参考として利用できるのではと思います。
以上です!