apache日誌

1、訪問日誌的格式
Apache內建了記錄服務器活動的功能,這就是它的日誌功能。這個《Apache日誌》系列文章介紹的就是Apache的訪問日誌、錯誤日誌,以及如何分析日誌數據,如何定製Apache日誌,如何從日誌數據生成統計報表等內容。
  若是Apache的安裝方式是默認安裝,服務器一運行就會有兩個日誌文件生成。這兩個文件是access_log(在Windows上是access.log)和error_log(在Windows上是error.log)。採用默認安裝方式時,這些文件能夠在/usr/local/apache/logs下找到;對於Windows系統,這些日誌文件將保存在Apache安裝目錄的logs子目錄。不一樣的包管理器會把日誌文件放到各類不一樣的位置,因此你可能須要找找其餘的地方,或者經過配置文件查看這些日誌文件配置到了什麼地方。
  正如其名字所示,訪問日誌access_log記錄了全部對Web服務器的訪問活動。下面是訪問日誌中一個典型的記錄:
216.35.116.91 - - [19/Aug/2000:14:47:37 -0400] "GET / HTTP/1.0" 200 654
  這行內容由7項構成,上面的例子中有兩項空白,但整行內容仍舊分紅了7項。

  第一項信息是遠程主機的地址,即它代表訪問網站的到底是誰。在上面的例子中,訪問網站的主機是216.35.116.91。隨便說一句,這個地址屬於一臺名爲si3001.inktomi.com的機器(要找出這個信息,可使用nslookup工具查找DNS),inktomi.com是一家制做Web搜索軟件的公司。能夠看出,僅僅從日誌記錄的第一項出發,咱們就能夠獲得有關訪問者的很多信息。
  默認狀況下,第一項信息只是遠程主機的IP地址,但咱們能夠要求Apache查出全部的主機名字,並在日誌文件中用主機名字來替代IP地址。然而,這種作法一般不值得推薦,由於它將極大地影響服務器記錄日誌的速度,從而也就減低了整個網站的效率。另外,有許多工具可以將日誌文件中的IP地址轉換成主機名字,所以要求Apache記錄主機名字替代IP地址是得不償失的。
  然而,若是確實有必要讓Apache找出遠程主機的名字,那麼咱們可使用以下指令:
HostNameLookups on
  若是HostNameLookups設置成double而不是on,日誌記錄程序將對它找到的主機名字進行反向查找,驗證該主機名字確實指向了原來出現的IP地址。默認狀況下HostNameLookups設置爲off

  上例日誌記錄中的第二項是空白,用一個「-」佔位符替代。實際上絕大多數時候這一項都是如此。這個位置用於記錄瀏覽者的標識,這不僅是瀏覽者的登陸名字,而是瀏覽者的email地址或者其餘惟一標識符。這個信息由identd返回,或者直接由瀏覽器返回。很早的時候,那時Netscape 0.9還佔據着統治地位,這個位置每每記錄着瀏覽者的email地址。然而,因爲有人用它來收集郵件地址和發送垃圾郵件,因此它未能保留多久,好久以前市場上幾乎全部的瀏覽器就取消了這項功能。所以,到了今天,咱們在日誌記錄的第二項看到email地址的機會已經微乎其微了。
  日誌記錄的第三項也是空白。這個位置用於記錄瀏覽者進行身份驗證時提供的名字。固然,若是網站的某些內容要求用戶進行身份驗證,那麼這項信息是不會空白的。可是,對於大多數網站來講,日誌文件的大多數記錄中這一項仍舊是空白的。
  日誌記錄的第四項是請求的時間。這個信息用方括號包圍,並且採用所謂的「公共日誌格式」或「標準英文格式」。所以,上例日誌記錄表示請求的時間是2000819日星期三14:47:37。時間信息最後的「-0400」表示服務器所處時區位於UTC以前的4小時。
  日誌記錄的第五項信息或許是整個日誌記錄中最有用的信息,它告訴咱們服務器收到的是一個什麼樣的請求。該項信息的典型格式是「METHOD RESOURCE PROTOCOL」,即「方法資源協議」。
  在上例中,METHODGET,其餘常常可能出現的METHOD還有POSTHEAD。此外還有很多可能出現的合法METHOD,但主要就是這三種。
