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