ども、cloudpack の 自称 HAProxy 芸人 かっぱ (@inokara) です。
はじめに
稼働している HAProxy の状態を把握する為に stats というオプションがありますが、この stats を利用することで HAProxy をコマンドラインから操作出来るようなので簡単に触ってみたいとおもいます。
参考
こちらの記事は 1.4 系にて試されていらっしゃるようですので、本記事では 1.5.8 にて試したいと思います。(本記事を記載時点では 1.5.9 がリリースされています)
そいうえば、以前に自分でも以下のような記事を書いていました。
memo
準備
global
セクションにて以下のように定義するだけです。
global stats socket /var/run/haproxy.sock mode 600 level admin stats timeout 2m
上記のように show コマンドと socat を利用してステータスを取得することが可能になります。
echo "show info;show stat;show table" | socat stdio /var/run/haproxy.sock
実行すると以下のように出力されます。
Name: HAProxy Version: 1.5.8 Release_date: 2014/10/31 Nbproc: 1 Process_num: 1 Pid: 14031 Uptime: 0d 0h17m05s Uptime_sec: 1025 Memmax_MB: 0 Ulimit-n: 4032 Maxsock: 4032 Maxconn: 2000 Hard_maxconn: 2000 CurrConns: 0 CumConns: 4 CumReq: 4 MaxSslConns: 0 CurrSslConns: 0 CumSslConns: 0 Maxpipes: 0 PipesUsed: 0 PipesFree: 0 ConnRate: 0 ConnRateLimit: 0 MaxConnRate: 0 SessRate: 0 SessRateLimit: 0 MaxSessRate: 0 SslRate: 0 SslRateLimit: 0 MaxSslRate: 0 SslFrontendKeyRate: 0 SslFrontendMaxKeyRate: 0 SslFrontendSessionReuse_pct: 0 SslBackendKeyRate: 0 SslBackendMaxKeyRate: 0 SslCacheLookups: 0 SslCacheMisses: 0 CompressBpsIn: 0 CompressBpsOut: 0 CompressBpsRateLim: 0 Tasks: 5 Run_queue: 1 Idle_pct: 100 node: ip-xxx-xxx-xxx-xxx description: # 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, stats,FRONTEND,,,0,0,2000,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,,,,,,,, stats,BACKEND,0,0,0,0,200,0,0,0,0,0,,0,0,0,0,UP,0,0,0,,0,1025,0,,1,2,0,,0,,1,0,,0,,,,0,0,0,0,0,0,,,,,0,0,0,0,0,0,-1,,,0,0,0,0, balancer-test,FRONTEND,,,0,0,2000,0,0,0,0,0,0,,,,,OPEN,,,,,,,,,1,3,0,,,,0,0,0,0,,,,,,,,,,,0,0,0,,,0,0,0,0,,,,,,,, balancer-test,p01,0,0,0,0,,0,0,0,,0,,0,0,0,0,no check,1,1,0,,,,,,1,3,1,,0,,2,0,,0,,,,,,,,,,0,,,,0,0,,,,,-1,,,0,0,0,0, balancer-test,p02,0,0,0,0,,0,0,0,,0,,0,0,0,0,no check,1,1,0,,,,,,1,3,2,,0,,2,0,,0,,,,,,,,,,0,,,,0,0,,,,,-1,,,0,0,0,0, balancer-test,BACKEND,0,0,0,0,200,0,0,0,0,0,,0,0,0,0,UP,2,2,0,,0,1025,0,,1,3,0,,0,,1,0,,0,,,,,,,,,,,,,,0,0,0,0,0,0,-1,,,0,0,0,0,
上記の実行例だと show info
と show stat
と show table
を同時に実行していることになります。
インタラクティブに
次に以下のように実行することでコマンドラインモードで操作することが可能になります。
# socat /var/run/haproxy.sock readline prompt >
ヘルプを見てみます。
> help Unknown command. Please enter one of the following commands only : clear counters : clear max statistics counters (add 'all' for all counters) clear table : remove an entry from a table help : this message prompt : toggle interactive mode with prompt quit : disconnect show info : report information about the running process show pools : report information about the memory pools usage show stat : report counters for each proxy and server show errors : report last request and response errors for each proxy show sess [id] : report the list of current sessions or dump this session show table [id]: report table usage stats or dump this table's contents get weight : report a server's current weight set weight : change a server's weight set server : change a server's state or weight set table [id] : update or create a table entry's data set timeout : change a timeout setting set maxconn : change a maxconn setting set rate-limit : change a rate limiting value disable : put a server or frontend in maintenance mode enable : re-enable a server or frontend which is in maintenance mode shutdown : kill a session or a frontend (eg:to release listening ports) show acl [id] : report avalaible acls or dump an acl's contents get acl : reports the patterns matching a sample for an ACL add acl : add acl entry del acl : delete acl entry clear acl <id> : clear the content of this acl show map [id] : report avalaible maps or dump a map's contents get map : reports the keys and values matching a sample for a map set map : modify map entry add map : add map entry del map : delete map entry clear map <id> : clear the content of this map set ssl <stmt> : set statement for ssl
上記のようにコマンドラインモードで操作可能なコマンドが表示されました。
show stat
実行してみたいと思います。
> 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, stats,FRONTEND,,,0,0,2000,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,,,,,,,, stats,BACKEND,0,0,0,0,200,0,0,0,0,0,,0,0,0,0,UP,0,0,0,,0,231,0,,1,2,0,,0,,1,0,,0,,,,0,0,0,0,0,0,,,,,0,0,0,0,0,0,-1,,,0,0,0,0, balancer-test,FRONTEND,,,0,0,2000,0,0,0,0,0,0,,,,,OPEN,,,,,,,,,1,3,0,,,,0,0,0,0,,,,,,,,,,,0,0,0,,,0,0,0,0,,,,,,,, balancer-test,p01,0,0,0,0,,0,0,0,,0,,0,0,0,0,no check,1,1,0,,,,,,1,3,1,,0,,2,0,,0,,,,,,,,,,0,,,,0,0,,,,,-1,,,0,0,0,0, balancer-test,p02,0,0,0,0,,0,0,0,,0,,0,0,0,0,no check,1,1,0,,,,,,1,3,2,,0,,2,0,,0,,,,,,,,,,0,,,,0,0,,,,,-1,,,0,0,0,0, balancer-test,BACKEND,0,0,0,0,200,0,0,0,0,0,,0,0,0,0,UP,2,2,0,,0,231,0,,1,3,0,,0,,1,0,,0,,,,,,,,,,,,,,0,0,0,0,0,0,-1,,,0,0,0,0,
おお、統計情報が取得出来ました。以下のようにブラウザで表示した内容と同等の情報が取得可能です。
続いて show info
を…。
> show info Name: HAProxy Version: 1.5.8 Release_date: 2014/10/31 Nbproc: 1 Process_num: 1 Pid: 14127 Uptime: 0d 0h06m44s Uptime_sec: 404 Memmax_MB: 0 Ulimit-n: 4032 Maxsock: 4032 Maxconn: 2000 Hard_maxconn: 2000 CurrConns: 0 CumConns: 2 CumReq: 2 MaxSslConns: 0 CurrSslConns: 0 CumSslConns: 0 Maxpipes: 0 PipesUsed: 0 PipesFree: 0 ConnRate: 0 ConnRateLimit: 0 MaxConnRate: 0 SessRate: 0 SessRateLimit: 0 MaxSessRate: 0 SslRate: 0 SslRateLimit: 0 MaxSslRate: 0 SslFrontendKeyRate: 0 SslFrontendMaxKeyRate: 0 SslFrontendSessionReuse_pct: 0 SslBackendKeyRate: 0 SslBackendMaxKeyRate: 0 SslCacheLookups: 0 SslCacheMisses: 0 CompressBpsIn: 0 CompressBpsOut: 0 CompressBpsRateLim: 0 Tasks: 5 Run_queue: 1 Idle_pct: 100 node: ip-xxx-xxx-xxx-xxx description:
HAProxy の内部情報が取得可能です。
続いて get weight
なんぞ試してみたいと思います。これは各サーバーへの現在の重み付けが取得可能です。
> get weight Require 'backend/server'.
おっと、何か怒られました。引数に backend/server
という書式で指定が必要なようです。
> get weight balancer-test/p01 1 (initial 1) > get weight balancer-test/p02 1 (initial 1)
気を取り直して実行してみましたが、上記のように出力されました。重み付けは 1:1
になっていますね。
ということで
引続き、HAProxy をコマンドラインから操作してステータス等を取得したり、バックエンドの切り離し等の操作を行ってみたいと思います。
HAProxy 楽しいですね。
元記事はこちらです。
「HAProxy をコマンドラインで操作するを HAProxy 1.5.8 で試してみる」