RESOURCE是指瀏覽者向服務器請求的文檔,或URL。在這個例子中,瀏覽者請求的是「/」,即網站的主頁或根。大多數狀況下,「/」指向DocumentRoot目錄的index.html文檔,但根據服務器配置的不一樣它也可能指向其餘文件。
PROTOCOL一般是HTTP,後面再加上版本號。版本號或者是1.0,或者是1.1,但出現1.0的時候比較多。咱們知道,HTTP協議是Web得以工做的基礎,HTTP/1.0HTTP協議的早期版本,而1.1是最近的版本。當前大多數Web客戶程序仍使用1.0版本的HTTP協議。
  日誌記錄的第六項信息是狀態代碼。它告訴咱們請求是否成功,或者遇到了什麼樣的錯誤。大多數時候,這項值是200,它表示服務器已經成功地響應瀏覽器的請求,一切正常。此處不許備給出狀態代碼的完整清單以及解釋它們的含義,請參考相關資料瞭解這方面的信息。但通常地說,以2開頭的狀態代碼表示成功,以3開頭的狀態代碼表示因爲各類不一樣的緣由用戶請求被重定向到了其餘位置,以4開頭的狀態代碼表示客戶端存在某種錯誤,以5開頭的狀態代碼表示服務器遇到了某個錯誤。
  日誌記錄的第七項表示發送給客戶端的總字節數。它告訴咱們傳輸是否被打斷(即,該數值是否和文件的大小相同)。把日誌記錄中的這些值加起來就能夠得知服務器在一天、一週或者一月內發送了多少數據。
2、配置訪問日誌
  訪問日誌文件的位置其實是一個配置選項。若是咱們檢查httpd.conf配置文件,能夠看到該文件中有以下這行內容:
CustomLog /usr/local/apache/logs/access_log common
  注意,對於版本較早的Apache服務器,這行內容可能略有不一樣。它使用的可能不是CustomLog指令,而是TransferLog指令。若是你的服務器屬於這類狀況,建議你儘量地早日升級服務器。

CustomLog指令指定了保存日誌文件的具體位置以及日誌的格式。至於如何定製日誌文件的格式以及內容,咱們將在這個《Apache日誌》系列文章的後面幾篇討論。上面這行指令指定的是common日誌格式,自從有了Web服務器開始,common格式就是它的標準格式。由此咱們也能夠理解,雖然幾乎再也不有任何客戶程序向服務器提供用戶的標識信息,但訪問日誌卻還保留着第二項內容。
CustomLog指令中的路徑是日誌文件的路徑。注意,因爲日誌文件是由HTTP用戶打開的(用User指令指定),所以必須注意這個路徑要有安全保證,防止該文件被隨意改寫。
  《Apache日誌》系列文章的後面幾篇將繼續介紹:Apache錯誤日誌,定製日誌的格式和內容,如何將日誌內容寫入指定的程序而不是文件,如何從日誌文件得到一些很是有用的統計信息,等等。html

