Prometheus Exporter設定例 (HAProxy編)

スポンサーリンク

PrometheusはExporterと呼ばれるメトリック情報を公開するコンポーネントから情報を収集します。Exporterは前述の説明で紹介した「Node Exporter」以外にも様々なメトリックを公開するものがあります。もし、監視したいソフトウェアのExporterが存在しないならば、容易に自作する事もできます。ここでは、既存のExporterの使用感を掴むために、OfficialなExporterであるHAProxy exporterの使い方を説明します。

前提

参照資料

動作確認済環境

  • Rocky Linux 8.6
  • Prometheus 2.36.2
  • haproxy 1.8.27
  • haproxy_exporte 0.13.0

構成図

Unix Socketを使用する場合(同一OSの場合)

HAProxyとhaproxy_exporterが同一OSにインストールされる場合の構成を以下に図示します。この構成の場合、HAProxyとhaproxy_exporterの間はUnix Socketで通信する事ができます。

+----------------+ +------------------+ 
| linux010       | | linux020         | 
| 172.16.1.10/24 | | 172.16.1.20/24   | 
|                | |                  | 
|                | | HAProxy          | 
| prometheus     | | haproxy_exporter | 
+----------------+ +------------------+ 

tcpを使用する場合(別OSの場合)

HAProxyとhaproxy_exporterが別OSにインストールされる場合の構成を以下に図示します。この構成の場合、HAProxyとhaproxy_exporterの間はtcpで通信する事ができます。

+------------------+ +----------------+ 
| linux010         | | linux020       | 
| 172.16.1.10/24   | | 172.16.1.20/24 | 
|                  | |                | 
| haproxy_exporter | | HAProxy        | 
| prometheus       | |                | 
+------------------+ +----------------+ 

Unix Socketを使用する場合(同一OSの場合)

HAProxyのインストール

HAProxyをインストールします。

dnf install haproxy

HAProxyを起動します。

systemctl enable haproxy.service --now

HAProxy exporterはHAProxyのstatsページをスクレイプしますので、statページのURLを調査します。/etc/haproxy/haproxy.cfgを見てstatsページのデフォルト設定を調査します。

[root@linux020 ~]# view /etc/haproxy/haproxy.cfg

  <omitted>

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

  <omitted>

上記の場合は、Unix Socketの/var/lib/haproxy/statsで待ち受けている事が分かりますので、このURLに対してHA proxyの情報取得が可能かどうかを調査します。

情報を取得する方法はいくつかありますが、「HA Proxy 公式ドキュメント」ではsocatコマンドを使った方法を紹介しています。もし、socatがインストールされていないならば、まずはsocatコマンドをインストールします。

dnf install socat

以下のように「help」と入力すれば、ヘルプが表示されます。

[root@linux020 ~]# socat /var/lib/haproxy/stats - <<< "help"
Unknown command. Please enter one of the following commands only :
  help           : this message
  prompt         : toggle interactive mode with prompt
  quit           : disconnect

  <omitted>

  clear counters : clear max statistics counters (add 'all' for all counters)
  show info      : report information about the running process [json|typed]
  show stat      : report counters for each proxy and server [json|typed]
  show schema json : report schema used for stats
  show startup-logs : report logs emitted during HAProxy startup

  <omitted>

「show stat」と入力すれば、統計情報が見れます。

