負荷分散環境でApacheのメトリクスを収集する方法を徹底解説

負荷分散環境でApacheを運用する際には、サーバーのリソース使用状況やパフォーマンスを把握することが重要です。アクセスが集中する時間帯やサーバーの応答速度を正確にモニタリングしないと、サービスの品質低下やダウンタイムのリスクが高まります。

Apacheは、モジュールや外部ツールを用いることで、サーバーの稼働状況やパフォーマンスをリアルタイムに計測することが可能です。特に負荷分散環境では、複数のApacheサーバーが並行してリクエストを処理するため、全体の動作状況を一元的に管理する必要があります。

本記事では、Apacheのメトリクスを収集し、サーバーの安定稼働とパフォーマンス向上を図る具体的な方法を解説します。標準モジュールであるmod_statusの設定方法から、PrometheusやGrafanaといったモダンな監視ツールとの連携方法まで、実践的な手法を幅広く取り上げます。

負荷分散環境でのメトリクス収集に課題を感じている方、Apacheサーバーの監視を強化したい方に向けた実用的なガイドとなっています。

目次
  1. Apacheで収集可能なメトリクスの種類
    1. 1. リクエスト関連のメトリクス
    2. 2. 接続数とトラフィック
    3. 3. CPU・メモリ使用率
    4. 4. ワーカースレッドの状態
    5. 5. エラーや障害に関するメトリクス
  2. mod_statusモジュールを使ったメトリクス収集方法
    1. 1. mod_statusの有効化
    2. 2. mod_statusの設定ファイル編集
    3. 3. Apacheの再起動
    4. 4. メトリクスの確認方法
    5. 5. 自動的にメトリクスを収集する方法
  3. Prometheusと連携してApacheメトリクスを収集する方法
    1. 1. 必要なツールのインストール
    2. 2. Apache Exporterの設定
    3. 3. Prometheusの設定
    4. 4. メトリクスの確認
    5. 5. Apache Exporterの動作確認
  4. GrafanaでApacheメトリクスを可視化する方法
    1. 1. Grafanaのインストール
    2. 2. Prometheusをデータソースとして追加
    3. 3. Apacheメトリクス用のダッシュボード作成
    4. 4. 既存のダッシュボードをインポート
    5. 5. ダッシュボードの活用
  5. Apacheのログ解析による追加データの取得方法
    1. 1. Apacheのログの種類
    2. 2. ログの保存場所と確認方法
    3. 3. Apacheのログ形式のカスタマイズ
    4. 4. goaccessを使ったリアルタイムログ解析
    5. 5. エラーログ解析で障害の早期発見
    6. 6. ログの定期解析とレポート自動生成
  6. Apacheメトリクスを収集する際の注意点とベストプラクティス
    1. 1. mod_statusのセキュリティ設定
    2. 2. メトリクス収集の頻度とパフォーマンス
    3. 3. メトリクスデータの保存期間
    4. 4. 必要なメトリクスだけを収集
    5. 5. 負荷分散環境でのデータ統合
    6. 6. アラート設定で障害の早期検知
    7. 7. メトリクスの正確性の確認
    8. まとめ
  7. 負荷分散環境におけるメトリクス収集の課題と対策
    1. 1. 課題: 各サーバーの状態が個別にしか確認できない
    2. 2. 課題: サーバー間のメトリクス差異
    3. 3. 課題: ダウンしたサーバーが監視対象から外れる
    4. 4. 課題: 負荷分散環境のリソース使用状況が見えにくい
    5. 5. 課題: データの一貫性と時差
    6. まとめ
  8. 実践例:負荷分散環境でのApacheメトリクス運用例
    1. 1. 環境構成
    2. 2. メトリクス収集の流れ
    3. 3. 各サーバーでのApache Exporter設定
    4. 4. Prometheusでの監視設定
    5. 5. Grafanaダッシュボードの作成
    6. 6. アラート設定の実装
    7. 7. ログ解析とメトリクスの併用
    8. まとめ
  9. まとめ

Apacheで収集可能なメトリクスの種類


Apacheは多様なメトリクスを提供しており、これらを適切に収集・解析することでサーバーの状態を詳細に把握できます。収集可能な主なメトリクスは以下の通りです。

