2014年11月25日 星期二

處理Splunk 與 WebLogic Log 時間不一致問題

最近使用Splunk導入WebLogic時發現時間不夠一致,甚至假設我自己撰寫程式來印出Log時,在Log檔裡顯示的時間是正確的,但在Splunk中卻被視為同一時間,由於我的Splunk Search非常依賴時間來做查詢條件,因此為了解決這種問題,我決定為WLS Log的時間新增一個欄位(Field)叫作 log_time。
另外WLS Log在我的Log File中原本時間顯示為中文,但是進入Splunk時,卻變成了亂碼,這個問題我試過不少方法也暫時無法解決(我是透過Forwarder,Splunk & WLS不同台機器)。
於是我試圖先讓WLS Log時間變成單純的數字日期,而不在出現中文。




步驟依序如上面圖示,至WebLogic AdminConsole中點選 伺服器-->欲修改的Log伺服器所在位置-->點選日誌記錄-->進階,在「日期格式樣式」把原本有中文 時分秒的設定 改成
 yyyy/M/d HH'-'mm'-'ss'-' z
重新啟動 Server,再至Log檔觀察,就可以發現時間格式改變了。
實際至Splunk 觀察也是一樣,另外我已經定義好 log_time 欄位的 pattern了如圖
如上圖所示,藍色是Splunk定義的時間,而紅色部分是Log的真實時間,以及我定義log_time欄位的時間,而為了使用我定義的時間來做查詢,在程式呼叫curl指令時需要將時間作轉換,注意"2014-11/26" 與 "10-37-33"之間是有空白的。
程式如下

Calendar calendar1 = Calendar.getInstance();
System.out.println("calendar1 : " + calendar1.getTime());
calendar1.add(Calendar.MINUTE, -5);
System.out.println("calendar2 : " + calendar1.getTime());
Date date = calendar1.getTime();
SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy/MM/dd HH-mm-ss");
String date1 = DATE_FORMAT.format(date);
System.out.println("Date1 : " + date1);
String[] tokens = date1.split(" ");
    for (String token:tokens) {
  System.out.println(token);
}
String finalDate = tokens[0]+"\\%20"+tokens[1];
System.out.println("finalDate: " + finalDate);
String log_time = "2014/11/25\\%2014-21-02";

注意我在程式碼第三行,已將實際時間減5分鐘,因為我的目的是查詢現在時間與前5分鐘之間的Log(假設Splunk時間若正確等同於Splunk執行earliest="-5m"),而最後得到的樣式就會像程式最後一行一樣  "2014/11/25\\%2014-21-02";
細心的你會發現我們中間的空白是使用\\%20取代,這是在Windows執行Java的作法

之後就是Splunk厲害的地方,他可以使用String表示時間後,依然可以比較時間,如下圖

因此我們可以放心的使用log_time當作時間基準查詢了,另外介紹Windows2003時間同步
我將Splunk Server與 WLS Server同步至我的DC Server
w32tm /config /manualpeerlist:dc.test.com.tw /syncfromflags:MANUAL
w32tm /config /update
w32tm /resync

讓時間更一致,WLS Log實在不夠精準,看來目前使用自定義的欄位查詢最精準。

**********************更好的方式  最新更新*******************************
修改WLS Date Format Pattern,修改成  yy/M/d HH':'mm':'ss  like as  14/12/12 16:52:09
重新啟動 WLS Server,則Splunk就可以認出正確的時間格式,並將其傳入 _time default index中,已 _time 的時間正確的話 ,就可以 如常的 使用 Splunk Time Modifier 
ex: earliest="-5m" or latest








沒有留言:

張貼留言