在負(fù)載均衡中,有兩種常用的方式,NAT和單臂(lvs叫DR),在nat方式下,后端apache只能看到負(fù)載均衡設(shè)備的IP而不是客戶端的IP,如果想讓apache記錄客戶端的IP,需要在負(fù)載均衡設(shè)備在請(qǐng)求后端apahce服務(wù)器時(shí),在請(qǐng)求頭中向apache傳送一個(gè)環(huán)境變量,如在netscaler中設(shè)置source-ip,
LogFormat和CustomLog指令的格式化參數(shù)是一個(gè)字符串。這個(gè)字符串會(huì)在每次請(qǐng)求發(fā)生的時(shí)候,被記錄到日志中去。它可以包含將被原樣寫入日志的文本字符串以及C風(fēng)格的控制字符"\n"和"\t"以實(shí)現(xiàn)換行與制表。文本中的引號(hào)和反斜杠應(yīng)通過"\"來轉(zhuǎn)義。
請(qǐng)求本身的情況將通過在格式字符串中放置各種"%"轉(zhuǎn)義符的方法來記錄,它們?cè)趯懭肴罩疚募r(shí),根據(jù)下表的定義進(jìn)行轉(zhuǎn)換:
格式字符串 | 描述 | ||||||
---|---|---|---|---|---|---|---|
%% | 百分號(hào)(Apache2.0.44或更高的版本) | ||||||
%a | 遠(yuǎn)端IP地址 | ||||||
%A | 本機(jī)IP地址 | ||||||
%B | 除HTTP頭以外傳送的字節(jié)數(shù) | ||||||
%b | 以CLF格式顯示的除HTTP頭以外傳送的字節(jié)數(shù),也就是當(dāng)沒有字節(jié)傳送時(shí)顯示'- '而不是0。 | ||||||
%{Foobar}C | 在請(qǐng)求中傳送給服務(wù)端的cookieFoobar的內(nèi)容。 | ||||||
%D | 服務(wù)器處理本請(qǐng)求所用時(shí)間,以微為單位。 | ||||||
%{FOOBAR}e | 環(huán)境變量FOOBAR的值 | ||||||
%f | 文件名 | ||||||
%h | 遠(yuǎn)端主機(jī) | ||||||
%H | 請(qǐng)求使用的協(xié)議 | ||||||
%{Foobar}i | 發(fā)送到服務(wù)器的請(qǐng)求頭Foobar: 的內(nèi)容。 | ||||||
%l | 遠(yuǎn)端登錄名(由identd而來,如果支持的話),除非IdentityCheck 設(shè)為"On ",否則將得到一個(gè)"-"。 | ||||||
%m | 請(qǐng)求的方法 | ||||||
%{Foobar}n | 來自另一個(gè)模塊的注解Foobar 的內(nèi)容。 | ||||||
%{Foobar}o | 應(yīng)答頭Foobar: 的內(nèi)容。 | ||||||
%p | 服務(wù)器服務(wù)于該請(qǐng)求的標(biāo)準(zhǔn)端口。 | ||||||
%P | 為本請(qǐng)求提供服務(wù)的子進(jìn)程的PID。 | ||||||
%{format}P | 服務(wù)于該請(qǐng)求的PID或TID(線程ID),format 的取值范圍為:pid 和tid (2.0.46及以后版本)以及hextid (需要APR1.2.0及以上版本) | ||||||
%q | 查詢字符串(若存在則由一個(gè)"? "引導(dǎo),否則返回空串) | ||||||
%r | 請(qǐng)求的第一行 | ||||||
%s | 狀態(tài)。對(duì)于內(nèi)部重定向的請(qǐng)求,這個(gè)狀態(tài)指的是原始請(qǐng)求的狀態(tài),---%>s 則指的是最后請(qǐng)求的狀態(tài)。 | ||||||
%t | 時(shí)間,用普通日志時(shí)間格式(標(biāo)準(zhǔn)英語格式) | ||||||
%{format}t | 時(shí)間,用strftime(3) 指定的格式表示的時(shí)間。(默認(rèn)情況下按本地化格式) | ||||||
%T | 處理完請(qǐng)求所花時(shí)間,以秒為單位。 | ||||||
%u | 遠(yuǎn)程用戶名(根據(jù)驗(yàn)證信息而來;如果返回status(%s )為401,可能是假的) | ||||||
%U | 請(qǐng)求的URL路徑,不包含查詢字符串。 | ||||||
%v | 對(duì)該請(qǐng)求提供服務(wù)的標(biāo)準(zhǔn)ServerName 。 | ||||||
%V | 根據(jù) UseCanonicalName指令設(shè)定的服務(wù)器名稱。 | ||||||
%X | 請(qǐng)求完成時(shí)的連接狀態(tài):
(在1.3以后的版本中,這個(gè)指令是 | ||||||
%I | 接收的字節(jié)數(shù),包括請(qǐng)求頭的數(shù)據(jù),并且不能為零。要使用這個(gè)指令你必須啟用 mod_logio模塊。 | ||||||
%O | 發(fā)送的字節(jié)數(shù),包括請(qǐng)求頭的數(shù)據(jù),并且不能為零。要使用這個(gè)指令你必須啟用 mod_logio模塊。 |
可以緊跟在"%"后面加上一個(gè)逗號(hào)分隔的狀態(tài)碼列表來限制記錄的條目。例如,"%400,501{User-agent}i
"只記錄狀態(tài)碼400和501發(fā)生時(shí)的User-agent
頭內(nèi)容;不滿足條件時(shí)用"-
"代替。狀態(tài)碼前還可以加上"!
"前綴表示否定,"%!200,304,302{Referer}i
"記錄所有不同于200,304,302的狀態(tài)碼發(fā)生時(shí)的Referer
頭內(nèi)容。
"<"和">"修飾符可以用來指定對(duì)于已被內(nèi)部重定向的請(qǐng)求是選擇原始的請(qǐng)求還是選擇最終的請(qǐng)求。默認(rèn)情況下,%s, %U, %T, %D, %r
使用原始請(qǐng)求,而所有其他格式串則選擇最終請(qǐng)求。例如,%>s
可以用于記錄請(qǐng)求的最終狀態(tài),而 %<u
則記錄一個(gè)已經(jīng)被內(nèi)部重定向到非認(rèn)證資源的請(qǐng)求的原始認(rèn)證用戶。
出于安全考慮,從2.0.46版本開始,%r
, %i
, %o
中的特殊字符,除了雙引號(hào)(")和反斜線(\)分別用 \"
和 \\
進(jìn)行轉(zhuǎn)義、空白字符用C風(fēng)格(\n
, \t
等)進(jìn)行轉(zhuǎn)義以外,非打印字符和其它特殊字符使用 \xhh
格式進(jìn)行轉(zhuǎn)義(hh是該字符的16進(jìn)制編碼)。在2.0.46以前的版本中,這些內(nèi)容會(huì)被完整的按原樣記錄。這種做法將導(dǎo)致客戶端可以在日志中插入控制字符,所以你在處理這些日志文件的時(shí)候要特別小心。
在2.0版本中(不同于1.3),%b
和 %B
格式字符串并不表示發(fā)送到客戶端的字節(jié)數(shù),而只是簡(jiǎn)單的表示HTTP應(yīng)答字節(jié)數(shù)(在連接中斷或使用SSL時(shí)與前者有所不同)。mod_logio提供的
%O
格式字符串將會(huì)記錄發(fā)送的實(shí)際字節(jié)數(shù)。
-------------------------------------------------------------------------------------------------
Apache和nginx等Web服務(wù)器前端有負(fù)載均衡設(shè)備或者CACHE SERVER等情況下,APACHE日志中無法正確獲取CLIENT的源IP,無法統(tǒng)計(jì)訪問量,這個(gè)時(shí)候就要做一些設(shè)置上的更改,這里舉例為squid3+apache2.2環(huán)境
一、修改Squid配置文件
vi ./squid.conf
emulate_httpd_log on
logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh 改為
logformat combined %{X-Forwarded-For}i %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh
access_log /home/web/squid3/var/logs/access.log combined
二、修改Apache配置文件
vi ./httpd .conf
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
# squid proxy
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
但是Squid會(huì)報(bào)錯(cuò),說語法錯(cuò)誤,其實(shí)只要修改Apache配置文件就可以了
聯(lián)系客服