[root@linux020 ~]# socat /var/lib/haproxy/stats - <<< "show stat"
# pxname,svname,qcur,qmax,scur,smax,slim,stot,bin,bout,dreq,dresp,ereq,econ,eresp,wretr,wredis,status,weight,act,bck,chkfail,chkdown,lastchg,downtime,qlimit,pid,iid,sid,throttle,lbtot,tracked,type,rate,rate_lim,rate_max,check_status,check_code,check_duration,hrsp_1xx,hrsp_2xx,hrsp_3xx,hrsp_4xx,hrsp_5xx,hrsp_other,hanafail,req_rate,req_rate_max,req_tot,cli_abrt,srv_abrt,comp_in,comp_out,comp_byp,comp_rsp,lastsess,last_chk,last_agt,qtime,ctime,rtime,ttime,agent_status,agent_code,agent_duration,check_desc,agent_desc,check_rise,check_fall,check_health,agent_rise,agent_fall,agent_health,addr,cookie,mode,algo,conn_rate,conn_rate_max,conn_tot,intercepted,dcon,dses,
main,FRONTEND,,,0,0,3000,0,0,0,0,0,0,,,,,OPEN,,,,,,,,,1,2,0,,,,0,0,0,0,,,,0,0,0,0,0,0,,0,0,0,,,0,0,0,0,,,,,,,,,,,,,,,,,,,,,http,,0,0,0,0,0,0,
static,static,0,0,0,0,,0,0,0,,0,,0,0,0,0,DOWN,1,1,0,1,1,1875,1875,,1,3,1,,0,,2,0,,0,L4CON,,0,0,0,0,0,0,0,,,,,0,0,,,,,-1,Connection refused,,0,0,0,0,,,,Layer4 connection problem,,2,3,0,,,,127.0.0.1:4331,,http,,,,,,,,
static,BACKEND,0,0,0,0,300,0,0,0,0,0,,0,0,0,0,DOWN,0,0,0,,1,1875,1875,,1,3,0,,0,,1,0,,0,,,,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,-1,,,0,0,0,0,,,,,,,,,,,,,,http,roundrobin,,,,,,,
app,app1,0,0,0,0,,0,0,0,,0,,0,0,0,0,DOWN,1,1,0,1,1,1875,1875,,1,4,1,,0,,2,0,,0,L4CON,,0,0,0,0,0,0,0,,,,,0,0,,,,,-1,Connection refused,,0,0,0,0,,,,Layer4 connection problem,,2,3,0,,,,127.0.0.1:5001,,http,,,,,,,,
app,app2,0,0,0,0,,0,0,0,,0,,0,0,0,0,DOWN,1,1,0,1,1,1874,1874,,1,4,2,,0,,2,0,,0,L4CON,,0,0,0,0,0,0,0,,,,,0,0,,,,,-1,General socket error (Permission denied),,0,0,0,0,,,,Layer4 connection problem,,2,3,0,,,,127.0.0.1:5002,,http,,,,,,,,
app,app3,0,0,0,0,,0,0,0,,0,,0,0,0,0,DOWN,1,1,0,1,1,1874,1874,,1,4,3,,0,,2,0,,0,L4CON,,0,0,0,0,0,0,0,,,,,0,0,,,,,-1,Connection refused,,0,0,0,0,,,,Layer4 connection problem,,2,3,0,,,,127.0.0.1:5003,,http,,,,,,,,
app,app4,0,0,0,0,,0,0,0,,0,,0,0,0,0,DOWN,1,1,0,1,1,1873,1873,,1,4,4,,0,,2,0,,0,L4CON,,0,0,0,0,0,0,0,,,,,0,0,,,,,-1,Connection refused,,0,0,0,0,,,,Layer4 connection problem,,2,3,0,,,,127.0.0.1:5004,,http,,,,,,,,
app,BACKEND,0,0,0,0,300,0,0,0,0,0,,0,0,0,0,DOWN,0,0,0,,1,1873,1873,,1,4,0,,0,,1,0,,0,,,,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,-1,,,0,0,0,0,,,,,,,,,,,,,,http,roundrobin,,,,,,,

HAProxy exporterのインストール

HAProxy exporterのインストール方法はいくつかあります。このページでは「公式サイト」や「GitHub」で紹介されていないパッケージを用いた手法を紹介します。

Prometheusのリポジトリを登録します。

cat << 'EOF' > /etc/yum.repos.d/prometheus.repo
[prometheus]
name=prometheus
baseurl=https://packagecloud.io/prometheus-rpm/release/el/$releasever/$basearch
repo_gpgcheck=1
enabled=1
gpgkey=https://packagecloud.io/prometheus-rpm/release/gpgkey
       https://raw.githubusercontent.com/lest/prometheus-rpm/master/RPM-GPG-KEY-prometheus-rpm
gpgcheck=1
metadata_expire=300
EOF

HAProxy exporterをインストールします。

dnf install haproxy_exporter

パッケージ版の場合は、systemdのお作法に基づいて起動引数が設定されています。/usr/lib/systemd/system/haproxy_exporter.serviceを確認すると、起動引数は/etc/default/haproxy_exporterにHAPROXY_EXPORTER_OPTSという変数が定義する事が分かります。

[root@linux020 ~]# cat /usr/lib/systemd/system/haproxy_exporter.service
# -*- mode: conf -*-

