開始之前
關於本教程
在本教程中,您將學習如何結合幾個 IBM 產品創建應用程序日志的基礎設施。使用 IBM solidDB(一個快速的內存數據庫)作為應用程序端的緩存,以分離日志基礎設施的應用程序。使用 WebSphere Message Queue 永久將消息存儲並轉移到 WebSphere Message Broker 中,在其中可以分析消息並將其轉換成不同的 XML 輸出格式。最後,在 DB2 for Linux®、UNIX® 和 Windows® 中存儲消息。pureXML 功能使它能夠使用本機 XML 格式存儲日志文件,稍後查詢和分析日志。
目標
本教程介紹應用程序日志的挑戰,介紹如何在此上下文中使用 XML,如何設置能將應用程序日志帶入到業務中的基礎設施。
在本教程中,學習如何使用各種 IBM 工具,包括 IBM solidDB、WebSphere Message Broker 和 DB2 for Linux, UNIX, and Windows。
先決條件
本文專門針對技術和經驗水平為初中級的用戶。您應該對安裝和使用軟件有個大概了解,尤其是 DB2、WebSphere 和 solidDB。
系統需求
要設置本教程中介紹的基礎設施,您需要 Windows box(Server 2003、Vista 或 Server 2008),至少 2GB 的磁盤空間,完全的管理員權限,一天中能夠多次重啟系統。您最好不要使用生產服務器,而是一個可以安全操作的目標系統。
應用程序日志
隨著法律的不斷變化(比如 Sarbanes-Oxley-Act 的出台),公司需要詳細記錄活動以及最新的經濟變動,比如面向服務和隨需應變業務,跟蹤誰在企業內做了什麼,因此應用程序日志正變得日益重要。
日志不再是一個在應用程序內部出現問題時進行調試的功能,而是一個讓所有事務都能被跟蹤和審計的永久流程。在業務關鍵應用程序中(比如客戶數據庫或 ATM 終端),日志是跟蹤所有事件的關鍵所在。因此,必須要可靠地存儲日志並能對其進行搜索。
XML 是 SOA 和 Web 服務的核心。此外,它很靈活,對於隨時要增加信息、新日志類型和應用程序的日志消息,它是理想的選擇。
客戶通常要區分至少兩種日志類型:捕獲環境消息(機器類型,操作系統類型等)的技術日志和捕獲所做操作的功能日志。這兩種日志類型都可以混合為一個結構。
這兩種類型的日志都包含了許多信息;有些部分是業務關鍵的,另一些只提供信息。通常,會生成大量日志文件 —— 應用程序執行的每個操作和步驟都會生成一個。因此,一個企業每月會積累成千上萬個日志文件。除了量的問題之外,所有的文件都需要有效、准確地處理,不能丟失。此外,日志文件處理不能影響到客戶端應用程序。
假設一個日志文件的大小在 1KB 到 20KB 之間,而每天必須處理最多 1000 萬日志文件,那麼每天將需要 35GB 的存儲空間存儲未壓縮的數據,一個月將需要約 3TB 的存儲空間存儲未壓縮數據。由於生成日志文件的客戶端都在輕量級的專用硬件上運行,他們無法提供存儲空間加載它們生成的日志文件。
因此,您需要使用大容量的集中存儲,以便存儲和分析日志文件。數據庫被證明是可用於此類任務的最佳存儲系統。數據庫管理系統能夠本機存儲和查詢 XML 文檔,這有利於應用程序日志。清單 1 展示了一個樣例 XML 文件:
清單 1. 樣例 XML 文件
<?XML version="1.0" encoding="US-ASCII"?>
<File>
<Record>
<Header version="1">
<Time>2002-11-15 18:19:17.6</Time>
<Type>INFORMATION</Type>
<Id>-471559096676384768</Id>
</Header>
<Application>
<Name>SecurityWebService</Name>
<Function>GetValue</Function>
<User>JDoe</User>
<Result>3171861797959368704</Result>
<Params>
<Param>
<Type>Object</Type>
<Value>Object</Value>
</Param>
<Param>
<Type>Object</Type>
<Value>security.ssl</Value>
</Param>
<Param>
<Type>Object</Type>
<Value>0</Value>
</Param>
</Params>
<CallTime>2004-11-15 16:19:17.7</CallTime>
<StartTime>2006-10-18 12:18:14.7</StartTime>
<EndTime>2000-11-16 18:14:16.4</EndTime>
<ReturnTime>2004-11-12 10:10:12.7</ReturnTime>
</Application>
<System>
<Name>INTRANET01</Name>
<State>498308015556919296</State>
</System>
[..]
</Record>
</File>
日志發布
中央日志存儲庫(例如,數據庫系統)可用於整合各種應用程序的活動。可以分析這些數據,形成所有應用程序的 “完整畫面”。
讓應用程序將其日志直接插入中央存儲庫是不可行的,原因有很多。要可靠地將日志信息從應用程序移動到數據庫,要使用消息隊列。要進一步將應用程序從消息隊列中分離出來,可以使用一個小型的內存數據庫系統。它還在峰值加載期間支持緩沖消息。
由於絕對不能丟失失敗情況下的日志文件,日志發布中涉及的所有系統都必須是事務型的。
場景
圖 1 展示您在本教程中設置的樣例場景架構:
圖 1. 本教程的架構
假設有多個客戶端應用程序生成日志文件並存儲在 solidDB 緩沖數據庫。IBM solidDB 是一個快速內存緩存數據庫,它的性能得到了優化。由於它在內存中保存所有數據,除了持久性事務日志之外不會向磁盤寫入任何數據,因此它既快又可靠。
然後,將使用一個 Java 工具提取日志文件並將其傳輸到 WebSphere Message Queue。WebSphere Message Queue 將分析文件並將其傳輸到 DB2 支持的數據庫。
為了模擬應用程序日志客戶端,該教程使用 Java 工具生成 XML 文件並將其加載到緩沖數據庫。可在本文中下載工具 —— Java Load Generator Tool(見 下載)。通過運行無需命令行選項的工具,它可以打印使用信息。本教程使用該工具將消息加載到 solidDB 中。
為了將日志文件發布到後端數據庫,本教程使用 IBM WebSphere Message Queue。它提供事務、持久消息隊列以及路由機制,以將消息從一個位置轉移到另一個位置。此外,您可以使用 WebSphere Message Broker 分析和轉換消息。圖 2 展示了本教程中介紹的消息流:
圖 2. WebSphere 消息流
從兩個隊列讀取消息,保留不同的消息格式。Queue 1 (Q1) 保留的消息由一個名為 Record 的元素組成。每個消息將路由到另一個隊列 Queue (Q3) 或後端數據庫。
Queue 2 (Q2) 保存由一個或多個 Record 元素組成的 File 消息。每個 File 消息能夠分為一個 Record 消息及其對應的摘要消息。然後 Record 消息可以路由到後端數據庫,而將在另一個隊列 (Q4) 中存儲 Summary 消息。
WebSphere 可以與 IBM DB2 交互,以存儲消息事務。這樣一來,沒有消息會由於(網絡)失敗而丟失。IBM DB2 for Linux、UNIX 和 Windows 最終可以存儲所有消息。它使用 pureXML 在專用數據結構中存儲 XML 文件。這樣一來,可以有效地執行查詢,同時保留原來的結構。DB2 還支持壓縮的 XML 文件,這將節省許多存儲空間。
准備
首先,您需要下載和安裝以下軟件包:
WebSphere Message Queue 7.0
WebSphere Message Broker 6.1
WebSphere Message Broker Toolkit V6.1
solidDB 6.3
DB2 9.5 Express-C
每個軟件包都應該使用默認選項安裝。本教程以下幾節將描述如何設置和配置這些軟件。
數據庫配置
為了存儲日志文件,本教程使用簡單的單表格方法,使用以下用於 solidDB 和 DB2 的 DDL 語句(對於生產系統,物理設計可以應用增強的特性):
表 1. 數據庫定義
solidDB DB2
清單 2. solidDB 的 DDL 語句
CREATE TABLE LOGS (
LOGTIME TIMESTAMP,
DOC CLOB
)
清單 3. DB2 的 DDL 語句
CREATE TABLE LOGAPP.LOGS (
LOGTIME TIMESTAMP,
DOC XML
)
前端的 solidDB 不需要架構名稱。對於後端 DB2,使用 LOGAPP 作為架構名稱。
添加新的消息隊列
從 solidDB 讀取的所有消息都將存儲到 WebSphere Message Queue。因此,需要使用專門的隊列保存消息。
如表 2 所示,您需要 5 個新的隊列(注意用於 “Application Logging” 的前綴 AL_):
表 2. 消息隊列
Q1: AL_INQUEUE1
Q2: AL_INQUEUE2
可以使用兩個隊列保存 solidDB 的輸入消息。兩者之間的不同之處在於保存日志文件的格式:AL_INQUEUE1 保存類型為 Record 的消息。
AL_INQUEUE2 保存類型為 File 的消息。
Q3: AL_OUTQUEUE 該隊列只是一個消息池。 Q4: AL_SUMMARYQUEUE 該隊列獲取所有日志摘要消息以供最終存儲。 Q5: AL_XMLFILES 輸入該隊列的消息將插入 DB2。圖 3. 深入查看 WebSphere Message Queue Explorer
現在您已經設置了工作環境並開始應用程序日志設置。
開始使用 Message Broker Toolkit
本教程使用 WebSphere Message Broker Toolkit,這是一個基於 Eclipse 的工具,用於開發消息流應用程序。當您第一次啟動應用程序時,需要設置工作區文件夾用於存放所有項目文件。
圖 4. 選擇工作區
現在需要創建一個新的消息流項目,以保存之後開發的所有消息流項目。右鍵單擊空的項目列表,然後選擇 New > Message Flow Project:
圖 5. 新建消息流項目
彈出一個窗口,詢問新的項目名稱。輸入 logApp 作為新項目的名稱:
圖 6. 新建消息流項目
Message Broker 連接
接下來,建立一個到之前創建的 Message Broker 域實例的連接。使用該連接,您稍後可以與 Message Broker 進行交互。要做到這一點,右鍵單擊新建的項目,然後選擇 New > Other:
圖 7. 新的域連接
在打開的窗口中,查找並選擇項 Domain Connection:
圖 8. 新的域連接
現在您需要輸入您的 Queue Manager 名稱。因為我們使用的是默認配置,它的名稱為 WBRK61_DEFAULT_QUEUE_MANAGER,使用端口 2414:
圖 9. 新的域連接
輸入 logAppConnection 作為連接名稱。單擊 Finish 之後,確認您希望在打開的消息框中創建一個新的服務器項目:
圖 10. 新的域連接
現在連接到了 Message Broker。這對於部署和運行項目來說是必需的。
導入消息定義
接下來,我們導入將在 Message Broker Toolkit 中使用的的 XML 模式定義。這樣一來,WebSphere 將能夠識別並解析來自 solidDB 的消息。
讓我們將這兩個文件導入 WebSphere Message Broker Toolkit。首先,需要將 Message Set 添加到您的項目。該集合將保存所有消息定義。
右鍵單擊消息流項目,然後選擇 New > Message Set:
圖 11. 新的消息集
接下來,為新消息集指定一個名稱。因為工作區沒有包含消息集項目,您還需要為新項目輸入名稱。這個包含新消息集的新項目將添加到您的工作集中。
將消息集命名為 logAppMessages,將項目命名為 logAppMessageSet:
圖 12. 新消息集
您需要指定新消息集保存的數據類型。因為您需要處理 XML 數據,請選擇 XML 文檔:
圖 13. 新消息集
現在已經輸入了所有所需的信息,已經可以創建消息集了。
圖 14. 新消息集
該消息集將是本教程使用的所有自定義消息格式的容器。
您可以開始將 XML 模式文件導入消息集。右鍵單擊消息集項目,然後選擇 New > Message Definition File From > XML Schema File:
圖 15. 導入消息定義
接下來,輸入日志文件架構文檔的路徑:
圖 16. 導入消息定義
最後,選擇希望導入的數據類型和消息。在本例中,單擊 Select All 按鈕選擇所有對話框:
圖 17. 導入消息定義
您已經成功地將第一個 XML 模式定義導入 WebSphere。要將架構 LogSummary.xsd 導入工作區,請重復上述步驟。
您需要修改消息集以支持消息中的單個 Record 元素。雙擊工作區的 LogFile 消息定義,在右邊的面板中打開定義。
圖 18. 修改消息定義
您需要將 RecordType 重命名為 Record,否則包含 Record 的所有根元素消息都將命名為 RecordType 而不是 Record。重命名在圖 19 中完成:
圖 19. 修改消息定義
現在可以使用定義創建不同格式之間的映射。
使用 Java 從 solidDB 中讀取消息
首先,您需要將日志消息從 solidDB 緩沖中傳輸到 WebSphere Message Queue。通常,有幾種方法可以與 WebSphere 中的數據庫交互。但不幸的是,solidDB 的 ODBC 驅動程序不提供對 WebSphere 的支持,而 solidDB 的 JDBC 驅動程序也不支持分散的事務。這些限制使我們只能選擇使用自定義 Java 程序從 solidDB 中讀取消息。
您還要確保 Java 程序或者類路徑中包含 solidDB 的 jar 文件 (SolidDriver2.0.jar)。否則,您將無法連接 solidDB。
下面的清單 4 提供了連接 solidDB 的代碼片段,但是在連接之前,您必須直接填寫參數(host、port、user 和 pass):
清單 4. 連接到 solidDB
String connString;
connString = "jdbc:solid://" + host + ":" + port + "/" + user + "/" + pass;
Class.forName("solid.jdbc.SolidDriver").newInstance();
Connection connection = DriverManager.getConnection(connString);
Statement statement;
statement = connection.createStatement();
ResultSet resultSet;
resultSet = statement.executeQuery("SELECT doc FROM LOGS");
清單 5 提供了另一個連接消息隊列的代碼清單:
清單 5. 連接 WebSphere Message Queue
String queueManagerName = "WBRK61_DEFAULT_QUEUE_MANAGER";
String queueName = "AL_INQUEUE1"; // or AL_INQUEUE2
MQQueueManager queueManager;
queueManager = new MQQueueManager(queueManagerName);
MQQueue queue;
queue = queueManager.AccessQueue(
queueName, CMQC.MQOO_OUTPUT, null, null, null);
在建立了對日志消息源和日志消息池的連接之後,您需要循環輸入消息並將他們都插入隊列:
清單 6. 將 solidDB 中的消息傳輸到 WebSphere Message Queue
while (resultSet.next()) {
byte[] message;
message = resultSet.getBytes(1);
MQMessage queueMessage;
queueMessage = new MQMessage();
queueMessage.correlationId = CMQC.MQCI_NONE;
queueMessage.messageId = CMQC.MQMI_NONE;
queueMessage.write(message);
queue.put(queueMessage, queueMessageOptions);
}
完整的 Java 代碼片段見 下載 一節。
隊列中有了消息之後,可能需要執行一些操作才能將其直接保存到後端數據庫。因此讓我們開始學習一些如何使用 WebSphere Message Broker 修改 XML 消息的示例。
使用 WebSphere 分析和轉換消息
為了使用之前創建的代理連接和導入的消息類型,您需要將引用添加到消息流項目。要選擇引用的項目,請打開消息流項目 logApp 的屬性頁面,右鍵單擊並選擇 PropertIEs。
在打開的窗口中,選擇 Project References。單擊右邊的選項框 —— logAppMessageSet 和 Servers。
圖 20. 消息流項目屬性
現在可以在 WebSphere Message Broker Toolkit 中創建消息流了。單擊消息流項目,然後選擇 New > Message Flow:
圖 21. 新的消息流
輸入 logFlow1 作為消息流名稱,然後單擊 Finish:
圖 22. 新的消息流
新的消息流將在右上方的窗口中打開,因此您可以在其中添加和配置節點。您可以定義源、池、轉換以及其他要對消息執行的操作。
根據內容路由消息
我們首先了解如何在流中分析消息並根據內容路由。路由可以用來分離消息類型。例如,您可以將開發人員機器和業務關鍵型消息調試消息(比如訂單或賬單信息)轉發到持久存儲器。
圖 23 展示了將在本節中設置的消息流。MQINput 節點將從隊列中讀取消息。然後路由節點根據內容將消息重定向到不同的池。有些消息將使用映射節點映射到不同的格式。
圖 23. 樣本消息流
首先,插入可從消息隊列讀取消息的 MQInput 節點,然後將它們插入消息流。在窗口左邊的菜單中,選擇 WebSphere Message Broker,然後將 MQInput 節點拖放到右邊的空窗口。
從隊列中提取的消息是源單詞。您需要指定要從中讀取消息的隊列的名稱。單擊新插入的節點,然後在左上方的窗口中查看屬性。在字段 Queue name 中,輸入 AL_INQUEUE1。正如我們提到的,AL_INQUEUE1 將保存類型為 Record 的消息。
下一個節點是 ResetContentDescriptor 節點(見 圖 23)。該節點對於告訴 WebSphere 消息內容是 XML 而不僅僅是 BLOB 是必要的。使用以下首選項插入節點並進行配置(如圖 24 所示):
選擇所有復選框重置消息域、重置消息集、重置消息類並充值消息格式。
指定 XMLNSC 作為消息域。
指定 logAppMessages 作為消息集。
圖 24. ResetContentDescriptor 節點
要查看圖 24 的大圖,請單擊 此處。
現在使用路由節點檢查消息的內容並根據內容進行路由。假設該隊列保存類型為 Record 的消息,您需要根據標題元素 ID 值的奇偶將它們路由到不同的輸出終端。
將路由節點插入流之後,右鍵單擊並使用上下文菜單將輸入終端重命名為 Odd 和 Even。
圖 25. 路由節點上下文菜單
接下來,向節點添加兩個模式,告訴它如何路由消息。在上方的面板中選擇路由節點,了解它的屬性頁面:
圖 26. 路由節點屬性頁面
要讓路由節點的屬性頁面如圖 26 所示,必須向篩選器表格添加兩個篩選器模式。單擊 Add… 打開新的對話框,可以在其中輸入第一個表達式:$Body/Record/Header/Id mod 2 = 0。該模式應用於所有消息,在標題中還包含了消息 ID。在添加了第一個模式之後,重復這些步驟添加第二個模式,應用於所有偶數 ID。第二個篩選器模式:$Body/Record/Header/Id mod 2 = 1。使用該配置,到達該節點的消息將根據內容路由到一個輸出終端。您現在可以將兩個輸出終端連接到不同的繼承者。
將消息轉換為不同的格式
接下來,您將使用映射節點將消息轉換為另一種格式。您需要將映射節點插入到流並將其連接到一個路由節點的輸出終端。連接到奇輸出終端還是偶輸出終端沒有關系。雙擊新插入的節點。將出現一個新窗口,可以用來指定輸入和輸出消息類型:
圖 27. 新消息映射
因為我們希望從該流中得到 Record 消息,選擇 Record 作為輸入類型。LogSummary 將成為輸出類型,如 圖 27 所示。在下一個窗口中,您可以定義映射 —— 將元素從左(輸入)邊拖放到右(輸出)邊,或者為每個元素輸入映射表達式。您還可以使用圖 28 下方的面板中顯示的集成函數(比如 fn:concat):
圖 28. 新消息映射
要查看圖 28 的大圖,請單擊 此處。
最後,您需要插入兩個 MQOutput 節點以將消息寫回隊列。將剩下的路由節點終端連接到一個輸出隊列,並將映射節點的輸出終端連接到第二個輸出接點。您的流現在應該類似於 圖 23 中的樣例。最後,需要配置 MQOutput 節點並指定消息的目標隊列。使用 AL_OUTQUEUE 作為連接到路由節點的 MQOutput 節點的目標,使用 AL_SUMMARYQUEUE 作為連接到映射節點的節點目標。
使用映射節點分離消息
在本節中,使用 WebSphere 將輸入消息分離為幾個輸出消息,並根據格式將輸出消息分離為不同的輸出終端。假設您希望將大文件分離為更小的部分並為每個部分創建一個摘要,則如圖 29 所示:
圖 29. 分離和總結消息
圖 30 展示了要設置的流:
圖 30. 分離和總結消息
將使用已經介紹過的 ResetContentDescriptor 節點連接 MQInput 節點,後跟映射節點(名為 Split)。這是對之前創建流的擴展。來自第一個流的輸入連接在頂部可見,附加到名為 SUMMARY 的 MQOutput 節點。您可以根據第一個圖插入所有節點。MQInput 節點將從 AL_INQUEUE2 讀取消息,因此您必須確保該節點的配置與 ResetContentDescriptor 節點一樣。後一個節點使用的配置與 ResetContentDescriptor 相同,因此可以輕松復制。
右鍵單擊節點打開窗口,其中您可以輸入源和目標消息格式,如 圖 31 所示。選擇 File 作為輸入類型,假設隊列保存該類型的消息。此時,選擇兩個消息作為映射/輸出目標:LogSummary 和 Record。這樣一來,您可以將輸入消息分離為多個輸出消息。
圖 31. 定義映射的消息類型
現在,對於到達該節點的每個消息,您應該將每個內部 Record 元素映射到自己的消息,並為每個 Record 生成一個摘要消息 (LogSummary)。圖 32 和 圖 33 展示映射。下面屏幕截屏中的 for 表達式在輸入中迭代 Record 元素並為每個元素生成一個單獨的輸出消息。
圖 32. 映射節點視圖
要查看圖 32 的大圖,請單擊 此處。
圖 33. 映射節點詳細信息
要查看圖 33 的大圖,請單擊 此處。
在映射和分離之後,您需要處理一個問題:Record 和 LogSummary 這兩個消息類型都將輸出到相同的輸出終端。您需要將這兩個消息分離為不同的流。使用 JavaCompute 節點處理這個問題。將節點插入到流之後,雙擊打開幫助新建 Java 項目的助手。將自動生成的代碼替換為清單 7 中的樣例代碼。(該代碼包含在 下載 一節)。
清單 7. 使用 JavaCompute 路由消息
public class JavaRouteNode extends MbJavaComputeNode {
public void evaluate(MbMessageAssembly assembly) throws MbException {
MbOutputTerminal out = getOutputTerminal("out");
MbOutputTerminal alt = getOutputTerminal("alternate");
MbMessage message = assembly.getMessage();
MbElement logMessage = message.getRootElement().getLastChild();
if (logMessage.getFirstElementByPath("./Record") != null) {
// Message is a complete log record
out.propagate(assembly);
} else if (logMessage.getFirstElementByPath("./LogSummary") != null) {
// Message is a summary
alt.propagate(assembly);
}else{
throw new IllegalArgumentException();
}
}
}
每個消息都調用該節點,它執行兩個 XQuerIEs 確定消息是 Record 還是 LogSummary。根據 XQuery 的結果,消息將發送輸出終端或可替換終端(另一個輸出終端)。
現在介紹如何使用 WebSphere 以幾種方式路由、轉換和分析消息。接下來,了解如何存儲隊列中等待進入後端數據庫的某些消息。
將消息保存到 DB2
連接 DB2
要將消息直接從 WebSphere Message Queue 寫入 DB2,您需要首先設置連接到目標數據庫的 ODBC 連接。
要添加新的 ODBC 連接,必須在 Windows 控制面板中打開 ODBC 數據源配置。
單擊 Add… 新建一個到數據庫的 ODBC 連接:
圖 34. ODBC 數據源管理器
因為您需要連接到默認的 DB2 實例,請選擇 IBM DB2 ODBC DRIVER – DB2COPY1:
圖 35. 新建 ODBC 數據源
在下一個窗口中,輸入 LOGAPPDB 作為數據源名稱,然後單擊 Add 按鈕:
圖 36. 新建 ODBC 數據源
現在需要輸入 WebSphere 將用來連接數據庫的用戶名和密碼。確保您勾選了 Save passWord 復選框。
圖 37. 新建 ODBC 數據源
在下一個面板中,輸入數據庫名稱、它的主機名和端口。
由於 WebSphere Message Broker 和 DB2 駐留在同一台機器上,您可以輸入 localhost 作為主機名。單擊 OK 之後,可以關閉所有打開的 ODBC 窗口然後返回 WebSphere Message Broker Toolkit。
圖 38. 新建 ODBC 數據源
導入數據庫布局
配置數據庫連接之後,需要通知 WebSphere 數據庫表格布局。要做到這一點,可以直接從 DB2 導入數據庫布局 —— 添加到 Message Broker Toolkit 的連接。在 Broker 應用程序開發視圖中,切換到 Database Explorer 選項卡並新建數據庫連接。將彈出一個窗口,其中可以指定連接參數。
使用我們的參數填寫表單後,可以單擊 Finish。
圖 39. 在 WebSphere Message Broker Toolkit 中創建數據庫連接
現在連接到了數據庫。接下來,必須將數據庫定義導入 WebSphere 以支持到數據庫表格的消息映射。右鍵單擊項目列表,然後選擇 New > Database Definition:
圖 40. 新數據庫定義
打開新窗口。項目列表為空,因為項目列表不包含任何數據設計項目。單擊 New 添加數據設計項目,用於保存數據庫定義。
命名新項目 databaseDefinitions 然後單擊 Next:
圖 41. 新數據設計項目
您不需要選擇任何對其他項目的引用,因此直接單擊 Finish:
圖 42. 新數據設計項目
創建數據設計項目之後,需要回到數據定義窗口。已經選好了新創建的項目名稱。確保選擇正確的 DB2 版本:
圖 43. 新數據庫定義
在下一個窗口中,選擇之前創建的數據庫連接:
圖 44. 在 WebSphere Message Broker Toolkit 中創建數據庫連接
現在,輸入用戶 ID 和密碼連接到數據庫:
圖 45. 新數據庫連接
WebSphere 連接到數據庫並檢索所有架構列表。選擇 LOGAPP 架構:
圖 46. 新數據庫定義
在下一個窗口中,至少選擇表格定義:
圖 47. 新數據庫定義
導入表格定義之後,可以使用表格處理消息流了。
創建流
現在,您可以創建一個從消息隊列 (AL_XMLQUEUE) 中讀取消息並將其存儲到 DB2 的新流。
流的名稱為 storageFlow。它由三個節點組成:MQInput 節點用於從 AL_XMLQUEUE 中讀取消息;之後是 ResetContentDescriptor 節點和 DatabaseInsert 節點。圖 48 展示了流布局:
圖 48. 將消息存儲到 DB2 的消息流
單擊 DatabaseInsert 節點(圖 48 中名為 Backend),並切換到基本屬性。輸入之前創建的 ODBC 數據源 (LOGAPPDB) 的名稱。郵件單擊新的 DatabaseInsert 節點。將出現一個新窗口,詢問輸入和輸出消息格式。選擇 Record 作為輸入消息類型,選擇數據庫表格 LOGS 作為輸出目標:
圖 49. 存儲流的新消息映射
在映射窗口中,可以將元素從表格列的左邊拖放到右邊。因為 WebSphere 不知道 DB2 的新 pureXML 特性以及存儲 XML 的功能,您不能將復雜的類型拖動到列中。通過該操作,WebSphere 可以創建一個子映射(假設您需要將復雜類型的特定部分映射到一個列中)。WebSphere 期望您連接或匯總子元素以適應單個數據庫列。
要將整個元素及其子元素映射到數據庫列,需要使用能序列化整個文檔的功能。這可以使用 esql:asbitstream($source/Record) 完成,如圖 50 所示:
圖 50. 消息映射視圖
您已經開發了所有必要的消息流節點,該項目應該能夠運行在 Message Broker 上。
注意:將項目部署到 Message Broker 不在本文討論之列。要獲取如何創建 Broker Archive (BAR) 和在 Message Broker 中部署的信息,請參考 WebSphere Message Broker Information Center。
結束語
本教程展示了如何使用幾個 IBM 產品設置應用程序日志的基礎設施。將 IBM solidDB 作為內存緩存以分離應用程序和日志基礎設施。WebSphere Message Queue 和 WebSphere Message Broker 用於發布、分析和轉換 XML 消息。最後,DB2 for Linux、UNIX 和 Windows 及其 pureXML 特性用於有效存儲和管理 XML 數據。沒有單個產品能夠提供完整的日志基礎設施,但是,正如本教程所述,快速地構建這樣一種應用程序日志基礎設施是可能的。XML 是核心部分,因為它能夠靈活地更改和添加消息格式,而不會影響基礎設施本身。使用 DB2 及其 SQL/XML 和 XQuery 支持,可以查詢 XML 數據進行失敗分析和審計分析。
下載
描述 名字 大小 下載方法 XML 模式定義文件(文件) LogFile.xsd 4KB HTTP ToXgene 模板文件1 LogFile.tox 7KB HTTP XML 模式定義文件(摘要) LogSummary.xsd 2KB HTTP 代碼2 JavaRouteNode.Java 2KB HTTP solidDB 和 MQ 連接代碼3 solidDB2MQ.Java 2KB HTTP Java Load Generator Tool4 LoadGenerator.jar 5MB HTTP