Prometheus の Apache Exporter を使ってみる。

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