1. リクエスト関連のメトリクス


Apacheはサーバーに送信されるリクエストの数や、処理に要した時間を記録します。

  • 総リクエスト数:一定期間内に処理されたリクエストの合計数
  • 処理中のリクエスト数:現在処理中のリクエスト数
  • リクエストあたりの応答時間:各リクエストが完了するまでの平均時間

2. 接続数とトラフィック


サーバーの負荷状況を把握するためには、接続数やデータ転送量のモニタリングが重要です。

  • 現在のアクティブ接続数:現在接続しているクライアントの数
  • 転送データ量:送受信されたデータの総量

3. CPU・メモリ使用率


サーバーがどれだけのリソースを消費しているかを把握することで、リソースの逼迫やボトルネックを特定できます。

  • CPU使用率:Apacheプロセスが消費しているCPUの割合
  • メモリ消費量:Apacheが使用しているメモリの量

4. ワーカースレッドの状態


Apacheはマルチプロセスまたはマルチスレッドモデルを採用しており、各ワーカースレッドの状態を記録します。

  • アイドルワーカー数:待機中のワーカースレッド数
  • ビジーワーカー数:処理中のワーカースレッド数

5. エラーや障害に関するメトリクス


エラーログや障害発生件数もメトリクスの一部です。障害の兆候を早期に検知できます。

  • エラーレート:発生したエラーの割合
  • 5xxエラー数:サーバー内部エラーの回数

これらのメトリクスはApacheが標準で備えるmod_statusモジュールを使うことで簡単に収集できます。次のセクションでは、mod_statusを使った具体的な収集方法について解説します。

mod_statusモジュールを使ったメトリクス収集方法


Apacheのmod_statusモジュールは、サーバーの稼働状況をリアルタイムで確認できる便利なツールです。mod_statusを使うことで、現在のリクエスト数やワーカーの状態など、Apacheの内部メトリクスを簡単に取得できます。

1. mod_statusの有効化


まずはmod_statusモジュールを有効化します。デフォルトでインストールされている場合が多いですが、有効でない場合は以下のコマンドで有効にします。
CentOS/RHEL:

sudo yum install httpd -y
sudo a2enmod status


Ubuntu/Debian:

sudo apt install apache2 -y
sudo a2enmod status

2. mod_statusの設定ファイル編集


次に、Apacheの設定ファイルを編集し、mod_statusページへのアクセスを許可します。
設定ファイルを開きます。

sudo nano /etc/httpd/conf/httpd.conf  # CentOS/RHEL
sudo nano /etc/apache2/apache2.conf    # Ubuntu/Debian

以下のように記述して、ローカルホストからのアクセスを許可します。

<Location "/server-status">
    SetHandler server-status
    Require local
</Location>


リモートからのアクセスを許可する場合は、特定のIPアドレスを指定します。

Require ip 192.168.1.0/24

3. Apacheの再起動


設定を反映させるためにApacheを再起動します。

sudo systemctl restart apache2  # Ubuntu/Debian
sudo systemctl restart httpd    # CentOS/RHEL

4. メトリクスの確認方法


ブラウザで以下のURLにアクセスします。

http://localhost/server-status


リモートからアクセスする場合は、以下のようにサーバーのIPアドレスを指定します。

http://<サーバーIP>/server-status

ページを開くと、リクエスト数、ワーカーの状態、CPU使用率などが確認できます。

5. 自動的にメトリクスを収集する方法


cronジョブを設定して定期的にメトリクスを記録することも可能です。以下のコマンドで結果をファイルに出力できます。

curl http://localhost/server-status?auto >> /var/log/apache_metrics.log

この方法で収集したデータは、後で解析や可視化に活用できます。次のセクションでは、Prometheusを使ったより高度なメトリクス収集方法を紹介します。

Prometheusと連携してApacheメトリクスを収集する方法


Prometheusは強力なモニタリングツールで、Apacheのメトリクスを効率的に収集・保存できます。特に負荷分散環境では、複数のApacheサーバーのデータを一元管理できるため、パフォーマンス監視や障害対応が容易になります。

1. 必要なツールのインストール