3、進程統計
UNIX能夠跟蹤每一個用戶運行的每條命令,若是想知道昨晚弄亂了哪些重要的文件,進程統計子系統能夠告訴你。它對還跟蹤一個侵入者有幫助。與鏈接時間日誌不一樣,進程統計子系統缺省不激活,它必須啓動。在Linux系統中啓動進程統計使用accton命令,必須用root身份來運行。Accton命令的形式accton filefile必須先存在。先使用touch命令來建立pacct文件:touch /var/log/pacct,而後運行accton accton /var/log/pacct。一旦accton被激活,就可使用lastcomm命令監測系統中任什麼時候候執行的命令。若要關閉統計,可使用不帶任何參數的accton命令。
lastcomm命令報告之前執行的文件。不帶參數時,lastcomm命令顯示當前統計文件生命週期內紀錄的全部命令的有關信息。包括命令名、用戶、tty、命令花費的CPU時間和一個時間戳。若是系統有許多用戶,輸入則可能很長。下面的例子:
crond F root ?? 0.00 secs Sun Aug 20 00:16
promisc_check.s S root ?? 0.04 secs Sun Aug 20 00:16
promisc_check root ?? 0.01 secs Sun Aug 20 00:16
grep root ?? 0.02 secs Sun Aug 20 00:16
tail root ?? 0.01 secs Sun Aug 20 00:16
sh root ?? 0.01 secs Sun Aug 20 00:15
ping S root ?? 0.01 secs Sun Aug 20 00:15
ping6.pl F root ?? 0.01 secs Sun Aug 20 00:15
sh root ?? 0.01 secs Sun Aug 20 00:15
ping S root ?? 0.02 secs Sun Aug 20 00:15
ping6.pl F root ?? 0.02 secs Sun Aug 20 00:15
sh root ?? 0.02 secs Sun Aug 20 00:15
ping S root ?? 0.00 secs Sun Aug 20 00:15
ping6.pl F root ?? 0.01 secs Sun Aug 20 00:15
sh root ?? 0.01 secs Sun Aug 20 00:15
ping S root ?? 0.01 secs Sun Aug 20 00:15
sh root ?? 0.02 secs Sun Aug 20 00:15
ping S root ?? 1.34 secs Sun Aug 20 00:15
locate root ttyp0 1.34 secs Sun Aug 20 00:15
accton S root ttyp0 0.00 secs Sun Aug 20 00:15
  進程統計的一個問題是pacct文件可能增加的十分迅速。這時須要交互式的或通過cron機制運行sa命令來保持日誌數據在系統控制內。sa命令報告、清理並維護進程統計文件。它能把/var/log/pacct中的信息壓縮到摘要文件/var/log/savacct/var/log/usracct中。這些摘要包含按命令名和用戶名分類的系通通計數據。sa缺省狀況下先讀它們,而後讀pacct文件,使報告能包含全部的可用信息。sa的輸出有下面一些標記項:

avio--每次執行的平均I/O操做次數
cp--用戶和系統時間總和,以分鐘計
cpu--cp同樣
k--內核使用的平均CPU時間,以1k爲單位
k*sec--CPU存儲完整性,以1k-core
re--實時時間,以分鐘計
s--系統時間,以分鐘計
tio--I/O操做的總數
u--用戶時間,以分鐘計
  例如:
842 173.26re 4.30cp 0avio 358k
2 10.98re 4.06cp 0avio 299k find
9 24.80re 0.05cp 0avio 291k ***other
105 30.44re 0.03cp 0avio 302k ping
104 30.55re 0.03cp 0avio 394k sh
162 0.11re 0.03cp 0avio 413k security.sh*
154 0.03re 0.02cp 0avio 273k ls
56 31.61re 0.02cp 0avio 823k ping6.pl*
2 3.23re 0.02cp 0avio 822k ping6.pl
35 0.02re 0.01cp 0avio 257k md5sum
97 0.02re 0.01cp 0avio 263k initlog
12 0.19re 0.01cp 0avio 399k promisc_check.s
15 0.09re 0.00cp 0avio 288k grep
11 0.08re 0.00cp 0avio 332k awk
  用戶還能夠根據用戶而不是命令來提供一個摘要報告。例如sa -m顯示以下:

885 173.28re 4.31cp 0avk
root 879 173.23re 4.31cp 0avk
alias 3 0.05re 0.00cp 0avk
qmailp 3 0.01re 0.00cp 0avk
4、Syslog設備

Syslog已被許多日誌函數採納,它用在許多保護措施中--任何程序均可以經過syslog 紀錄事件。Syslog能夠紀錄系統事件,能夠寫到一個文件或設備中,或給用戶發送一個信息。它能紀錄本地事件或經過網絡紀錄另外一個主機上的事件。
Syslog設備依據兩個重要的文件:/etc/syslogd(守護進程)和/etc/syslog.conf配置文件,習慣上,多數syslog信息被寫到/var/adm/var/log目錄下的信息文件中(messages.*)。一個典型的syslog紀錄包括生成程序的名字和一個文本信息。它還包括一個設備和一個優先級範圍(但不在日之中出現)。
  每一個syslog消息被賦予下面的主要設備之一:
