harumaki.net

インフラ屋の覚書や、ラーメン食べある記とか。

haproxyを試す 4.ソケット接続とステータス出力

   


haproxyでステータスやバックエンドサーバーの状態やプールを確認する場合、コマンドラインからチェックできるツールは無い様子。代わりにソケットリレーツール”socat(SOcketをCATする、の意ですよね)”を使い
あらかじめ用意しておいたソケットへアクセスし、いろいろチェックをする、という利用方法になるとのこと。ささっと試してみました。

参考:お世話になっております。
HAProxy Stats Socket and fun with socat.

ソケットアクセスの方法

socatを介してアクセスするソケットとしては、一般的な

  1. TCPソケットでアクセス
  2. UNIXソケットでのアクセス

の二つを選ぶことができ、

  • TCPソケットの場合はwebページからのステータス確認が可能
    (apacheのserver-statusがきれいに整形されたような画面)。
  • UNIXはCLIでの各種コマンドの実行が可能、promptを使った対話モードでの実行もOK。

プロダクト環境でのオペレーションはCLIからの実施で全然問題ないけど、朝会社に出社後、仕事に入る前にちょこっとステータスをWebで見たい、というときはTCPでのアクセスが便利。

1)TCPソケットでアクセス

参考:お世話になっております。
How to Enable HAProxy Stats

haproxy.cfg 設定

	listen hastats 0.0.0.0:8080
	    mode http
	    maxconn 64
	    timeout connect 5000
	    timeout client 10000
	    timeout server 10000
	    stats enable
	    stats show-legends
	    stats uri /haproxy?hastats

	    stats auth user:password

設定後、haproxyデーモンをrestartないしreloadし、http://<サイトURL>/haproxy?hastatsへアクセスすると
Webの統計情報画面が出力され、haproxyの状態を確認可能に。便利です!

2016/01追加:画面をキャプチャしました。

hastatsの画面キャプチャ!

hastatsの画面キャプチャ!

2)UNIXソケットでのアクセス

こちらはコンソールからアクセスし、各種コマンドを活用してステータスを取得したり、ロードバランスのメソッドを変えたり、サーバーを増やしたり減らしたり、といったことが可能。

2-1.haproxy.cfg 設定

こちらはglobalセクションの中に1行記載すればOK。

	global
	    # snip ---
	    # snip ---
	    # snip ---
	    stats socket /var/lib/haproxy/stats

こちらも設定後にhaproxyデーモンをrestartないしreloadし、シェル上からのアクセスが可能になります。

2-2.socatを利用したコマンド利用

socatを用いてhaproxyのUNIXソケットへアクセスし、コマンドを利用して各種情報を出力する方法。

参考:お世話になっております。
HAProxy : 統計情報を参照する#2
HAProxyをコマンドラインから操作する

実行例1:コマンドを指定して、echoで標準出力
		# echo "show info" | socat unix-connect:/var/lib/haproxy/stats stdio
		Name: HAProxy
		Version: 1.5.2
		Release_date: 2014/07/12
		Nbproc: 1
		Process_num: 1
		Pid: 1814
		Uptime: 0d 1h19m52s
		Uptime_sec: 4792
		Memmax_MB: 0
		Ulimit-n: 8036
		Maxsock: 8036
		Maxconn: 4000
		Hard_maxconn: 4000
		CurrConns: 0
		CumConns: 50
		CumReq: 71
		MaxSslConns: 0
		CurrSslConns: 0
		CumSslConns: 0
		Maxpipes: 0
		PipesUsed: 0
		PipesFree: 0
		…以下略、ダダダっとたくさん情報が!
実行例2:ソケットへアクセス後、対話モード(prompt)でコマンドを利用する場合

ソケットへアクセス後、”prompt”コマンドにて対話モードになります。

		# socat unix-connect:/var/lib/haproxy/stats stdio
		prompt		

		>

promptでもshow infoを実行してみると、こんな感じ…というか同じですw

		> show info
		Name: HAProxy
		Version: 1.5.2
		Release_date: 2014/07/12
		Nbproc: 1
		Process_num: 1
		Pid: 1814
		Uptime: 0d 1h19m52s
		Uptime_sec: 4792
		Memmax_MB: 0
		Ulimit-n: 8036
		Maxsock: 8036
		Maxconn: 4000
		Hard_maxconn: 4000
		CurrConns: 0
		CumConns: 50
		CumReq: 71
		MaxSslConns: 0
		CurrSslConns: 0
		CumSslConns: 0
		Maxpipes: 0
		PipesUsed: 0
		PipesFree: 0
		…以下略、内容は同じです。

		>  

ソケットから抜けるときは”quit”で。

		> quit

▼そのほか、目を引いたメモ

APIも用意されているようなので、こちらもおいおいと。

HAProxyAPI
https://github.com/kamermans/HAProxyAPI

 - infra, Load Balancing, network, web , ,