linux resin 查看日志命令,【转】linux:访问日志分析
作為一個程序員或項目負責人,甚至運營人員,很多人都想知道:
* 我們的項目訪問量怎么樣
* 用戶訪問高峰在什么時候
* 系統變慢的時候用戶做了哪些操作
* 用戶對哪些功能比較感興趣
* 真實用戶在服務器上的操作軌跡是什么樣的
* 系統的瓶頸在哪
* 哪些地方應該優化
* 對什么地方優化可以收益最大化
* 系統是否存在異常訪問
卻苦于無從獲得這些信息。
其實,只要合理記錄并仔細分析服務器的訪問日志,上面問題都可以找到答案。
===== 日志格式定義 =====
為了更好的復用分析工具,另外我們也需要記錄一些標準日志中沒有的信息,因此需要定義用于分析的日志格式。
如果在項目中使用了多種web服務器,只需要根據具體情況定義一種即可。
從性能方便考慮,在apache或nginx上記錄日志較好;
從分析的方便程度來說,tomcat或resin更方便一些(因為一般來說,只有動態請求會到達應用服務器,而這些請求也是我們最感興趣的)。請大家根據自身項目的情況來選擇.
==== 基本格式 ====
我們分析的access log格式如下:
執行時間 用戶標識(非必需,可以從cookie或session中獲得) 遠程主機 請求時間 請求url(是否帶參數均可)
http響應狀態 返回字節數
:!:
各種服務器記錄執行時間的單位有所不同,tomcat和nginx為毫秒,resin和apache為微秒,這個需要特別注意。
==== apache日志配置 ====
LogFormat "%D %{xxx}C %h %t \"%r\" %>s %b \"%{Referer}i\""
simple
CustomLog logs/access_log simple
%D為服務器處理該請求的時間,單位為微秒。
%{xxx}C,從cookie中取名為xxx的cookie值
==== nginx日志配置 ====
log_format simple '$request_time $cookie_xxx $remote_addr
[$time_local]'
'"$request" $status $body_bytes_sent '
'"$http_referer"';
$request_time為服務器處理該請求的時間,單位為毫秒。
$cookie_xxx,從cookie中取名為xxx的cookie值
==== tomcat日志配置 ====
prefix="localhost_access_log." suffix=".txt" pattern='%D %{xxx}s %h
%t "%r" %s %b %{Referer}i' resolveHosts="false"/>
%D為服務器處理該請求的時間,單位為毫秒。
%{xxx}s 從session中取得變量xxx的值
%{xxx}c 從cookie 中取得變量xxx的值
==== resin日志配置 ====
format='%D %{xxx}c %h %t "%r" %s %b
"%{Referer}i"'?rollover-period="1D"/>
%D為服務器處理該請求的時間,單位為微秒。
%{xxx}c,從cookie中取名為xxx的cookie值
resin日志默認的寫法在某些特定情況下會存在嚴重性能問題,導致所有線程被鎖,服務器失去響應。因此請用上面配置完全替換原有配置。resin日志格式的詳細說明,請參考http://caucho.com/resin-4.0/admin/logging.xtp#Access
logging?。
==== 獲得多次轉發的客戶端IP ====
在生產環境中,一般到應用服務器的時候,已經經過了多次轉發,如array-->apache(nginx)-->tomcat(resin),這個時候,如果我們想要在access
log中獲得用戶客戶端的原始IP,就需要做一些特殊配置。
nginx在進行轉發時,一般會設置
proxy_set_header?X-Real-IP?$remote_addr;
此時,nginx后面的服務器在配置access log時,需要將%h改為%{X-Real-IP}i
array,apache,squid在轉發時,一般都會將客戶端真實ip放到header中X-Forwarded-For,那么,他們后面的服務器在配置access
log時,需要將%h改為%{X-Forwarded-For}i
nginx作為backend server時,跟上面情形有所不同,需要做一些特殊配置:
首先,編譯時需要添加一個參數 --with-http_realip_module
然后,需要做如下設置:
設置信任ip列表,也就是負載均衡設備的ip,可以是一個或多個。然后設置保存客戶端真實IP的header變量名,一般是X-Real-IP或X-Forwarded-For,如下
set_real_ip_from?192.168.1.0/24;
set_real_ip_from?192.168.2.1;
real_ip_header?X-Real-IP;
===== 概要分析腳本 timeout.awk =====
#對于請求超時的記錄進行標記,并打印出來
#!/bin/sh
BEGIN{
#基礎單位,tomcat/apache為1設為1,resin/nginx/設為1000.
base=1
#超時閥值,建議設為300-500,單位為毫秒
valve=500
}
#剔除靜態文件請求
$7 ~ /\.[jd][hsw][ptr][m]?[l]?[\b\?]?|^\/dwr/ {
#總體統計
costTime=$1/base
sumTime+=costTime
totalCount++
if(min>costTime) min=costTime
if(max
#分布區間
if(costTime>=0 && costTime<1000)
{area01+=1}
if(costTime>=1000 && costTime<2000)
{area12+=1}
if(costTime>=2000 && costTime<3000)
{area23+=1}
if(costTime>=3000 && costTime<4000)
{area34+=1}
if(costTime>=4000 && costTime<5000)
{area45+=1}
if(costTime>=5000) {area50+=1}
#超時統計
pos=index($7,"?")
if(pos>0) {url=substr($7,0,pos-1)}
else { url=$7 }
urlCount[url]++
urlsumTime[url]+=costTime
if(costTime>valve)
{ urlTimeout[url]++ }
}
END{
printf("\n當前正在分析文件%s,共處理%s個請求,響應時間最小為-ms,最大為�ms,平均Mms\n",FILENAME,totalCount,min,max,sumTime/totalCount)
printf("\n所有請求的分布區間如下:\n")
printf("小于1秒的請求�個,占%.2f%\n",area01,area01/totalCount*100)
printf("1--2秒的請求�個,占%.2f%\n",area12,area12/totalCount*100)
printf("2--3秒的請求�個,占%.2f%\n",area23,area23/totalCount*100)
printf("3--4秒的請求�個,占%.2f%\n",area34,area34/totalCount*100)
printf("4--5秒的請求�個,占%.2f%\n",area45,area45/totalCount*100)
printf("大于5秒的請求�個,占%.2f%\n",area50,area50/totalCount*100)
printf("\n下面是請求超時嚴重的url列表,需要重點優化,當前超時設定為]ms\n",valve)
for(url in urlTimeout)?{
#超時小于等于3次,或者超時比例20%以下的不輸出
if(urlTimeout[url]>3 &&
(urlTimeout[url]/urlCount[url]>0.2)) {
printf("%-80s共處理]次,超時]次,占%3.2f%,平均耗時mms\n",url,urlCount[url],urlTimeout[url],urlTimeout[url]/urlCount[url]*100,urlsumTime[url]/urlCount[url])
}
}
}
===== 概要分析腳本 timeout.awk =====
用于生成一個日志分析概覽,可以對當前系統的性能有個大概了解,分析結果樣式如下:
執行命令
awk -f timeout.awk valve=200 base=1 datafile
其中,valve為超時的閥值,默認500ms,base根據服務器類型,tomcat/apache為1,resin/nginx為1000;
這個腳本僅分析jsp/jhtml/dwr請求,不統計對靜態資源的請求。
===== 分析命令 =====
下面在分析核心爆破英語項目時,一些我常用的分析命令,等有時間了再整理為一個工具,也歡迎大家貢獻自己的想法。
下面命令僅適用于tomcat和nginx日志,如果是apache或resin日志,請將$1>10替換為$1>10000,這個條件主要用于過濾靜態請求。
cost time 10 大 url
awk '$1>10 {print $0}' localhost_access_log.2010-05-21.txt |awk
'{print $7}'|awk -F? '{print $1}'|sort|uniq -c|sort -rbg|sed
10q
訪問量10大時間點(分鐘)
awk '$1>10 {print $0}' localhost_access_log.2010-05-21.txt |awk
'{print $4}'|awk -F: '{print $2":"$3}'|sort|uniq -c|sort -rbg|sed
10q
10大ip (訪問量最大)
awk '$1>10 {print $0}' localhost_access_log.2010-05-21.txt|awk
'{print $3}'|sort|uniq -c|sort -rbg|sed 10q
url時間點分布 (指定URL 訪問量 按分鐘)
awk '$7~"startLinker.jhtml" {print $0}'
localhost_access_log.2010-05-21.txt |awk '{print $4}'|awk -F:
'{print $2":"$3}'|uniq -c
指定ip時間點分布 (指定IP 訪問量 按分鐘)
awk '$1>10 {print $0}' localhost_access_log.2010-05-21.txt |grep
'192.168.30.21\b' |awk '{print $4}'|awk -F: '{print $2":"$3}'|uniq
-c
指定時間點url分布 (具體某一分鐘)
awk '$1>10 {print $0}' localhost_access_log.2010-05-21.txt|grep
'12:45'|awk '{print $7}'|awk -F? '{print $1}'|sort|uniq -c|sort
-bg
根據用戶名查找登錄過的ip
awk '{print $2" "$3}' localhost_access_log.2010-05-21.txt |grep
's01o050'|awk '{print $2}'|sort|uniq
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的linux resin 查看日志命令,【转】linux:访问日志分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 嵌入式linux python移植过程_
- 下一篇: linux 其他常用命令