iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0
IT 管理

Troubleshooting - 隔空抓藥的日常與實務技巧系列 第 9

Day - 9 如何利用notepad++將不同格式的log進行基於相同時間的比對

  • 分享至 

  • xImage
  •  

Troubleshooting時,常常會遇到一種情況,問題的發生點一開始就已經確立了,但是光從單一log中無法看出明確的root cause,需要把OS或是與其他的應用程式的log來做時序上的對比。

例如以下的HW log:

https://ithelp.ithome.com.tw/upload/images/20240916/201692039vkC86HJe1.png

log的順序是由新到舊,這裡我們想了解當按下Power button後到HW watchdog timeout發生之間,

system firmware有什麼異常log,但是打開system firmware log後,log的順序上卻是由舊到新。

而且timestamp的格式也不太相同。

https://ithelp.ithome.com.tw/upload/images/20240916/20169203SQUxKWMt6o.png

這裡善用notepad++內建的功能可以幫我們優化很多觀看與比對log的體驗。

  • log reverse

    log的記錄通常都是以時間順序來排序,但是不同的工具或是軟體紀錄的順序卻時常會不同。

    有些偏好最新的log在上方,有些則偏好最舊的log在上方。

    這裡我們讓原來的HW log變成跟system firmware log一致,方便比對。

    在notepad++的"Edit"選單中,點入"Line Operations"可以看到"Reverse Line Order"。

    https://ithelp.ithome.com.tw/upload/images/20240916/20169203yE2ePD5mMn.png

    點選之後便會將整份文件的上下順序顛倒

    https://ithelp.ithome.com.tw/upload/images/20240916/20169203op33haIJNG.png

  • timestamp一致化

    不同的log之間,timestamp的記錄方式也會大有不同,從影響最小的月份用Mar代表3月,年/月/日順序不同開始,甚至是像linux中使用1970年起算的總秒數表示法,或是不同系統間因為UTC設定不同而需要加減時數的情況都有。

    這裡只使用notepadd++ 進行相對單純的文字置換與格式順序對調,表示法不同或是需要加減時數的情況我還是建議先將log以linux中的date指令做格式轉換後再觀看,比較直覺。

    我們的目標是將Mar/31/2019這樣的格式,透過notepad++改為和system firmware log一樣的2019-03-31

    首先按下"CTRL+H",叫出搜尋與取代的選單
    https://ithelp.ithome.com.tw/upload/images/20240916/201692032gpumnB7Ry.png

    這裡由於使用的是條件式的搜尋與取代的功能,需要從一般的搜尋模式切換成下方"Search Mode"中的,"Regular expression"模式

    https://ithelp.ithome.com.tw/upload/images/20240916/20169203K0yvAE5aCh.png

    Regular expression又叫做正規表示式是一個很多語言或是工具中都有支援的表示方式,其語法通常也是共用的。這裡只簡單提一下我們會使用到的表示方法,相關的網路資源很多,就不在這裡佔篇幅了。

    我們搜尋的對象(Mar/31/2019)以正規表示法來表示的話就是(\w\w\w)/(\d\d)/(\d\d\d\d)

    \w: matches any word character (equivalent to [a-zA-Z0-9_])
    \d: matches a digit (equivalent to [0-9])
    /:  matches a / (屬於特殊符號,因此使用時需要在前方加上跳脫字元以識別)
    (): Capturing Group (對於match的對象做grouping,可使用多個grouping時,依使用先後從1開始編號)
    

    不確定的人可以到以下的網站測試你的正規表示式:
    https://regex101.com/

    先在下方輸入你要match的字串
    https://ithelp.ithome.com.tw/upload/images/20240916/20169203q8W7P3tojA.png

    接著在上頭打上剛剛的正規表示法
    https://ithelp.ithome.com.tw/upload/images/20240916/20169203BM0XjzREcs.png

    如果語法的使用上有不了解的地方,網頁的右方還有語法詳細的解說。
    也提供了搜尋的功能,讓你根據語法的說明來挑選使用對象。
    https://ithelp.ithome.com.tw/upload/images/20240916/20169203wlLi1xTqnx.png

    在網頁上確認語法正確後,將它填入notepad++的"find what",
    replace的地方則需要填入grouping的變數名稱。

    以日期Mar/31/2019為例,月的部分就是第1個變數
                         日的部分就是第2個變數
                         年的部分就是第3個變數
    

    填入時只要記得變數的表示方式為${},再來依想要的順序以及分隔符號做結合就可以了。

    因此,replace with的部分寫成${3}-${1}-${2},就會成為我們想要的(年-月-日)的格式。
    https://ithelp.ithome.com.tw/upload/images/20240916/20169203fxTwl9Y68K.png

    最後按下右方的"Replace All"
    https://ithelp.ithome.com.tw/upload/images/20240916/20169203btRP8tHc84.png

    可以看到下方提示,一共有392個內容已經變更。

  • 文件並列比對

    再來只剩下版面的調整,首先在兩個log同時已經在notepad++中開啟的情況下,針對其中一個檔案的分頁標籤按滑鼠右鍵,在"Move document"的選單下,點選"Move to other view"

    https://ithelp.ithome.com.tw/upload/images/20240916/20169203aqQsxDEoLT.png

    可以看到notepad++的視窗多出了一個中央分隔線,如果要將被分隔出去的文件再結合回去的話,只要再操作一次"Move to other view"就可以恢復了。

    https://ithelp.ithome.com.tw/upload/images/20240916/20169203zXLpPGSjEb.png

    再來便是將左右兩份log,依據timestamp將想比對的第一筆log在自己的視窗置頂,這裡以HW log的2019-03-31的3點17分為例:

    左方的HW log便要將第307筆log置頂,而右方的system firmware log因為在同一時間沒有對應的記錄,因此我選擇對應的行號為8314,是最接近這個時間的log

    https://ithelp.ithome.com.tw/upload/images/20240916/20169203DeBqf6Wn5R.png

    再來從notepad++選單,打開"View"裡頭有一個"Synchronize Vertical Scrolling"的功能

    https://ithelp.ithome.com.tw/upload/images/20240916/20169203xjUp4YFyfO.png

    兩邊的視窗便會一起捲動,如此一來就能在log時間順序與格式都一致的情況下觀看兩者的關連性了。


上一篇
Day 8 - 大海撈針,當log裡的非關資訊比關鍵資訊還要多時。 (notepad++ bookmark)
下一篇
Day 10 - 化被動為主動,讓你的客人為你做點什麼。(以系統或是制式表格來收集log)
系列文
Troubleshooting - 隔空抓藥的日常與實務技巧30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言