[Unit]
Description=This is a simple server that scrapes HAProxy stats and exports them via HTTP for Prometheus consumption.
Documentation=https://github.com/prometheus/haproxy_exporter
After=network.target

[Service]
EnvironmentFile=-/etc/default/haproxy_exporter
User=prometheus
ExecStart=/usr/bin/haproxy_exporter $HAPROXY_EXPORTER_OPTS
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5s


[Install]
WantedBy=multi-user.target
[root@linux010 ~]# 

デフォルト設定の場合は、statsページのURLはunix:/var/lib/haproxy/statsになっています。デフォルト設定から変更の必要がない事が分かります。

[root@linux020 ~]# cat /etc/default/haproxy_exporter
HAPROXY_EXPORTER_OPTS="--haproxy.scrape-uri=unix:/var/lib/haproxy/stats"

HAProxy exporterを起動します。

systemctl enable haproxy_exporter.service --now

「http://localhost:9101/metrics」にてHAProxyの情報を取得できる事を確認します。

[root@linux020 ~]# curl -s http://localhost:9101/metrics
# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 0
go_gc_duration_seconds{quantile="0.25"} 0
go_gc_duration_seconds{quantile="0.5"} 0
go_gc_duration_seconds{quantile="0.75"} 0
go_gc_duration_seconds{quantile="1"} 0
go_gc_duration_seconds_sum 0
go_gc_duration_seconds_count 0

 <omitted>

Prometheusの設定例

/etc/prometheus/prometheus.ymlの設定例は以下の通りです。

scrape_configs:
  - job_name: haproxy
    static_configs:
      - targets:
        - localhost:9101

設定後、HAProxyの情報が取得できる事を確認します。

HAProxyの情報取得確認

tcpを使用する場合(別OSの場合)

HAProxyのインストール

dnf install haproxy

HAProxy exporterはHAProxyのstatsページをスクレイプします。statsページを別ホストから閲覧できるように設定しましょう。/etc/haproxy/haproxy.cfgを以下のように編集します。

設定を加筆する位置は任意で差し支えございません。

# vi /etc/haproxy/haproxy.cfg

  <omitted>

listen haproxy.stats
    bind *:8080
    mode http
    stats enable
    stats uri /

HAProxyを起動します。

systemctl enable haproxy.service --now

この設定例の場合はtcp8080でstatsページを閲覧できます。curlコマンドよりもブラウザの方が見やすいので、ブラウザで「http://<IPアドレス>:8080/」を閲覧します。

HAProxy statsページ HTML形式

特にクエリ文字列を指定しない場合は上記のような人間が見やすい情報を返します。後続の操作で設定するHAProxy exporterはcsv形式の情報をスクレイプしますので、ブラウザに「http://<IPアドレス>:8080/?stats;csv」を入力しcsv形式の情報を閲覧できるかを確認します。

HAProxy statsページ CSV形式

HAProxy exporterのインストール

statsページが別ホストに存在する場合は、HAProxyの起動引数を以下のように編集します。

デフォルト設定の場合は、statsページのURLはunix:/var/lib/haproxy/statsになっています。デフォルト設定から変更の必要がない事が分かります。

[root@linux010 ~]# vi /etc/default/haproxy_exporter
HAPROXY_EXPORTER_OPTS="--haproxy.scrape-uri=http://172.16.1.20/?stats;csv"

HAProxy exporterを起動します。

systemctl enable haproxy_exporter.service --now

「http://localhost:9101/metrics」にてHAProxyの情報を取得できる事を確認します。

[root@linux010 ~]# curl -s http://localhost:9101/metrics
# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 0
go_gc_duration_seconds{quantile="0.25"} 0
go_gc_duration_seconds{quantile="0.5"} 0
go_gc_duration_seconds{quantile="0.75"} 0
go_gc_duration_seconds{quantile="1"} 0
go_gc_duration_seconds_sum 0
go_gc_duration_seconds_count 0

 <omitted>

Prometheusの設定例

/etc/prometheus/prometheus.ymlの設定例は以下の通りです。

scrape_configs:
  - job_name: haproxy
    static_configs:
      - targets:
        - localhost:9101

設定後、HAProxyの情報が取得できる事を確認します。

Prometheusの確認

タイトルとURLをコピーしました