どうも、かっぱこと川原 洋平(@inokara)です。

はじめに

HA Proxy のログは syslog を経由して下記のように一つの haproxy.log ファイルに出力していますが…

20140729_001_ha-proxy-white-belts

frontend セクションを複数設定している場合には frontend 毎にログを異なるファイルに分けれれば色々と嬉しいような気がしたので試してみようと思い fluentd を使って出し分け出来たのは前回。今回は rsyslog でサクッと試してみます。

やること

frontend の設定

以下のような感じで frontend 毎に rsyslog のファシリティを変えておきます。

frontend の一つ目
log-format %{+Q}o %{-Q}ci - - [%T] %r %ST %B "" "" %cp %ms %ft %b %s
log 127.0.0.1   local1
frontend の二つ目
log-format %{+Q}o %{-Q}ci - - [%T] %r %ST %B "" "" %cp %ms %ft %b %s
log 127.0.0.1   local2

設定したら haproxy を再起動しておきます。

rsyslog の設定

以下のように設定しておきます。

$ModLoad imudp
$UDPServerRun 514
$template Haproxy,"%msg%n"
local0.=info -/var/log/haproxy/haproxy.log;Haproxy
local1.=info -/var/log/haproxy/haproxy-frontend1.log;Haproxy
local2.=info -/var/log/haproxy/haproxy-frontend2.log;Haproxy
## don't log anywhere else
local0.* ~

設定したら rsyslog を再起動しておきます。

ログはどうなってるん?

ログ、見てみます。

# cat haproxy-frontend1.log
 xxx.xxx.xxx.xxx - - [28/Jul/2014:15:44:18 +0000] "GET /check HTTP/1.1" 200 293 "" "" 51149 048 "cluster1" "backend" "web1"
 xxx.xxx.xxx.xxx - - [28/Jul/2014:15:44:20 +0000] "GET /check HTTP/1.1" 200 293 "" "" 51151 597 "cluster1" "backend" "web1"

もう一個。

# cat haproxy-frontend2.log
 xxx.xxx.xxx.xxx - - [28/Jul/2014:15:44:50 +0000] "GET /check HTTP/1.1" 200 293 "" "" 51155 275 "cluster2" "application-backend" "web1"
 xxx.xxx.xxx.xxx - - [28/Jul/2014:15:44:50 +0000] "GET /check HTTP/1.1" 200 293 "" "" 51155 739 "cluster2" "application-backend" "web1"

ちゃんと frontend 毎に出力分けが出来ています。

rsyslog でも

意外と簡単に出来ましたが…local0 から local7 を使いきったらどうするんだっけって気になります。

元記事はこちらです。