こんにちは。よっしーです(^^)
今日は、dockerで構築した開発環境において、apacheのメトリクス情報をGrafanaで可視化する手順をご紹介します。
実行環境
この記事では、下記の記事で構築している開発環境を前提にしていますので、環境構築をされていない方は、記事を参考に環境構築をお願いします。
Apache Exporterの追加
Prometheusでapacheのメトリクス情報を取得するために、Apache Exporterを追加します。
ディレクトリ構造
ディレクトリ構造は下記のようになっています。赤字の箇所が新規&更新になります。
.
├── LICENSE
├── Makefile
├── README.md
└── app
├── docker-compose.yml (更新)
├── flyway
├── grafana
├── mysql
├── prometheus
│ └── prometheus.yml(更新)
├── schemaspy
├── sys
└── web
├── .htaccess(更新)
├── Dockerfile(更新)
├── prometheus-httpd.service(新規)
└── server-status.conf(新規)
docker-compose.yml
下記の内容でファイル(docker-compose.yml)46-58行目を更新します。
volumes:
- ./web/CodeIgniter-3.1.13/application:/var/www/application
- ./web/CodeIgniter-3.1.13/system:/var/www/system
- ./web/index.php:/var/www/html/index.php
- ./web/info.php:/var/www/html/info.php
- ./web/.htaccess:/var/www/html/.htaccess
- ./web/httpd.conf:/etc/httpd/conf/httpd.conf
- ./web/server-status.conf:/etc/httpd/conf.d/server-status.conf
- ./web/xhprof-html.conf:/etc/httpd/conf.modules.d/xhprof-html.conf
- ./web/xdebug.ini:/etc/opt/remi/php74/php.d/xdebug.ini
ports:
- 8080:80
- 9117:9117
prometheus/prometheus.yml
下記の内容でファイル(prometheus/prometheus.yml)を更新します。
scrape_interval: 15s
scrape_configs:
- job_name: 'docker-for-mac'
static_configs:
- targets: ['docker.for.mac.host.internal:9323']
- job_name: 'web'
static_configs:
- targets: ['web:9117']
web/.htaccess
下記の内容でファイル(web/.htaccess)を更新します。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/server-status
RewriteRule ^(.*)$ index.php/$1 [L]
web/Dockerfile
下記の内容をファイル(web/Dockerfile)の61-69行目へ追記します。
# apache_exporter
RUN useradd --system --shell /sbin/nologin prometheus \
&& wget https://github.com/Lusitaniae/apache_exporter/releases/download/v0.13.3/apache_exporter-0.13.3.linux-amd64.tar.gz \
&& tar xvzf apache_exporter-0.13.3.linux-amd64.tar.gz \
&& cd apache_exporter-0.13.3.linux-amd64 \
&& cp apache_exporter /usr/local/bin/
COPY ./prometheus-httpd.service /etc/systemd/system/prometheus-httpd.service
RUN systemctl enable prometheus-httpd
web/prometheus-httpd.service
下記の内容でファイル(web/prometheus-httpd.service)を作成します。
[Unit]
Description=Prometheus exporter for Apache HTTP Server
[Service]
Restart=always
ExecStart=/usr/local/bin/apache_exporter --scrape_uri=http://localhost:80/server-status?auto
[Install]
WantedBy=multi-user.target
web/server-status.conf
下記の内容でファイル(web/prometheus-httpd.service)を作成します。
ExtendedStatus On
<Location /server-status>
SetHandler server-status
Require all denied
Require local
</Location>
動作確認
下記のコマンドを実行して、サービスを起動します。
make setup
サービスが起動後、ブラウザで「http://localhost:9090/targets」にアクセスして、StateがUPになっていることを確認します。
ブラウザで「http://localhost:3000/」にアクセスして、Grafanaにログインし、Prometheusのデータソースを追加後、「3894」のダッシュボードをインポートします。
インポートして、下図のダッシュボードが表示されていれば、成功です。
Grafanaでのデータソースの追加とダッシュボードのインポート方法については、下記の記事を参考にしてみてください。
解説
Apache Exporter とは
Apache Exporterは、Apache HTTPサーバーのメトリクスをPrometheusフォーマットで収集するツールです。これにより、PrometheusサーバーがApacheサーバーのメトリクスを収集して、可視化、アラート、およびトラブルシューティングのための分析を行うことができます。
Apache HTTPサーバーの状態を監視し、リクエストのカウント、処理時間、応答ステータス、バイト数などの情報を収集します。これにより、Apache HTTPサーバーの性能を評価し、必要に応じて最適化することができます。
Apache HTTPサーバーのバージョン2.2と2.4に対応しています。Apache HTTPサーバー以外にも、Nginx、HAProxy、MySQLなどのアプリケーションのメトリクスを収集するためのExporterも利用できます。
Apache Exporterは、Apache HTTPサーバーがPrometheusサーバーに対してメトリクスをエクスポートするための標準的な方法です。これにより、Prometheusを使用してApache HTTPサーバーのメトリクスを収集し、監視することができます。
server-status とは
Apache HTTP Serverには、server-statusと呼ばれる機能があります。これは、Apache HTTP Serverが処理しているリクエストや、サーバーの現在の状態についての情報を提供するためのものです。
server-statusは、Apache HTTP Serverの設定ファイルに以下のような設定を追加することで有効化されます。
<Location "/server-status">
SetHandler server-status
Require ip 127.0.0.1
</Location>
この設定では、/server-statusというURLでアクセスできるようになります。このURLにアクセスすると、Apache HTTP Serverが処理しているリクエストの数や、各リクエストの状態、サーバーの負荷状況などの情報が表示されます。
server-statusの情報には、以下のようなものが含まれます。
- 当該サーバーに対するリクエスト数
- キューイング中のリクエスト数
- 処理中のリクエスト数
- 完了したリクエスト数
- 各リクエストのステータス
- サーバーの負荷状況(CPU使用率、メモリ使用量など)
server-statusは、Apache HTTP Serverが問題なく稼働しているかどうかを確認するために役立ちます。また、リクエストの処理状況を監視することで、性能の問題やセキュリティ上の問題を早期に発見することができます。ただし、server-statusはセキュリティ上の問題を引き起こす可能性があるため、公開する場合には十分な注意が必要です。
Apache Exporterとserver-statusの関係
Apache Exporterは、Apache HTTP ServerのメトリクスをPrometheusフォーマットで収集するためのツールです。Apache Exporterは、Apache HTTP Serverが提供するserver-statusという機能を使用して、Apache HTTP Serverの状態に関する情報を収集します。
具体的には、Apache Exporterは、server-statusのURLにアクセスして、Apache HTTP Serverの状態に関する情報を取得します。Apache Exporterは、取得した情報をPrometheusのメトリクス形式に変換し、Prometheusサーバーに送信します。Prometheusサーバーは、Apache HTTP Serverの状態に関する情報を収集し、可視化、アラート、およびトラブルシューティングのための分析を行うことができます。
つまり、Apache Exporterは、Apache HTTP ServerのメトリクスをPrometheusサーバーにエクスポートするためのツールであり、Apache HTTP Serverが提供するserver-statusという機能を使用して情報を収集します。Apache Exporterを使用することで、Apache HTTP Serverの性能や状態を評価し、必要に応じて最適化することができます。
おわりに
今日は、dockerで構築した開発環境にPrometheusとGrafanaを使用して、apacheのメトリクス情報を可視化する方法をご紹介しました。これで、負荷試験などでapacheがどういう状態になるかを確認しやすくなったと思うので、性能評価等に利用して頂ければと思います。次回は、mysqlのメトリクス情報を取得したいと思います。
今回使用したファイルは下記のGitHubにタグ付けしています。
また明日お会いしましょう!
コメント