WebSphere Application Server 是一個基于 Java 的 Web 應(yīng)用程序服務(wù)器,它構(gòu)建在開放標(biāo)準(zhǔn)的基礎(chǔ)之上,能幫助您部署與管理從簡單的 Web 站點到強(qiáng)大的電子商務(wù)解決方案的諸多應(yīng)用程序。它遵循 J2EE 并為 Java 組件、XML 和 Web 服務(wù)提供了一個可移植的 Web 部署平臺,這個平臺能夠與數(shù)據(jù)庫交互并提供動態(tài) Web 內(nèi)容。
隨著WebSphere Application Server產(chǎn)品在中間市場的份額不斷增加,使用WebSphere Application Server作為IT基礎(chǔ)產(chǎn)品的企業(yè)越來越多,作為我們企業(yè)的IT部門,很重要的一部分工作就是管理WebSphere Application Server。由于業(yè)務(wù)系統(tǒng)的復(fù)雜性,以及IT系統(tǒng)的龐大等多種原因,我們的系統(tǒng)不可避免的會出現(xiàn)這樣那樣的問題,要定定位和解決這些問題,WebSphere Application Server的日志將起了很關(guān)鍵作用。怎么管理以及查看這些日志呢?
本文作者所一直從事WebSphere Application Server的相關(guān)服務(wù)工作,積累了許多WebSphere Application Server的管理經(jīng)驗。我們希望能夠通過一系列的文章與讀者分享這些經(jīng)驗想,幫助您更好管理好你的WebSphere Application Server。
本文將從問題診斷入手,在解決一系列具體問題的過程中,介紹配置日志的策略以及具體參數(shù)的用法,為您提供診斷問題的途經(jīng)以及指定日志策略的方式和方法。
在我們基于J2EE的應(yīng)用程序中,問題的出現(xiàn)可能在各個相關(guān)的環(huán)節(jié)出現(xiàn)。所以首先要明確問題是發(fā)生在哪個組建上的,我們可以通過測試單個組件,檢查他們成功或者失敗來把問題進(jìn)行一個隔離。從而分析相關(guān)日志來定位問題。下圖是一些常用的測試方法以及相關(guān)日志的位置。
當(dāng)我們的系統(tǒng)出現(xiàn)不能訪問現(xiàn)象時,我們一般按照一下步驟進(jìn)行分析:
1.使用瀏覽器通過80端口訪問應(yīng)用(例如:http://localhost/myWeb/)
2.使用瀏覽器通過9080(根據(jù)實際端口而定)端口訪問應(yīng)用(例如:http://localhost:9080/myWeb)如果訪問正常,說明HTTP server的請求沒有正常轉(zhuǎn)發(fā),這時候通過http://localhost來驗證HTTP 服務(wù)器是否正常啟動,如果正常說明HTTP server 運(yùn)行正常,此時請檢查http_plugin.log查看插件日志,并且查看HTTP server 的配置文件httpd.conf,查找WebSpherePluginConfig 所加載的plugin-cfg.xml文件是否正確。
3.如果通過9080(根據(jù)實際端口而定)端口不能訪問應(yīng)用程序,可以通過http://localhost:9080/snoop 驗證應(yīng)用服務(wù)器是否存活。如存活則如圖:
一般說明應(yīng)用程序存在問題,查看分析相關(guān)日志:System.Out.log 、SystemErr.log、activity.log定位應(yīng)用程序引起的問題。
System.Out.log 、SystemErr.log 屬于JVM 日志,。WebSphere Application Server 寫格式化的消息到 System.out日志。另外,應(yīng)用程序和其他代碼可以寫入這些日志,通過print() 和 println() 方法實現(xiàn)。有些開發(fā)工具箱(Developer Kit)內(nèi)置如 Throwable 類的 printStackTrace() 方法也可以寫入這些日志。通常,System.out 日志用于監(jiān)控應(yīng)用程序服務(wù)器的運(yùn)行是否正常。System.out 日志可用于問題確定,但建議改為使用 IBM 服務(wù)日志和日志分析器的高級能力。System.err 日志包含異常堆棧跟蹤信息,這在執(zhí)行問題分析時很有用。
因為每個應(yīng)用程序服務(wù)器都代表 JVM,所以每個應(yīng)用程序服務(wù)器和它的所有應(yīng)用程序都有一組 JVM 日志,缺省情況下該日志位于 installation_root/profiles/profile_name/logs/server_name 目錄。在 WebSphere Application Server Network Deployment 配置的情況下,也為 Deployment Manager 和每個節(jié)點管理器創(chuàng)建 JVM 日志,因為它們也代表 JVM。
activity.log為IBM 日志,應(yīng)用程序服務(wù)器從各種 WebSphere Application Server 組件的活動創(chuàng)建服務(wù)或活動日志文件。服務(wù)或活動日志文件(activity.log)是二進(jìn)制文件,它位于 install_root 的 logs 目錄中,我們可以使用日志分析器用于查看服務(wù)或活動日志文件。
JVM 日志是作為純文本文件寫的。因此,查看這些日志沒有特殊的要求。它們位于 installation_directory/profiles/profile_name/logs/server_name 目錄中,并在缺省情況下命名為 SystemOut.log 和 SystemErr.log。
有兩種技術(shù)可用于查看應(yīng)用程序服務(wù)器的 JVM 日志。
l 使用管理控制臺。它支持從遠(yuǎn)程機(jī)器查看 JVM 日志。
l 使用存儲日志的機(jī)器上的文本編輯器。
此任務(wù)的步驟
1.從管理控制臺查看 JVM 日志。
啟動管理控制臺。
在控制臺導(dǎo)航樹中單擊故障診斷 > 日志和跟蹤。要查看特定服務(wù)器的日志,單擊服務(wù)器名以選擇它,然后單擊 JVM 日志。
選擇運(yùn)行時選項卡。
單擊與您要查看的日志相應(yīng)的查看。
2.在服務(wù)器硬盤查看JVM 日志。
轉(zhuǎn)至存儲日志的機(jī)器。
在文本編輯器中打開文件或?qū)⑽募戏诺骄庉嫼筒榭闯绦蛑小?/p>
根據(jù) JVM 日志配置的不同,格式化的消息可以用基本或高級格式寫入 JVM 日志。
消息格式 格式化的消息可以使用這兩種格式中的一種寫入 JVM 日志:
基本格式 這是 WebSphere Application Server 的較早版本中使用的格式。
高級格式 如果可能,則通過添加有關(guān)事件的信息來擴(kuò)展基本格式。
下面是一些日志常用格式,可以幫助我們更好的查看日志,可能找到的采用這些格式的各種字段如下:
TimeStamp
時間戳記是使用其被格式化所處于的進(jìn)程語言環(huán)境格式化的。它包含標(biāo)準(zhǔn)日期(例如,YYMMDD),以毫秒為精度的 24 小時時間和時區(qū)。
ThreadId
從發(fā)出消息的線程的散列代碼生成的 8 個字符的十六進(jìn)制值。
ThreadName
發(fā)出消息或跟蹤事件的 Java 線程名。
ShortName
發(fā)出消息或跟蹤事件的記錄組件的縮寫名稱。這通常是 WebSphere Application Server 內(nèi)部組件的類名,但也可以是一些用戶應(yīng)用程序的其他標(biāo)識。
LongName
發(fā)出消息或跟蹤事件的記錄組件的全名。這通常是 WebSphere Application Server 內(nèi)部組件的標(biāo)準(zhǔn)類名,但也可以是一些用戶應(yīng)用程序的其他標(biāo)識。
EventType
表明消息或跟蹤事件類型的一個字符字段。消息類型是大寫的??赡苤蛋ǎ?/p>
F
致命消息。
E
錯誤消息。
W
警告消息。
A
審計消息。
I
參考消息。
C
配置消息。
D
詳細(xì)信息消息。
O
通過用戶應(yīng)用程序或內(nèi)部組件直接寫入 System.out 的消息。
R
通過用戶應(yīng)用程序或內(nèi)部組件直接寫入 System.err 的消息。
Z
表明不可識別的類型的占位符。
類名
發(fā)出消息或跟蹤事件的類。
方法名稱
發(fā)出消息或跟蹤事件的方法。
組織
擁有發(fā)出消息或跟蹤事件的應(yīng)用程序的組織。
產(chǎn)品
發(fā)出消息或跟蹤事件的產(chǎn)品。
組件
發(fā)出消息或跟蹤事件的產(chǎn)品內(nèi)的組件。
基本格式
以基本格式顯示的消息事件使用下列格式。符號 <name> 表明將總是在基本格式消息中出現(xiàn)的必需字段。符號 [name] 表明將被包括的可選的或有條件的字段,如果可以確定它們的話。
<timestamp><threadId><shortName><eventType>[className][methodName]<message>
高級格式
以高級格式顯示的消息事件使用下列格式。表示法 <name> 用于表明將總是以消息條目的高級格式出現(xiàn)的必需字段。表示法 [name] 用于表明將被包括的可選的或有條件的字段(如果可以確定它們的話)。
<timestamp><threadId><eventType><UOW><source=longName>[className][methodName]<Organization><Product><Component>[thread=threadName]
<message>
使用管理控制臺配置應(yīng)用程序服務(wù)器的 JVM 日志。直到下一次重新啟動應(yīng)用程序服務(wù)器,才應(yīng)用為了運(yùn)行應(yīng)用程序服務(wù)器而對 JVM 日志進(jìn)行的配置更改。
此任務(wù)的步驟
啟動管理控制臺
單擊故障診斷 > 記錄和跟蹤,然后單擊服務(wù)器 > JVM 日志。
選擇“配置”選項卡。
滾動通過面板以顯示要配置的日志的屬性。
更改相應(yīng)的配置屬性并單擊應(yīng)用。
保存您的配置更改。
使用此頁面查看和修改 Java 虛擬機(jī)(JVM)System.out 和 System.err 日志的設(shè)置。
要查看此管理控制臺頁面,單擊故障診斷 > 日志和跟蹤 > server name > JVM 日志。
查看和修改此受管進(jìn)程的 Java 虛擬機(jī)(JVM)System.out 和 System.err 日志的設(shè)置。通過將 JVM 的 System.out 和 System.err 流重定向到獨(dú)立日志文件來創(chuàng)建 JVM 日志。System.out 日志用于監(jiān)控運(yùn)行應(yīng)用程序服務(wù)器的運(yùn)行狀況。System.err 日志包含執(zhí)行問題分析時有用的異常堆棧跟蹤信息。每個應(yīng)用程序服務(wù)器及其所有應(yīng)用程序有一組 JVM 日志。還為 Deployment Manager 和每個節(jié)點管理器創(chuàng)建 JVM 日志。“配置”面板上的更改將在重新啟動服務(wù)器時應(yīng)用。“運(yùn)行時”面板上的更改將立即應(yīng)用。
“配置”選項卡
文件名
指定此頁面中描述的某個日志文件的名稱。
第一個文件名字段指定 System.out 日志的名稱。第二個文件名字段指定 System.err 文件的名稱。
按下“運(yùn)行時”選項卡上的查看按鈕查看所選日志文件的內(nèi)容。
為 System.out 日志或 System.err 日志指定的文件名必須具有以下某個值:
文件名
文件系統(tǒng)中的文件的名稱。建議您使用標(biāo)準(zhǔn)文件名。如果該文件名不是標(biāo)準(zhǔn)文件名,則認(rèn)為它相對于服務(wù)器的當(dāng)前工作目錄。每個日志必須配置一個專用文件。例如,我們無法將 System.out 和 System.err 重定向到同一物理文件。
如果包含文件的目錄已經(jīng)存在,則正在運(yùn)行的服務(wù)器所使用的用戶標(biāo)識需要該目錄的讀/寫訪問權(quán)限。如果該目錄不存在,將會用適當(dāng)?shù)脑S可權(quán)創(chuàng)建它。正在運(yùn)行的服務(wù)器所使用的用戶標(biāo)識必須有創(chuàng)建該目錄的權(quán)限。
控制臺
這是用于將流重定向到關(guān)聯(lián)進(jìn)程流的特殊文件名。如果為 System.out 指定了此值,則文件重定向到 stdout。如果為 System.err 指定了此值,則文件重定向到 stderr。
無
廢棄寫入流的所有數(shù)據(jù)。指定無等于將流重定向到 UNIX 系統(tǒng)上的 dev/null。
filename 的缺省路徑是變量 SERVER_LOG_ROOT 的值。要查看 SERVER_LOG_ROOT 變量的值:
1.在管理控制臺上,選擇環(huán)境 > WebSphere 變量
2.單擊服務(wù)器單選按鈕,然后單擊應(yīng)用。在顯示的列表中出現(xiàn) SERVER_LOG_ROOT 變量的值。
要更改 SERVER_LOG_ROOT 的值:
1.選擇 SERVER_LOG_ROOT
2.在值字段中輸入新的路徑
3.單擊“應(yīng)用”
4.保存此配置。您必須重新啟動服務(wù)器以使更改生效。
當(dāng)然我們還可以以將 ${SERVER_LOG_ROOT}/和 ${SERVER_LOG_ROOT}/SystemErr.log 文件的位置和名稱更改為任何其他絕對路徑和文件名(例如,/tmp/myLogfile.log)。
文件格式
指定用于保存 System.out 文件的格式。
日志文件滾動(保留舊的日志文件生成新的日志文件)
應(yīng)用服務(wù)器有日志自管理功能,通過使用這一組配置屬性將 System.out 或 System.err 日志文件配置為自我管理。
自我管理日志文件將消息寫入文件,直到達(dá)到時間或大小條件。當(dāng)達(dá)到指定時間或文件達(dá)到指定大小時,日志文件將滾動(包括關(guān)閉文件并重命名保存的文件),同時記錄將臨時掛起。新保存的文件名是原始文件名加上表明文件重命名時間的時間戳記限定符。一旦完成重命名,則重新打開具有原始名稱的新的空日志文件,并恢復(fù)記錄。雖然日志文件滾動后一條消息可能會分割在保存的文件和當(dāng)前文件中,但全部消息都將保留。
如果關(guān)聯(lián)流重定向到文件,則僅可以將一個日志配置為自我管理。
文件大小
單擊日志文件的此屬性以讓它根據(jù)其文件大小管理它自己。當(dāng)文件達(dá)到最大大小字段中指定的大小時,發(fā)生自動滾動。
最大大小
指定文件的最大大?。ㄒ哉鬃止?jié)為單位)。當(dāng)文件達(dá)到此大小時,它就滾動。
此屬性僅當(dāng)您單擊“文件大小”后才有效。
時間
單擊日志文件的此屬性以讓它根據(jù)一天中的時間管理它自己。文件在啟動時間字段中指定的時間滾動。
啟動時間
指定應(yīng)用程序服務(wù)器重新啟動后第一次啟動周期滾動算法的時間,即,一天中的幾點(從 1 到 24)。算法在應(yīng)用程序服務(wù)器啟動時裝入。一旦滾動算法在啟動時間字段指定的鐘點啟動后,它將每隔一定的時間(重復(fù)時間字段指定的小時數(shù))滾動文件。此滾動模式將繼續(xù)使用不作調(diào)整,直到應(yīng)用程序服務(wù)器停止。
注:滾動總是在一天中指定鐘點開始時發(fā)生。一天的第一個小一天的第一個小時(自 00:00:00(午夜)起)是 1 點,而一天的最后一個小時(自 23:00:00 起)是 24 點。因此,如果您希望日志文件在午夜?jié)L動,則將啟動時間設(shè)置為 1。
重復(fù)時間
指定隔多少小時(從 1 到 24)發(fā)生周期滾動。
重復(fù)時間
指定每隔多少小時日志文件滾動一次。有效值范圍是從 1 到 24。
配置日志文件按時間、按大小或按時間和大小滾動。單擊文件大小和時間以在首次匹配條件時滾動文件。例如,如果重復(fù)時間字段是 5 小時,而最大文件大小是 2 MB,則文件將每 5 小時滾動一次,除非時間間隔未到而文件大小已達(dá) 2 MB。按文件大小滾動后,文件將繼續(xù)按時間間隔滾動。
歷史日志文件的最大大小
指定要保存的歷史(已滾動)文件數(shù)。流將寫入當(dāng)前文件,直到它滾動。滾動時,關(guān)閉當(dāng)前文件,并以當(dāng)前名稱加上滾動時間戳記組成的新名稱保存該文件。然后流將以原始名稱重新打開一個新文件以繼續(xù)寫入。歷史文件數(shù)從零增長到最大歷史文件數(shù)字段的值。下一次滾動刪除最舊的歷史文件。
已安裝應(yīng)用程序的輸出
指定是否記錄和格式化應(yīng)用程序代碼發(fā)出的 System.out 或 System.err 打印語句。
顯示應(yīng)用程序打印語句
單擊此字段以顯示應(yīng)用程序使用 print 和 println 流方法寫入流的消息??偸浅霈F(xiàn) WebSphere Application Server 系統(tǒng)消息。
格式化打印語句
單擊此字段以格式化應(yīng)用程序打印語句(如 WebSphere Application Server 系統(tǒng)消息)。
“運(yùn)行時”選項卡
文件名
指定此頁面中描述的某個日志文件的名稱。
第一個文件名字段指定 System.out 日志的名稱。第二個文件名字段指定 System.err 文件的名稱。
按下“運(yùn)行時”選項卡上的查看按鈕查看所選日志文件的內(nèi)容。
為 System.out 日志或 System.err 日志指定的文件名必須具有以下某個值:
文件名
文件系統(tǒng)中的文件的名稱。建議您使用標(biāo)準(zhǔn)文件名。如果該文件名不是標(biāo)準(zhǔn)文件名,則認(rèn)為它相對于服務(wù)器的當(dāng)前工作目錄。每個流必須配置一個專用文件。例如,您無法將 System.out 和 System.err 重定向到同一物理文件。
如果包含文件的目錄已經(jīng)存在,則正在運(yùn)行的服務(wù)器所使用的用戶標(biāo)識需要該目錄的讀/寫訪問權(quán)限。如果該目錄不存在,將會用適當(dāng)?shù)脑S可權(quán)創(chuàng)建它。正在運(yùn)行的服務(wù)器所使用的用戶標(biāo)識必須有創(chuàng)建該目錄的權(quán)限。
控制臺
這是用于將流重定向到關(guān)聯(lián)進(jìn)程流的特殊文件名。如果為 System.out 指定了此值,則文件重定向到 stdout。如果為 System.err 指定了此值,則文件重定向到 stderr。
無
廢棄寫入流的所有數(shù)據(jù)。指定無等于將流重定向到 UNIX 系統(tǒng)上的 dev/null。
filename 的缺省路徑是變量 SERVER_LOG_ROOT 的值。要查看 SERVER_LOG_ROOT 變量的值:
1.在管理控制臺上,選擇環(huán)境 > WebSphere 變量
2.單擊服務(wù)器單選按鈕,然后單擊應(yīng)用。在顯示的列表中出現(xiàn) SERVER_LOG_ROOT 變量的值。
要更改 SERVER_LOG_ROOT 的值:
1.選擇 SERVER_LOG_ROOT
2.在值字段中輸入新的路徑
3.單擊“應(yīng)用”
保存此配置。您必須重新啟動服務(wù)器以使更改生效。當(dāng)然我們還可以以將${SERVER_LOG_ROOT}/SystemOut.log 和 ${SERVER_LOG_ROOT}/SystemErr.log 文件的位置和名稱更改為任何其他絕對路徑和文件名(例如,/tmp/myLogfile.log)。
JVM 日志對我們對問題的的分析和跟蹤是非常重要的。WebSphere Application Server 強(qiáng)大的日志自管理功能,使我們的日常工作更方便更簡單,學(xué)習(xí)和掌握這些功能對我們管理人員來說受益非淺。