1? 概述
記錄日志為排錯(cuò)和分析問(wèn)題啟動(dòng)關(guān)鍵作用矫钓,本文將介紹haproxy相關(guān)的日志管理和配置
2? 日志格式
日志系統(tǒng)在global配置段里配置唱蒸,建議配置獨(dú)立的log文件凯楔,格式如下
log ? ?[len] ? ?[ ?[]]
關(guān)閉日志功能
no?log
注意:默認(rèn)發(fā)往本機(jī)的日志服務(wù)器禀横,設(shè)備是local的日志里記錄毫痕;
如果需要配置到遠(yuǎn)程的log服務(wù)器允蚣,則遠(yuǎn)程log服務(wù)器需要配置于颖,假設(shè)facility為local2,則log服務(wù)器配置如下
配置log的配置文件,/etc/rsyslog.conf
(1) local2.*? ??/var/log/local2.log
(2)打開(kāi)兩個(gè)模塊
$ModLoad? imudp
$UDPServerRun? 514
3? 日志管理
3.1? capture配置
在frontend配置段里寫入厉萝,將特定報(bào)頭信息記錄在日志中恍飘,有請(qǐng)求和響應(yīng)報(bào)文的區(qū)別。
捕獲請(qǐng)求和響應(yīng)報(bào)文中的cookie并記錄日志
格式:capture? cookie? ? len?
捕獲請(qǐng)求報(bào)文中指定的首部并記錄日志
格式:capturerequest header len
示例:
capture?request?header??X-Forwarded-For?len?15
捕獲響應(yīng)報(bào)文中指定的首部并記錄日志
格式:capture response header len
示例:
capture?response?headerContent-length?len??9
capture?response?header?Location?len??15
3.2? forwardfor配置
默認(rèn)RS端看到的是代理服務(wù)器的ip,而不是真實(shí)的客戶端ip谴垫,需要設(shè)置HA的header以及更改RS端的http的log配置
在默認(rèn)選項(xiàng)里有如下的配置章母,以下配置表示如果是除了本機(jī)發(fā)的,就不攜帶ip翩剪,因?yàn)槟J(rèn)forwardfor選項(xiàng)有expect127.0.0.0/8的配置
格式如下
option ?forwardfor?[ except ] [ header ] [ if-none ]
在由haproxy發(fā)往后端主機(jī)的請(qǐng)求報(bào)文中添加“X-Forwarded-For”首部乳怎,其值為前端客戶端的地址;用于向后端主發(fā)送真實(shí)的客戶端IP
[ except ? ]:請(qǐng)求報(bào)請(qǐng)來(lái)自此處指定的網(wǎng)絡(luò)時(shí)不予添加此首部前弯,如haproxy自身所在網(wǎng)絡(luò)
[ header ? ]:使用自定義的首部名稱蚪缀,而非默認(rèn)的“X-Forwarded-For”
[ if-none ]如果沒(méi)有首部才添加首部,如果有使用默認(rèn)值
例子:
HA上配置恕出,其中sunny-x-client為自定義的名稱询枚,RS日志格式上需要對(duì)應(yīng)上即可
option?forwardfor???????except?127.0.0.0/8?header?sunny-x-client
RS上配置,更改日志格式,默認(rèn)的值是X-Forwarded-For浙巫,這個(gè)名稱通過(guò)更改header配置來(lái)更改金蜀,如這里更改為sunny-x-client
LogFormat?"%h?%l?%u?%t\"%r\"?%>s?%b?\"%{Referer}i\"\"%{User-Agent}i\"?\"%{sunny-x-client}i\""?combined
CustomLog??logs/access_log?combined
3.3? http-request配置
向后端log傳遞用戶請(qǐng)求的協(xié)議和端口(frontend或backend),方便查看用戶訪問(wèn)的端口號(hào)的畴。以下兩個(gè)方法二選一
http-request??set-header?X-Forwarded-Port?%[dst_port]
http-request??add-header?X-Forwared-Proto?https?if?{ssl_fc}
set-header設(shè)置表示如果存在就覆蓋原信息渊抄,X-Forwarded-Port是格式的自定義的名字,這里是根據(jù)源端口來(lái)設(shè)置,如源端口是443丧裁,就添加為443护桦,當(dāng)HA收到請(qǐng)求的時(shí)候,就會(huì)把HA訪問(wèn)后臺(tái)RS用的端口號(hào)轉(zhuǎn)發(fā)到后臺(tái)的服務(wù)器
add-header不管原來(lái)是否有什么格式煎娇,都添加上去二庵,X-Forwared-Proto是格式的名字,是log里定義需要調(diào)用的名字贪染,log加上去的內(nèi)容為https
RS定義log
LogFormat?"%h?%l?%u%t?\"%r\"?%>s?%b?\"%{Referer}i\"\"%{User-Agent}i\"??\"%{X-Forwared-Proto}?i\""?combined