LOG_AUTH--認證系統:loginsugetty
LOG_AUTHPRIV--LOG_AUTH,但只登陸到所選擇的單個用戶可讀的文件中
LOG_CRON--cron守護進程
LOG_DAEMON--其餘系統守護進程,如routed
LOG_FTP--文件傳輸協議:ftpd
tftpd
LOG_KERN--內核產生的消息

LOG_LPR--系統打印機緩衝池:lprlpd
LOG_MAIL--電子郵件系統

LOG_NEWS--網絡新聞系統
LOG_SYSLOG--syslogd8)產生的內部消息
LOG_USER--隨機用戶進程產生的消息
LOG_UUCP--UUCP子系統
LOG_LOCAL0~LOG_LOCAL7--爲本地使用保留
Syslog爲每一個事件賦予幾個不一樣的優先級:
LOG_EMERG--緊急狀況
LOG_ALERT--應該被當即改正的問題,如系統數據庫破壞
LOG_CRIT--重要狀況,如硬盤錯誤
LOG_ERR--錯誤
LOG_WARNING--警告信息
LOG_NOTICE--不是錯誤狀況,可是可能須要處理
LOG_INFO--情報信息
LOG_DEBUG--包含情報的信息,一般旨在調試一個程序時使用
syslog.conf文件指明syslogd程序紀錄日誌的行爲,該程序在啓動時查詢配置文件。該文件由不一樣程序或消息分類的單個條目組成,每一個佔一行。對每類消息提供一個選擇域和一個動做域。這些域由tab隔開:選擇域指明消息的類型和優先級;動做域指明syslogd接收到一個與選擇標準相匹配的消息時所執行的動做。每一個選項是由設備和優先級組成。當指明一個優先級時,syslogd將紀錄一個擁有相同或更高優先級的消息。因此若是指明"crit",那全部標爲critalertemerg的消息將被紀錄。每行的行動域指明當選擇域選擇了一個給定消息後應該把他發送到哪兒。例如,若是想把全部郵件消息紀錄到一個文件中,以下:
#Log all the mail messages in one place
mail.* /var/log/maillog
  其餘設備也有本身的日誌。UUCPnews設備能產生許多外部消息。它把這些消息存到本身的日誌(/var/log/spooler)中並把級別限爲"err"或更高。例如:

# Save mail and news errors of level err and higher in aspecial file.
uucp,news.crit /var/log/spooler
  當一個緊急消息到來時,可能想讓全部的用戶都獲得。也可能想讓本身的日誌接收並保存。

#Everybody gets emergency messages plus log them on anther machine
*.emerg *
*.emerg @linuxaid.com.cn
alert消息應該寫到roottiger的我的帳號中:

#Root and Tiger get alert and higher messages
*.alert root,tiger
  有時syslogd將產生大量的消息。例如內核("kern"設備)可能很冗長。用戶可能想把內核消息紀錄到/dev/console中。下面的例子代表內核日誌紀錄被註釋掉了:

#Log all kernel messages to the console
#Logging much else clutters up the screen
#kern.* /dev/console
  用戶能夠在一行中指明全部的設備。下面的例子把info或更高級別的消息送到/var/log/messages,除了mail之外。級別"none"禁止一個設備:

#Log anythingexcept mailof level info or higher
#Don't log private authentication messages!
*.info:mail.none;authpriv.none /var/log/messages
  在有些狀況下,能夠把日誌送到打印機,這樣網絡***者怎麼修改日誌都沒有用了。一般要普遍紀錄日誌。Syslog設備是一個***者的顯著目標。一個爲其餘主機維護日誌的系統對於防範服務器***特別脆弱,所以要特別注意。

  有個小命令loggersyslog3)系統日誌文件提供一個shell命令接口,使用戶能建立日誌文件中的條目。用法:logger 例如:logger This is a test
  它將產生一個以下的syslog紀錄:Aug 19 22:22:34 tiger: This is a test!
  注意不要徹底相信日誌,由於***者很容易修改它的。

5、程序日誌
  許多程序經過維護日誌來反映系統的安全狀態。su命令容許用戶得到另外一個用戶的權限,因此它的安全很重要,它的文件爲sulog。一樣的還有sudolog。另外,想Apache有兩個日誌:access_logerror_loglinux

相關文章
相關標籤/搜索