Prometheus の Apache Exporter をインストール・設定してみましたので、その内容をメモします。
環境
Prometheus
Exporter
Prometheus のインストール
既に、インストール済みの想定。
Apache Exporter
Apache Exporter は Githubで管理されています。
以下のページに記載がありますが、Prometheus の Offical の Exporter ではありません。
ダウンロード
まずは、以下から最新バージョンをダウンロードします。
2020年01月18日時点で、バージョン 0.7.0 が最新でした。
Linux(64bit) で使う場合は、「linux-amd64」となっているものを選びましょう。
$ wget https://github.com/Lusitaniae/apache_exporter/releases/download/v0.7.0/apache_exporter-0.7.0.linux-amd64.tar.gz
インストール
ダウンロードしたら、アーカイブを展開して任意のディレクトリに配置します。
今回は「/usr/local/」に配置することにしました。
# tar zxvf apache_exporter-0.7.0.linux-amd64.tar.gz # mv -i apache_exporter-0.7.0.linux-amd64 /usr/local/apache_exporter-0.7.0 # cd /usr/local/ # chown prometheus:prometheus apache_exporter-0.7.0 # ln -s apache_exporter-0.7.0 apache_exporter
自動起動の設定
systemd の管理下に入れて、自動起動できるように設定します。
# vi /usr/lib/systemd/system/prometheus_apache_exporter.service
serviceファイルはこんな感じで。
[Unit] Description=Apache Exporter for Prometheus [Service] Type=simple Restart=always User=prometheus ExecStart=/usr/local/apache_exporter/apache_exporter ExecReload=/bin/kill -HUP $MAINPID TimeoutStopSec=20s SendSIGKILL=no [Install] WantedBy=multi-user.target
serviceファイルを作成したら、daemon-reloadして認識させます。
# systemctl daemon-reload # systemctl list-unit-files | grep prometheus_apache_exporter prometheus_apache_exporter.service disabled
そして、自動起動を有効化します。
# systemctl enable prometheus_apache_exporter.service Created symlink from /etc/systemd/system/multi-user.target.wants/prometheus_apache_exporter.service to /usr/lib/systemd/system/prometheus_apache_exporter.service. # systemctl list-unit-files | grep prometheus_apache_exporter prometheus_apache_exporter.service enabled
プロセス起動
自動起動の設定が終わったら、手動起動します。
# systemctl start prometheus_apache_exporter.service
では、確認してみましょう。
# ps -ef | grep apache_exporter prometh+ 2663 1 0 06:44 ? 00:00:00 /usr/local/apache_exporter/apache_exporter # netstat -anp | grep -i listen tcp6 0 0 :::9117 :::* LISTEN 2663/apache_exporte
無事に起動しました。Listenポートは9117になっていますね。
Apache の Server Status の確認
httpd の Server Status が未設定の場合は、有効化しておきます。
以下のドキュメントを参考にしてください。
※Server Status の具体的な設定方法は、また別途まとめようと思います。
httpd で Server Status の応答を確認してみます。
# curl localhost/server-status <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <html><head> <title>Apache Status</title> </head><body> <h1>Apache Server Status for localhost (via 127.0.0.1)</h1> <dl><dt>Server Version: Apache/2.4.39 ()</dt> <dt>Server MPM: prefork</dt> <dt>Server Built: Apr 4 2019 18:09:28 </dt></dl><hr /><dl> <dt>Current Time: Saturday, 18-Jan-2020 07:27:09 JST</dt> <dt>Restart Time: Saturday, 18-Jan-2020 07:00:22 JST</dt> <dt>Parent Server Config. Generation: 1</dt> <dt>Parent Server MPM Generation: 0</dt> <dt>Server uptime: 26 minutes 47 seconds</dt> <dt>Server load: 0.00 0.00 0.00</dt> <dt>Total accesses: 173 - Total Traffic: 1.2 MB - Total Duration: 10961</dt> <dt>CPU Usage: u4.79 s.42 cu0 cs0 - .324% CPU load</dt> <dt>.108 requests/sec - 811 B/second - 7.4 kB/request - 63.3584 ms/request</dt> <dt>1 requests currently being processed, 8 idle workers</dt> </dl><pre>___W_____....................................................... ................................................................ ................................................................ ................................................................ </pre> <p>Scoreboard Key:<br /> "<b><code>_</code></b>" Waiting for Connection, "<b><code>S</code></b>" Starting up, "<b><code>R</code></b>" Reading Request,<br /> "<b><code>W</code></b>" Sending Reply, "<b><code>K</code></b>" Keepalive (read), "<b><code>D</code></b>" DNS Lookup,<br /> "<b><code>C</code></b>" Closing connection, "<b><code>L</code></b>" Logging, "<b><code>G</code></b>" Gracefully finishing,<br /> "<b><code>I</code></b>" Idle cleanup of worker, "<b><code>.</code></b>" Open slot with no current process<br /> </p> <table border="0"><tr><th>Srv</th><th>PID</th><th>Acc</th><th>M</th><th>CPU </th><th>SS</th><th>Req</th><th>Dur</th><th>Conn</th><th>Child</th><th>Slot</th><th>Client</th><th>Protocol</th><th>VHost</th><th>Request</th></tr> <tr><td><b>0-0</b></td><td>3767</td><td>0/18/18</td><td>_ <tr><td><b>1-0</b></td><td>3768</td><td>0/19/19</td><td>_ </td><td>0.48</td><td>80</td><td>0</td><td>775</td><td>0.0</td><td>0.12</td><td>0.12 </td><td>localhost</td><td>http/1.1</td><td nowrap>localhost:80</td><td nowrap>GET /server-status/?auto HTTP/1.1</td></tr> </table> <hr /> <table> <tr><th>Srv</th><td>Child Server number - generation</td></tr> <tr><th>PID</th><td>OS process ID</td></tr> <tr><th>Acc</th><td>Number of accesses this connection / this child / this slot</td></tr> <tr><th>M</th><td>Mode of operation</td></tr> <tr><th>CPU</th><td>CPU usage, number of seconds</td></tr> <tr><th>SS</th><td>Seconds since beginning of most recent request</td></tr> <tr><th>Req</th><td>Milliseconds required to process most recent request</td></tr> <tr><th>Dur</th><td>Sum of milliseconds required to process all requests</td></tr> <tr><th>Conn</th><td>Kilobytes transferred this connection</td></tr> <tr><th>Child</th><td>Megabytes transferred this child</td></tr> <tr><th>Slot</th><td>Total megabytes transferred this slot</td></tr> </table> </body></html>
大丈夫そうですね。
Apache Exporter の動作確認
Apache Exporter が動作しているホストで、curlコマンドを使って応答を確認します。
# curl http://localhost:9117/metrics | grep apache | grep -v ^# apache_accesses_total 64 apache_cpuload 0.269795 apache_exporter_build_info{branch="HEAD",goversion="go1.12.6",revision="6195241a96c02af175ba2842dfd883682133b066",version="0.7.0"} 1 apache_scoreboard{state="closing"} 0 apache_scoreboard{state="dns"} 0 apache_scoreboard{state="graceful_stop"} 0 apache_scoreboard{state="idle"} 8 apache_scoreboard{state="idle_cleanup"} 0 apache_scoreboard{state="keepalive"} 0 apache_scoreboard{state="logging"} 0 apache_scoreboard{state="open_slot"} 247 apache_scoreboard{state="read"} 0 apache_scoreboard{state="reply"} 1 apache_scoreboard{state="startup"} 0 apache_sent_kilobytes_total 247 apache_up 1 apache_uptime_seconds_total 682 apache_workers{state="busy"} 1 apache_workers{state="idle"} 8
Prometheus 側の設定
prometheus.ymlの修正
Prometheus が apache_exporter 経由でデータを収集できるように、 prometheus.yml に設定を追加します。
「scrape_configs:」の中に、以下のような感じでapache_exporter用の設定を追加します。
- job_name: 'httpd-status' # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ['192.168.0.2:9117']
設定を変更したら、prometheusを再起動します。
# sysmtectl restart prometheus.server