日積月累,各式各樣的記錄必定數量驚人,在查找時將會非常花時間而且也會出現一些難題。在資料源頭無法配合修改的情況下,利用Splunk Lookup靜態參照與動態參照功能將可以找出有效的解決方案。本文將分些這兩種功能的不同,並實作動態參照的執行方式。
使用Splunk收入各種作業系統日誌、設備運作訊息、應用程式執行記錄或是用戶行為記錄等,已經是許多IT人員必備的工具與技能。但是往往在查找各種作業系統日誌、設備運作訊息、應用程式執行記錄或是用戶行為記錄等收入日誌時,會看到許多內容是以「代碼」方式呈現,讓觀看的人無法立即了解代碼的意義,還要去其他系統或是手冊中查找,非常不方便。
由於實際運作過程中資料源頭不可能配合使用者修改,因此Splunk Static Lookup(靜態參照)的功能就顯得格外好用。
靜態參照v.s.動態參照
Splunk Static Lookup功能可以參照預先準備好的.csv檔案(例如錯誤代碼對照檔),經過幾個簡單的設定,Splunk會自動執行參照的動作,呈現出代碼&代碼說明。這樣的結果,就可以直接呈現給終端使用者(End User)觀看,不需要附上一本「代碼大全」之類的厚厚手冊,讓End User翻到天昏地暗。
|
▲在沒有使用Splunk Static Lookup功能之前,看到的都是代碼的資料,大部分的人都不知道404、400、406、503是什麼意思。 |
|
▲使用Splunk Static Lookup後,代碼都變成說明文字,不需要再查找手冊或是找人翻譯其意義。 |
Splunk Static Lookup功能已經推出很久,在Splunk User Manual中也有說明,本文就不再冷飯熱炒。這裡要介紹的是動態參照(Dynamic Lookup)功能,這是Splunk 4.2版本新增加的項目。
為何要動態參照?簡單的說,當參照檔的內容常常會變更時,如果仍使用原本的Static Lookup功能,系統維護人員就必須自動、主動地時時更新csv參照檔案,否則參照出來的結果就可能是過時的,報表呈現的結果將是不完整或是有錯誤的。以下舉幾個動態參照的例子做說明:
1. 根據用戶代碼參照出用戶基本資料如E-mail、地址、電話等,用戶基本資料經常在變動,如果要每天批次轉出用戶資料,倒進Splunk作為靜態參照來源,是比較曠日費時、不經濟的作法。
2. 根據商品代號參照出商品名稱、價格,商品隨時有增加或是更改價格的情形,因此也不適合每天批次轉出商品資料,放入Splunk作為靜態參照來源。
3. Geo Location,這種資料量非常龐大,當然不適合每天全部抓下來存成一個靜態檔案。
4. 資料來自外部網站,譬如各城市的天氣資訊、外幣匯率、運動比賽的比數等,這些資訊都是動態在改變的,必須使用動態參照來取得當時最新的資料。
開始說明動態參照的作法之前,再來比較一下靜態參照(Static Lookup)與動態參照(Dynamic Lookup)的主要差異:
|
▲動態參照的流程。 |
接著,用一個實例說明動態參照的作法。此範例是使用IP Address參照Whois Database(外部網站),取得該IP的相關資訊呈現出來,可以使用任何含有IP的日誌來做測試。
關於這個範例,可以從Splunkbase下載整個套件,套件名稱為「whois add on」,下載網址是「http://splunk-base.splunk.com/apps/22381/whois-%C2%ADadd-%C2%ADon」(或http://tinyurl.com/3cruhd9)。
該套件包含Python程式、設定檔(transforms.conf)、使用說明,可以省去自行撰寫程式練習的麻煩。解開該套件之後,將整個目錄(/whois_addon)複製到「$SPLUNK_HOME/etc/apps/」目錄下,重新啟動Splunk即可。安裝與使用方式請參考該套件中的README.txt檔。
動態參照使用步驟說明
至於動態參照的作法,下面將以「whois addon」套件為範例,進行使用步驟說明:
STEP 1:撰寫Python Script(whois_lookup.py)傳入一個需要參照的值,向外部網站發出Request,取得外部網站的回覆值。
以「whois addon」套件為範例,可以參考「$SPLUNK_HOME/etc/apps/whois_addon/bin/whois_lookup.py」程式,該程式接收一個參數(IP Address),發出URL Request給Whois網站詢問該IP Address的相關資訊。
STEP 2:編輯transforms.conf註冊步驟1的Python Script:
方括弧中的名稱「whoisLookup」(請注意大小寫視為不同)就是稍後在搜尋指令lookup中呼叫的名稱。
external_cmd就是指向步驟1撰寫的Python程式,並宣告傳出、回傳的參數名稱。而external_type則是宣告external_cmd是以什麼語言撰寫的(目前只支援Python)。至於fields_list,一樣填入傳出、回傳的欄位名稱
STEP 3:測試搜尋source=access_combined(這是Apache Log),資料中有IP Adderss欄位名稱為src_ip,使用指令lookup呼叫whoisLookup設定,傳入src_ip,接收回傳結果「whois」。Splunk搜尋到資料時,立即就每一筆資料中的src_ip呼叫whois_lookup.py取得回傳結果後顯示。
|
▲使用動態參照的結果。 |
延伸討論
上述範例是查找Whois,Splunk base網站上另外有幾個不同的應用可以下載使用,列表如下:
請注意,編號3是Redis Lookup,這是前段動態參照使用步驟說明中實作Whois的進階版本。
細心的人可能會注意到,如果Splunk依據每一筆資料中的IP Address都去詢問一次Whois網站,其速度可能會被該網站的回應速度給拖慢(若有其他查詢網站,當然可以更改Python程式指向該網站),於是Splunk使用Redis這個開放原始碼(Open Source)做出進階版。
使用Redis Cache的機制,對於已經參照過的URL直接從快取(Cache)中取得上次參照的結果(Redis的Cache可以設定保存期限),省去再次詢問的動作,這樣可以有效加速整個過程,同時又享有動態參照的好處。
這個進階版本與原先的Whois版本僅有Python Script內容不同,transforms.conf的設定方式完全一樣。有關Redis的進一步資訊,請參考「http://try.redis-db.com/」這個網站,提供了線上Demo的功能。
結語
靜態參照與動態參照各有其優缺點,主要還是取決於用戶自己的需求。簡單的說,當參照資料很少有變動時(譬如股票代號這種資料,不會時時變動,一天產生一次就可以)用靜態參照就足夠;若參照資料時時在變動,或是無法掌握其變動的規律時,動態參照就是不二選擇。
但是,動態參照會有效能的問題必須加以考慮,這個時候就會有要不要使用Redis的考量。更精明的人會想到混合運用,例如背景設計一個Scheduled Saved Search使用動態參照,將新的資料不斷寫入Redis DB,使用者端則使用該Redis DB的結果。聰明的你,也許可以想到其他更好的方法。
(本文作者為精誠資訊協銷代理事業部資深處長,專長為金融、電信應用系統研發)
(本文原載於網管人第70期)