譯者 | 朱先忠
審校 | 梁策 孫淑娟
簡介
Splunk是一個著名的日志管理工具。它能夠以實時方式挖掘來自于不同機器的日志數據,從而可用于監控、搜索和分析收集的數據。換句話說,它就是一個大數據日志管理工具,可以從存儲在Splunk索引中的非結構化數據中提煉出決策信息。因此,Splunk分析有助于將非結構化日志數據轉化為企業可以用來獲取業務價值的重要信息。此外,它還能夠為做出明智的決策提供監控和分析報告,從而有助于在系統性能出現問題時發出報警以便采取糾正措施。
Splunk不僅是一款優秀的日志分析工具,也被大量用作SIEM(安全事件和信息管理)工具。因此,Splunk被置于Gartner魔力象限的領先象限位置(建議有興趣的讀者參考文章https://www.veeam.com/blog/gartner-magic-quadrant-for-it-pros.html,以進一步了解什么是Gartner魔力象限)。
本文旨在展示使用Splunk洞察IT系統的簡易性。具體地說,我們將介紹如何通過Splunk來創建報告、如何創建儀表板以及如何設置警報。為了創建Splunk報告,用戶需要掌握中級水平的正則表達式相關知識。總之,本文重點不在講解理論,而是著重展示如何使用Splunk從應用程序日志文件中獲取企業需要的分析結論。
示例中應用的工具和方法
數據分析可以是描述性的、診斷性的、預測性的甚至是規定性的。但無論哪種,Splunk都可以幫助企業創建報告和警報,從而獲取針對這些分析類型的相關價值。此外,Splunk不僅可以從應用程序日志中收集信息,還可以連接到數據庫,既可以從數據庫中提取數據也可以將數據推送到數據庫中。
在本文中,我們將探討使用Splunk進行業務分析的三個方面的內容:
1. 連接應用程序日志、生成報告和創建儀表板。
2. 連接到MS SQL Server數據庫,展開數據挖掘,并將挖掘結果顯示在控制面板的報告中。
3. 設置報警,以便IT團隊或業務部門可以接收到特定事件通知。
連接到應用程序日志、生成報告并創建儀表板
在本節中,我們將首先導入一個包含應用程序記錄的日志文件。一旦該日志文件導入Splunk,我們要使用正則表達式(Regex)工具來創建報告和儀表板。在創建儀表板時,我們可以將報告創建為事件、表格、圖表和單值。其中,事件是存儲在日志文件中的單個事務/事件。下文將向你逐一顯示單值、表格、比較、事件和圖表報告等內容。需要說明一點,該日志文件數據來自一家名為“Awesome Insurance company”的虛構公司。
連接到應用程序并挖掘日志文件
第一步的任務是設置應用程序,以便挖掘日志文件。為此,需要在應用服務器上配置Splunk轉發器(Splunk forwarder)并修改配置文件inputs.conf,以確保可以挖掘應用程序日志并將結果推送到Splunk索引(Splunk Index)。不過,在這個測試中,為了簡化問題,我干脆使用“Data Inputs”命令導入了一個現成的日志文件(如圖)。
一旦點擊“Data inputs”命令,即跳轉到數據輸入頁面,其中顯示了多個選擇任何本地輸入的選項,如下圖所示點擊“Files & Directories”命令項:
在命令“Files & directories”界面中,點擊命令“File or Directory”(如圖)。然后選擇需要挖掘的日志文件,并注意是否需要持續監控該文件或是僅僅操作一次。
單擊“Next”命令之后,必要的話我們可以使用事件中斷,然后指定源類型(Source Type)的名稱。接下來,繼續單擊“Next”命令將進入索引、應用程序上下文等內容的輸入設置界面。所有設置完成后,我們會獲得有關當前索引的所有詳細信息(見下表)。
創建Splunk報告
我們可以使用正則表達式來創建Splunk報告,也可以從存儲在Splunk索引中的數據生成報告。下面表格中給出的是我們用來創建這些Splunk報告的報告名稱、報告類型和腳本數據。實戰中,Splunk報告可能更為復雜些,但本文旨在展示如何創建不同的報告,并在Splunk儀表板中顯示它們。
創建Splunk控制面板顯示報告
Splunk提供了一種在控制面板中顯示這些報告的方法。在控制面板中顯示報告有助于相關人員實時了解業務/應用程序的狀態。業務或技術團隊可以根據這些實時運營的Splunk報告做出業務決策或采取糾正措施。基于上述需求和腳本,我們可以快速構建一個儀表板。
登錄到Splunk,然后點擊“Dashboards”命令。在隨后界面中點擊按鈕“Create New Dashboard”,如圖所示:
如下圖所示,需要在界面中提供有關當前儀表板的詳細信息,然后點擊“Create”按鈕:
隨后出現一個標題為“Awesome Insurance Company”的空的儀表板。請注意,界面中有不少圖標命令可用于創建與發布報告:
為了創建報告,只需要單擊“Add Chart”按鈕并選擇要生成的圖表類型。在我們的例子中,我點擊“Table”命令,如圖所示:
隨后將在儀表板上創建一個新表;在右側,我們可以添加Splunk報告腳本。當我們添加腳本并單擊“Run & Save”命令時,數據會自動填充到表格中:
下面生成的儀表板名字是“Awesome Insurance Company”,該面板將所有的報告與時間選擇器數據保持一致,以便所有的報告都能得到同一時期的結果。
連接到MS SQL Server數據庫、挖掘數據及在儀表板報告中顯示
查看上面的報告“Application Database Data & Reconciliation”,它不僅顯示了來自應用程序日志的數據,還顯示了來自數據庫的數據。盡管從數據庫中挖掘數據有助于全面了解系統,但是從數據庫中挖掘數據需要額外的步驟。這是通過使用“Splunk DB Connect”提取數據庫數據并將其合并到主索引中來實現的。本文不想給出如何正確配置Splunk數據庫連接(DB Connect)的有關細節,而僅立足于如何實現這一操作的高級步驟講解。
應用程序數據庫
假設我們有一個叫做“Awesome Insurance Core System”的應用程序,它有一個名為“Awesome”的數據庫。其中有四個表,分別包含投保人、保單、索賠和賬單信息。這里的目的不是展示如何正確設置SQL Server數據庫或創建表,而是為了讓讀者了解如何提取駐留在SQL Server中的表數據。
接下來,讓我們創建幾個SQL Server表并插入一些記錄來模擬策略和索賠事務:
使用Splunk挖掘數據
在上面表格填充完模擬數據后,接下來我們需要設置Splunk,以便讓它能夠挖掘數據庫。
首先,需要安裝“Splunk DB Connect”。該Splunk數據庫連接將幫助我們連接到數據庫并獲取或拉取數據。首先,需要下載這個連接器的最新版本或與Splunk版本兼容的版本。安裝過程非常簡單,本文亦不想就此連接器的安裝步驟過多展開。
按照安裝說明安裝了Splunk數據庫連接(DB Connect)后,該連接即顯示在Splunk應用程序中,如下圖所示:
然后,點擊圖中的命令“Splunk DB Connect”就會打開“Splunk DB Connect”應用程序。然后,需要下面一些操作:切換到配置(“Configuration”)選項卡以便添加標識信息。其實,此處的標識信息也就是定義了一個要連接到數據庫的用戶。
接下來,需要安裝適當的SQL Server驅動程序,以便Splunk可以與MS SQL數據庫進行通信。在當前測試中,我安裝的是JTDS驅動程序。
創建標識信息后,單擊“Connections”選項卡并提供有關連接配置信息。用戶需要選擇使用哪個用戶創建連接、使用哪個驅動程序、數據庫所在的主機、數據庫使用的端口號以及數據庫名稱等等。如果有必要,我們也可以提供特定的許可信息。最后,單擊“Save”按鈕就會創建一個新連接。
完成以上三個步驟后,我們就可以與數據庫建立連接,并從底部表中獲取記錄。點擊按鈕“Data Lab”,你會看到四部分內容——輸入區、輸出區、查找區和SQL腳本管理區。因為在當前測試中,我們希望從MS SQL Server數據庫中獲取數據到Splunk中,所以我們將創建輸入區。如下圖所示,點擊按鈕“New Input”:
在這一操作環節,你可以設置輸入內容,如使用哪個連接、指定連接哪個目錄/數據庫和模式,還可以選擇下面已提供數據的表格。單擊表后,SQL編輯器將生成一個Select*查詢。當然,我們可以根據自己的要求修改這個語句。但是,由于我們希望在接收數據時更新此表,因此必須選擇表格中的一列,以便于我們的輸入跟蹤。這一點可以通過在右側窗格中設置值來實現。我們可以在輸入類型部分選擇“Rising”。本例中,這個“Rising”列將是“TransactionID”,因為它是唯一的列,并且始終遞增1。我們可以在“checkpoint value”項的下面設置一個我們希望輸入跟蹤的值。我們還可以設置查詢超時,以便系統可以在達到x秒時取消查詢操作。
SELECT * FROM AWESOME.DBO.CLAIM WHERE TRANSACTIONID >? ORDER BY TRANSACTIONID ASC
接下來,單擊“Next”按鈕將出現屬性設置(“Set Properties”)界面。在此,有些信息是可選的,但我們需要提供名稱、執行頻率、源類型和索引等信息。在這里,我們指示Splunk將上面特定輸入所挖掘的全部數據存儲到這個指定索引中。
一旦用戶操作到“Finish”這一步,屏幕上將顯示一個輸入完成的提示界面。
與第一個表的輸入創建一樣,我們也可以為所有其他3個表設置輸入選項。數據現在將開始流入指定的索引(在我們的例子中是“awesome_Index”)中。
既然應用程序日志數據已經存在于索引中,而且也從數據庫接收到了數據,所以我們現在可以運行“Application Database Data & Reconciliation”程序的Splunk腳本了。程序運行中,我們注意到源類型可以是上面不同的5種,輸入部分既可以是數據庫表也可以是日志文件。
設置報警以便觸發特定事件時通知IT團隊或業務部門
與上面報告創建類似,如果發生關鍵事件,我們可以設置報警。例如,我們可以為業務內容安排報警,如果有超過x金額的索賠獲得批準,就發出報警信息提醒業務部門;或者為技術任務安排報警,例如在系統出現內存不足、服務不可用、連接超時或者登錄失敗(如果短時間內出現多次登錄操作)等錯誤時提示技術部門。以下部分將展示如何在Splunk中設置報警功能。
運行要搜索的腳本
在本例中,我們試圖查看所有獲批索賠超過50000美元的信息。一旦生成結果集,我們就可以通過命令“Save As Alert”設置報警。
設置報警
一旦點擊命令按鈕“Save As Alert”,系統將會創建一個待填寫的表格,以便安排報警。我們可以給出一個名字,然后根據計時器系統的設置規劃報警時間。此外,我們還可以設置觸發條件。
創建觸發器動作
在我們設置了上述強制參數之后,我們可以配置觸發器操作。在本文展示的測試中,我們將添加觸發器(“Add Actions”)操作,比如發送電子郵件(“Send email”)。操作中,我們可以提供電子郵件ID、郵件正文。此外,如果需要的話,還可以添加內聯表格支持。這樣的設置將提供一個HTML格式的電子郵件正文,且包含來自上述查詢結果集的內聯表。
總結
Splunk提供了一個支持大數據的日志分析解決方案。具體一點說,Splunk能夠以運營智能幫助企業及其相關人員實時查看系統的狀態。本文僅僅介紹了一些基本的報告,而實戰中的Splunk報告可能非常復雜,也進而能創造更多的業務價值。此外,Splunk還可以連接到數據庫,從而創建基于結構化數據庫的報告。而且,Splunk可以將日志數據推送到外部數據庫,或將外部數據庫中的數據復制到Splunk索引。一旦確定數據所在位置,創建報告就非常容易,并且能夠提供應用程序事務的整體視圖。
此外,Splunk還是一個很好的報警工具,可以在問題出現之前提醒業務或IT團隊將之解決。Splunk除了為IT團隊提供日志分析解決方案外,還可極好地用于安全管理和DevOps等方面。此外,Splunk還提供了連接其他應用程序的連接器組件以方便使用。總之,通過使用Splunk,企業可以從應用程序日志和應用程序數據庫中采集業務數據并進行技術分析,而這將會給他們帶來極大的益處。
譯者介紹
朱先忠,51CTO社區編輯,51CTO專家博客、講師,濰坊一所高校計算機教師,自由編程界老兵一枚。早期專注各種微軟技術(編著成ASP.NET AJX、Cocos 2d-X相關三本技術圖書),近十多年投身于開源世界(熟悉流行全棧Web開發技術),了解基于OneNet/AliOS+Arduino/ESP32/樹莓派等物聯網開發技術與Scala+Hadoop+Spark+Flink等大數據開發技術。
原文標題:??Business Analytics from Application Logs and Database using Splunk??,作者:Roopesh Uniyal