Opensourcetechブログ

OpensourcetechによるNGINX/Kubernetes/Zabbix/Neo4j/Linuxなどオープンソース技術に関するブログです。

HAProxyのアクセス状況をブラウザで可視化する


LinuCエヴァンジェリストの鯨井貴博@opensourcetechです。

HAProxyでアクセス状況をブラウザで可視化するメモです。



HAProxyとは
f:id:opensourcetech:20211202173131p:plain
高可用性(High Availavility)を実現するためのOSSのLoad Balancerです。
http://www.haproxy.org/


設定例
frontend・・・フロントエンド設定 backend・・・バックエンド設定 listen stats・・・今回利用するアクセス状況を可視化する設定

pi@raspberrypi:~ $ cat /etc/haproxy/haproxy.cfg
global
        log /dev/log    local0
        log /dev/log    local1 notice
        chroot /var/lib/haproxy
        stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
        stats timeout 30s
        user haproxy
        group haproxy
        daemon

        # Default SSL material locations
        ca-base /etc/ssl/certs
        crt-base /etc/ssl/private

        # See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate
        ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
        ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
        ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets

defaults
        log     global
        mode    tcp
        option  tcplog
#       mode    http
#       option  httplog
#       option  dontlognull
        timeout connect 5000
        timeout client  50000
        timeout server  50000
#       errorfile 400 /etc/haproxy/errors/400.http
#       errorfile 403 /etc/haproxy/errors/403.http
#       errorfile 408 /etc/haproxy/errors/408.http
#       errorfile 500 /etc/haproxy/errors/500.http
#       errorfile 502 /etc/haproxy/errors/502.http
#       errorfile 503 /etc/haproxy/errors/503.http
#       errorfile 504 /etc/haproxy/errors/504.http

frontend kube-apiserver
        bind *:6443
        default_backend kube-apiserver

backend kube-apiserver
        balance roundrobin
        server k8smaster1 k8smaster1:6443 check
        server k8smaster2 k8smaster2:6443 check
        server k8smaster3 k8smaster3:6443 check

frontend kube-etcd
        bind *:2379
        default_backend kube-etcd

backend kube-etcd
        balance roundrobin
        server k8smaster1 k8smaster1:2379 check
        server k8smaster2 k8smaster2:2379 check
        server k8smaster3 k8smaster3:2379 check

listen stats
        bind :9999
        mode http
        stats enable
        stats hide-version
        stats uri /stats




HAProxyの起動
使用するLinux Distributionによりますが、今回使用しているUbuntu 20.04ではsystemctlを使います。

pi@raspberrypi:~ $ sudo systemctl start haproxy
pi@raspberrypi:~ $ sudo systemctl status haproxy
● haproxy.service - HAProxy Load Balancer
     Loaded: loaded (/lib/systemd/system/haproxy.service; enabled; vendor prese>
     Active: active (running) since Thu 2021-12-02 18:37:18 GMT; 9s ago
       Docs: man:haproxy(1)
             file:/usr/share/doc/haproxy/configuration.txt.gz
    Process: 22245 ExecStartPre=/usr/sbin/haproxy -f $CONFIG -c -q $EXTRAOPTS (>
   Main PID: 22247 (haproxy)
      Tasks: 5 (limit: 409)
        CPU: 392ms
     CGroup: /system.slice/haproxy.service
             tq22247 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/>
             mq22249 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/>

Dec 02 18:37:18 raspberrypi haproxy[22247]: Proxy kube-apiserver started.
Dec 02 18:37:18 raspberrypi haproxy[22247]: Proxy kube-apiserver started.
Dec 02 18:37:18 raspberrypi haproxy[22247]: Proxy kube-etcd started.
Dec 02 18:37:18 raspberrypi haproxy[22247]: Proxy kube-etcd started.
Dec 02 18:37:18 raspberrypi haproxy[22247]: Proxy kube-etcd started.
Dec 02 18:37:18 raspberrypi haproxy[22247]: Proxy kube-etcd started.
Dec 02 18:37:18 raspberrypi haproxy[22247]: Proxy stats started.
Dec 02 18:37:18 raspberrypi systemd[1]: Started HAProxy Load Balancer.
Dec 02 18:37:18 raspberrypi haproxy[22247]: [NOTICE] 335/083718 (22247) : New w>
Dec 02 18:37:18 raspberrypi haproxy[22247]: Proxy stats started.




ブラウザでアクセス状況を確認する
ssで確認するとわかりますが、9999/tcpにアクセスすればOKです。
https://haproxyのIPaddress:9999/stats

pi@raspberrypi:~ $ ss -tanp
State   Recv-Q  Send-Q     Local Address:Port      Peer Address:Port   Process
LISTEN  0       4096             0.0.0.0:2379           0.0.0.0:*
LISTEN  0       4096             0.0.0.0:6443           0.0.0.0:*
LISTEN  0       4096             0.0.0.0:9999           0.0.0.0:*
LISTEN  0       128              0.0.0.0:22             0.0.0.0:*
LISTEN  0       128            127.0.0.1:631            0.0.0.0:*
ESTAB   0       0          192.168.1.107:22       192.168.1.131:53769
LISTEN  0       128                 [::]:22                [::]:*
LISTEN  0       128                [::1]:631               [::]:*


ブラウザからアクセスすると、以下のようになります。
f:id:opensourcetech:20211202174329p:plain
フロントエンド部・バックエンド部のInput/Outputのバイト数など見れるので、
・指定した負荷分散アルゴリズムとなっているか
・バックエンドサーバがダウンしていないか
など可視化できます。


Opensourcetech by Takahiro Kujirai