PrometheusとApache Exporterを導入します。Apache Exporterは、Apacheのmod_statusからデータを収集し、Prometheusが読み取れる形式でエクスポートします。

Ubuntu/Debian:

sudo apt update
sudo apt install prometheus


CentOS/RHEL:

sudo yum install prometheus

次に、Apache Exporterをダウンロードして配置します。

wget https://github.com/Lusitaniae/apache_exporter/releases/download/v1.0.0/apache_exporter-1.0.0.linux-amd64.tar.gz
tar -xzf apache_exporter-1.0.0.linux-amd64.tar.gz
sudo mv apache_exporter /usr/local/bin/

2. Apache Exporterの設定


Apache Exporterはmod_statusからデータを取得します。mod_statusが有効になっていることを確認してください。
次に、Apache Exporterを実行してPrometheusがデータを取得できるようにします。

apache_exporter --scrape_uri=http://localhost/server-status?auto

デーモンとして動作させる場合は、以下のsystemdサービスファイルを作成します。

sudo nano /etc/systemd/system/apache_exporter.service


以下を記述します。

[Unit]
Description=Apache Exporter
After=network.target

[Service]
ExecStart=/usr/local/bin/apache_exporter --scrape_uri=http://localhost/server-status?auto
Restart=always

[Install]
WantedBy=multi-user.target


サービスを起動し、有効化します。

sudo systemctl daemon-reload
sudo systemctl start apache_exporter
sudo systemctl enable apache_exporter

3. Prometheusの設定


Prometheusの設定ファイルにApache Exporterを追加します。

sudo nano /etc/prometheus/prometheus.yml


以下を追加します。

scrape_configs:
  - job_name: 'apache'
    static_configs:
      - targets: ['localhost:9117']

Prometheusを再起動して設定を反映します。

sudo systemctl restart prometheus

4. メトリクスの確認


PrometheusのWebインターフェースにアクセスし、Apacheのメトリクスが収集されていることを確認します。

http://localhost:9090


クエリ欄に「apache_up」と入力して、Apacheが正常に動作しているかを確認します。

5. Apache Exporterの動作確認


Apache Exporterが正しくデータを取得しているかを以下で確認できます。

http://localhost:9117/metrics

次のセクションでは、収集したメトリクスをGrafanaで可視化する方法を解説します。

GrafanaでApacheメトリクスを可視化する方法


Prometheusで収集したApacheのメトリクスを視覚的に確認するには、Grafanaを活用するのが最適です。Grafanaはダッシュボード形式でデータを表示し、リアルタイムの状態監視や過去のトラフィック分析が可能になります。

1. Grafanaのインストール


まずはGrafanaをインストールします。

Ubuntu/Debian:

sudo apt update
sudo apt install -y grafana


CentOS/RHEL:

sudo yum install -y grafana


インストール後、サービスを開始して自動起動を有効化します。

sudo systemctl start grafana-server
sudo systemctl enable grafana-server

Grafanaのデフォルトポートは3000です。次のURLでGrafanaにアクセスできます。

http://<サーバーIP>:3000


初回ログイン時のユーザー名とパスワードはadmin/adminです。ログイン後、パスワードを変更してください。

2. Prometheusをデータソースとして追加

  1. Grafanaの管理画面にログインし、左メニューからConfiguration -> Data Sourcesを選択します。
  2. Add data sourceをクリックし、一覧からPrometheusを選択します。
  3. 以下の内容を入力します。
  • URL: http://localhost:9090
  • Scrape Interval: 15s(デフォルトでOK)
  1. Save & Testをクリックして、接続が成功することを確認します。

3. Apacheメトリクス用のダッシュボード作成


ダッシュボードを作成し、Apacheメトリクスを視覚化します。

  1. 左メニューからCreate -> Dashboardを選択します。
  2. Add a new panelをクリックし、クエリ欄に以下を入力します。
  • 現在のリクエスト数:
    apache_http_requests_total
  • アクティブワーカー数:
    apache_worker_busy
  • 空きワーカー数:
    apache_worker_idle
  1. グラフの形式をTime seriesに変更し、Applyをクリックして保存します。

4. 既存のダッシュボードをインポート


Grafanaにはコミュニティが提供する豊富なダッシュボードが存在します。Apache用のテンプレートをインポートすることで、手軽に高度なグラフを利用できます。

  1. Dashboards -> Importを選択します。
  2. Grafanaの公式サイトで「Apache」と検索し、適したダッシュボードのIDを入力します。(例:3894
  3. Prometheusをデータソースとして選択し、インポートを完了します。

5. ダッシュボードの活用


作成またはインポートしたダッシュボードでは、Apacheの稼働状況をリアルタイムで確認できます。

  • CPU・メモリ使用率
  • リクエスト数の推移
  • エラー数の監視

負荷分散環境においても、複数サーバーの状態を1つのダッシュボードで監視可能です。これにより、異常が発生した際に迅速に対応できます。

次は、Apacheのログ解析を通じてさらに詳細なデータを取得する方法について解説します。

Apacheのログ解析による追加データの取得方法


Apacheのアクセスログエラーログは、サーバーの動作状況やパフォーマンスを詳細に把握する重要なデータソースです。メトリクス収集と併用することで、ボトルネックの特定や不正アクセスの検知など、より高度な運用が可能になります。

1. Apacheのログの種類


Apacheには主に以下の2種類のログがあります。

  • アクセスログ (access.log)
    クライアントからのリクエストに関する情報が記録されます。リクエスト元のIPアドレス、アクセスしたURL、ステータスコード、データ転送量などが含まれます。
  • エラーログ (error.log)
    サーバーで発生したエラーや警告が記録されます。アプリケーションエラーや不正なアクセス試行など、トラブルシューティングに役立ちます。

2. ログの保存場所と確認方法


デフォルトでは、以下のディレクトリにログが保存されます。
Ubuntu/Debian:

/var/log/apache2/


CentOS/RHEL:

/var/log/httpd/


アクセスログをリアルタイムで確認するには以下のコマンドを実行します。

sudo tail -f /var/log/apache2/access.log


エラーログを確認するには以下を使用します。

sudo tail -f /var/log/apache2/error.log

3. Apacheのログ形式のカスタマイズ


Apacheのログ形式はLogFormatディレクティブを使ってカスタマイズ可能です。以下の例は、詳細な情報を記録するための設定例です。

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
  • %h – リクエスト元IP
  • %t – リクエスト時刻
  • %r – リクエストライン(GET/POSTなど)
  • %>s – HTTPステータスコード
  • %b – レスポンスのバイトサイズ

この設定は/etc/apache2/apache2.conf(Ubuntu/Debian)または/etc/httpd/conf/httpd.conf(CentOS/RHEL)で行います。

4. goaccessを使ったリアルタイムログ解析


goaccessはApacheログをリアルタイムで解析し、視覚的に結果を表示できるツールです。
Ubuntu/Debian:

sudo apt install goaccess


CentOS/RHEL:

sudo yum install goaccess


リアルタイムでアクセスログを解析するには以下のコマンドを使用します。

sudo goaccess /var/log/apache2/access.log --log-format=COMBINED


ブラウザで可視化したい場合はHTMLレポートを生成します。

goaccess /var/log/apache2/access.log -o /var/www/html/report.html


レポートはhttp://<サーバーIP>/report.htmlで確認できます。

5. エラーログ解析で障害の早期発見


エラーログからは、頻発する500系エラーや不正アクセスの兆候を確認できます。
以下のコマンドで特定のエラーを抽出可能です。

grep "500" /var/log/apache2/error.log


特定のIPからの不正アクセスが多発している場合は、fail2banなどを活用して自動的にアクセスを遮断できます。

6. ログの定期解析とレポート自動生成


cronジョブを使って、定期的にログ解析とレポート生成を行うことで、運用の自動化が可能です。
例として、毎日午前3時にgoaccessレポートを生成する設定を行います。

crontab -e


以下の行を追加します。

0 3 * * * goaccess /var/log/apache2/access.log -o /var/www/html/daily_report.html

これにより、Apacheのパフォーマンスやエラーの傾向を定期的に把握し、必要な対応を迅速に行うことができます。次のセクションでは、メトリクス収集時の注意点やベストプラクティスについて解説します。

Apacheメトリクスを収集する際の注意点とベストプラクティス


Apacheのメトリクス収集は、システムの安定性やパフォーマンスの最適化に直結します。しかし、適切に設定しないと不要な負荷がかかったり、正確なデータが得られなかったりする可能性があります。ここでは、メトリクス収集時の注意点と、効率的に運用するためのベストプラクティスを解説します。

1. mod_statusのセキュリティ設定


mod_statusを利用する際、誰でもアクセスできる状態にしてしまうと、サーバーの稼働状況が外部に公開され、セキュリティリスクが高まります。アクセス制限を設け、必要な環境からのみメトリクスを確認できるようにしましょう。
以下の設定例では、ローカルネットワークからのみアクセスを許可しています。

<Location "/server-status">
    SetHandler server-status
    Require ip 192.168.1.0/24
</Location>


ポイント:

  • mod_statusの結果を外部に公開しない
  • 必要最小限のIPアドレス範囲に制限する

2. メトリクス収集の頻度とパフォーマンス


メトリクス収集の頻度が高すぎると、Apacheの処理に負荷がかかります。特に高トラフィック環境では、スクレイピングの間隔を調整して、サーバーのリソース消費を抑えることが重要です。

Prometheus設定例:

scrape_configs:
  - job_name: 'apache'
    scrape_interval: 30s  # 過剰な収集を避ける
    static_configs:
      - targets: ['localhost:9117']


30秒〜1分間隔での収集が一般的ですが、負荷状況に応じて柔軟に設定してください。

3. メトリクスデータの保存期間


収集したメトリクスデータを無制限に保存すると、ストレージの消費量が増加します。Prometheusなどのツールでは保存期間を制限し、不要なデータを自動削除するよう設定します。

global:
  scrape_interval: 15s
  retention: 15d  # 15日分だけ保存


長期保存が必要なデータは別途ログファイル時系列データベースに保存しましょう。

4. 必要なメトリクスだけを収集


すべてのメトリクスを収集するとデータ量が膨大になり、解析に時間がかかります。本当に必要なメトリクスだけを選別し、収集するようにしましょう。

例: よく使われるメトリクス

  • リクエスト数 (apache_http_requests_total)
  • エラーレート (apache_http_errors_total)
  • アクティブワーカー数 (apache_worker_busy)
  • アイドルワーカー数 (apache_worker_idle)

収集対象を限定することで、効率的な監視体制を構築できます。

5. 負荷分散環境でのデータ統合


負荷分散環境では、複数のApacheサーバーが稼働しているため、それぞれのメトリクスを統合して一元的に監視する必要があります。Prometheusのターゲット設定で、複数サーバーのメトリクスを収集しましょう。

例: 複数ターゲットの設定

scrape_configs:
  - job_name: 'apache'
    static_configs:
      - targets: ['192.168.1.10:9117', '192.168.1.11:9117']


これにより、サーバー全体の状態を可視化し、問題発生時に迅速に原因を特定できます。

6. アラート設定で障害の早期検知


Apacheの状態が異常になった際に自動的に通知が送られるよう、アラートを設定します。PrometheusではAlertmanagerを使い、特定の条件でメールやSlack通知を送信できます。

例: アクティブワーカーが限界に達した場合のアラート

alerting:
  alertmanagers:
    - static_configs:
      - targets: ['localhost:9093']
  rule_files:
    - "alert.rules"

groups:
  - name: apache_alerts
    rules:
      - alert: HighBusyWorkers
        expr: apache_worker_busy > 250
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "High busy workers"
          description: "Apache has more than 250 busy workers for 2 minutes"

7. メトリクスの正確性の確認


収集したメトリクスが正確であるか定期的に確認しましょう。誤った設定やモジュールの不具合が原因で、メトリクスが正しく反映されない場合があります。Apacheのリクエスト数やエラーログと突き合わせて整合性をチェックします。

まとめ


Apacheのメトリクス収集は、適切な設定と運用が求められます。セキュリティ対策や収集頻度の調整を行いながら、必要なデータだけを効率的に収集することが安定したシステム運用の鍵です。次のセクションでは、負荷分散環境における具体的な課題とその解決策を紹介します。

負荷分散環境におけるメトリクス収集の課題と対策


負荷分散環境では複数のApacheサーバーが並行して動作し、リクエストが分散されます。この環境では、個々のサーバーの状態を把握するだけでは不十分であり、クラスタ全体の状態をリアルタイムで監視する必要があります。しかし、負荷分散環境特有の課題も存在します。ここでは、その課題と対策を詳しく解説します。

1. 課題: 各サーバーの状態が個別にしか確認できない


Apacheのmod_statusはサーバーローカルの情報しか表示できず、複数台のサーバーがある環境では、それぞれのサーバーを個別に確認しなければなりません。これでは、全体像を掴むのが難しくなります。

対策:
Prometheusを活用し、複数サーバーのメトリクスを一元管理します。複数のターゲットを設定して、全サーバーの状態を同時に収集します。

scrape_configs:
  - job_name: 'apache_cluster'
    static_configs:
      - targets: ['192.168.1.10:9117', '192.168.1.11:9117', '192.168.1.12:9117']


Grafanaでクラスタ全体を監視するダッシュボードを作成し、個別サーバーの状態も一目で確認できるようにします。

2. 課題: サーバー間のメトリクス差異


負荷分散のアルゴリズムによっては、一部のサーバーにリクエストが偏る場合があります。その結果、特定のサーバーだけが高負荷になる可能性があります。

対策:
リクエスト数やワーカーの使用状況をサーバーごとに比較し、異常な偏りが発生していないかを監視します。

sum by (instance) (apache_http_requests_total)


このクエリを使うことで、サーバーごとのリクエスト数を可視化し、負荷の偏りを早期に検知できます。必要に応じて負荷分散ルールを調整しましょう。

3. 課題: ダウンしたサーバーが監視対象から外れる


サーバーがダウンするとmod_statusは応答しなくなり、PrometheusやGrafanaでもそのサーバーのメトリクスが取得できなくなります。これでは、障害が発生していることを即座に把握するのが困難です。

対策:
アラートルールを設定し、一定期間メトリクスが取得できない場合にアラートを発する仕組みを構築します。

alerting:
  alertmanagers:
    - static_configs:
      - targets: ['localhost:9093']
  rule_files:
    - "alert.rules"

groups:
  - name: apache_alerts
    rules:
      - alert: InstanceDown
        expr: up{job="apache_cluster"} == 0
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "Apache Instance Down"
          description: "The Apache server on {{ $labels.instance }} is not responding"


これにより、サーバーダウン時にメールやSlackで即座に通知を受け取れます。

4. 課題: 負荷分散環境のリソース使用状況が見えにくい


CPUやメモリ使用量などのリソースメトリクスは、通常Apacheの外部で収集されるため、mod_statusだけでは把握できません。

対策:
Node Exporterを導入し、サーバーレベルのリソース情報もPrometheusで収集します。これにより、Apacheのパフォーマンスとサーバーのリソース使用状況を統合的に監視できます。

sudo apt install prometheus-node-exporter
sudo systemctl start prometheus-node-exporter
sudo systemctl enable prometheus-node-exporter


Prometheusの設定にNode Exporterを追加します。

scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['192.168.1.10:9100', '192.168.1.11:9100']


これで、サーバーのCPU使用率やディスクI/O、メモリ使用状況などを監視できます。

5. 課題: データの一貫性と時差


複数サーバーからメトリクスを収集する際、データの取得タイミングにばらつきが生じる場合があります。これにより、リアルタイムのデータが不正確になる可能性があります。

対策:
Prometheusのscrape_intervalを適切に設定し、データ取得のタイミングを揃えます。また、クラスタ全体の平均値や合計値を使用して、個々のサーバーの時差を補正します。

avg_over_time(apache_http_requests_total[1m])

まとめ


負荷分散環境では、複数のApacheサーバーを同時に監視し、全体のパフォーマンスを維持するための体制が求められます。PrometheusやGrafanaを活用し、各サーバーの状態を一元的に管理することで、負荷の偏りや障害を迅速に検知し、サーバーの安定稼働を実現できます。次のセクションでは、実際の運用例を基にした負荷分散環境でのApacheメトリクス運用の具体例を紹介します。

実践例:負荷分散環境でのApacheメトリクス運用例


実際の負荷分散環境でApacheメトリクスを運用する具体例を紹介します。本例では、3台のApacheサーバーを対象に、PrometheusとGrafanaを用いてメトリクスを収集・可視化し、リクエストの分散状況やリソース使用率をリアルタイムで監視します。

1. 環境構成

  • ロードバランサー:HAProxy
  • Apacheサーバー:3台(Webサーバー1~3)
  • 監視ツール:Prometheus, Grafana, Node Exporter, Apache Exporter
  • ネットワーク構成
  • Webサーバー1:192.168.1.10
  • Webサーバー2:192.168.1.11
  • Webサーバー3:192.168.1.12

2. メトリクス収集の流れ

  1. 各Apacheサーバーにmod_statusApache Exporterを導入し、Prometheusがデータを収集します。
  2. Node Exporterも導入し、CPU・メモリなどのリソース情報を取得します。
  3. Prometheusが3台のApacheサーバーからデータを収集し、Grafanaで視覚的に確認できるように設定します。

3. 各サーバーでのApache Exporter設定


各Apacheサーバーで以下の手順を実施します。

Apache Exporterのダウンロードと実行

wget https://github.com/Lusitaniae/apache_exporter/releases/download/v1.0.0/apache_exporter-1.0.0.linux-amd64.tar.gz
tar -xzf apache_exporter-1.0.0.linux-amd64.tar.gz
sudo mv apache_exporter /usr/local/bin/


Apache Exporterをデーモン化して常時稼働させます。

sudo nano /etc/systemd/system/apache_exporter.service


以下の内容を記述します。

[Unit]
Description=Apache Exporter
After=network.target

[Service]
ExecStart=/usr/local/bin/apache_exporter --scrape_uri=http://localhost/server-status?auto
Restart=always

[Install]
WantedBy=multi-user.target


サービスの起動と有効化

sudo systemctl daemon-reload
sudo systemctl start apache_exporter
sudo systemctl enable apache_exporter

4. Prometheusでの監視設定


Prometheusサーバーの設定ファイル/etc/prometheus/prometheus.ymlにターゲットを追加します。

scrape_configs:
  - job_name: 'apache_cluster'
    static_configs:
      - targets: ['192.168.1.10:9117', '192.168.1.11:9117', '192.168.1.12:9117']
  - job_name: 'node'
    static_configs:
      - targets: ['192.168.1.10:9100', '192.168.1.11:9100', '192.168.1.12:9100']


これにより、ApacheとNode Exporterからのデータが収集されます。

5. Grafanaダッシュボードの作成

  1. GrafanaのデータソースにPrometheusを追加します。
  2. ダッシュボードを作成し、以下のクエリを使用してApacheメトリクスを可視化します。

リクエスト数のグラフ

sum(rate(apache_http_requests_total[5m])) by (instance)

アクティブワーカー数

apache_worker_busy

アイドルワーカー数

apache_worker_idle

リクエストの分散状況

sum by (instance) (apache_http_requests_total)

これにより、各サーバーのリクエスト状況やワーカーの状態をリアルタイムで確認できます。

6. アラート設定の実装


各サーバーのリクエストが一定数を超えた場合に通知を送るアラートルールを設定します。

groups:
  - name: apache_alerts
    rules:
      - alert: HighRequestRate
        expr: rate(apache_http_requests_total[1m]) > 500
        for: 2m
        labels:
          severity: warning
        annotations:
          summary: "High request rate on {{ $labels.instance }}"
          description: "Request rate exceeds 500 per minute for more than 2 minutes."


この設定により、Apacheサーバーに過剰なリクエストが集中した場合、メールやSlackでアラートを受け取ることができます。

7. ログ解析とメトリクスの併用


goaccessを活用して、Apacheログをリアルタイムで解析し、メトリクスと突き合わせて不正アクセスや負荷の偏りを特定します。

goaccess /var/log/apache2/access.log --log-format=COMBINED


これにより、異常なアクセスパターンが発生した場合も迅速に対応できます。

まとめ


負荷分散環境でのApacheメトリクス収集と運用は、PrometheusとGrafanaの組み合わせにより、スムーズに実現できます。これにより、障害発生時の迅速な対応や、負荷の平準化が可能になり、システムの安定性が大幅に向上します。次のセクションでは、記事のまとめと運用全体の振り返りを行います。

まとめ


本記事では、負荷分散環境でのApacheメトリクス収集方法について、基本的な仕組みから具体的な実装例までを詳しく解説しました。

Apacheのmod_statusによる基本的なメトリクス収集から、PrometheusGrafanaと連携した高度な監視体制の構築までをカバーし、実際の負荷分散環境での運用例を通じて、実践的な知識を提供しました。

負荷分散環境においては、サーバー間の負荷の偏りやダウンタイムを最小限に抑えることが重要です。適切なアラート設定リソース監視を導入することで、障害の早期検知と迅速な対応が可能になります。

メトリクスの収集とログ解析を組み合わせることで、Apacheサーバーの状態をより正確に把握し、システム全体の安定性とパフォーマンスを最大限に引き出せます。
今後のシステム拡張やトラフィック増加にも柔軟に対応できるよう、継続的な監視体制の見直しと改善を進めましょう。

コメント

コメントする

目次
  1. Apacheで収集可能なメトリクスの種類
    1. 1. リクエスト関連のメトリクス
    2. 2. 接続数とトラフィック
    3. 3. CPU・メモリ使用率
    4. 4. ワーカースレッドの状態
    5. 5. エラーや障害に関するメトリクス
  2. mod_statusモジュールを使ったメトリクス収集方法
    1. 1. mod_statusの有効化
    2. 2. mod_statusの設定ファイル編集
    3. 3. Apacheの再起動
    4. 4. メトリクスの確認方法
    5. 5. 自動的にメトリクスを収集する方法
  3. Prometheusと連携してApacheメトリクスを収集する方法
    1. 1. 必要なツールのインストール
    2. 2. Apache Exporterの設定
    3. 3. Prometheusの設定
    4. 4. メトリクスの確認
    5. 5. Apache Exporterの動作確認
  4. GrafanaでApacheメトリクスを可視化する方法
    1. 1. Grafanaのインストール
    2. 2. Prometheusをデータソースとして追加
    3. 3. Apacheメトリクス用のダッシュボード作成
    4. 4. 既存のダッシュボードをインポート
    5. 5. ダッシュボードの活用
  5. Apacheのログ解析による追加データの取得方法
    1. 1. Apacheのログの種類
    2. 2. ログの保存場所と確認方法
    3. 3. Apacheのログ形式のカスタマイズ
    4. 4. goaccessを使ったリアルタイムログ解析
    5. 5. エラーログ解析で障害の早期発見
    6. 6. ログの定期解析とレポート自動生成
  6. Apacheメトリクスを収集する際の注意点とベストプラクティス
    1. 1. mod_statusのセキュリティ設定
    2. 2. メトリクス収集の頻度とパフォーマンス
    3. 3. メトリクスデータの保存期間
    4. 4. 必要なメトリクスだけを収集
    5. 5. 負荷分散環境でのデータ統合
    6. 6. アラート設定で障害の早期検知
    7. 7. メトリクスの正確性の確認
    8. まとめ
  7. 負荷分散環境におけるメトリクス収集の課題と対策
    1. 1. 課題: 各サーバーの状態が個別にしか確認できない
    2. 2. 課題: サーバー間のメトリクス差異
    3. 3. 課題: ダウンしたサーバーが監視対象から外れる
    4. 4. 課題: 負荷分散環境のリソース使用状況が見えにくい
    5. 5. 課題: データの一貫性と時差
    6. まとめ
  8. 実践例:負荷分散環境でのApacheメトリクス運用例
    1. 1. 環境構成
    2. 2. メトリクス収集の流れ
    3. 3. 各サーバーでのApache Exporter設定
    4. 4. Prometheusでの監視設定
    5. 5. Grafanaダッシュボードの作成
    6. 6. アラート設定の実装
    7. 7. ログ解析とメトリクスの併用
    8. まとめ
  9. まとめ