轉自:http://www.freebuf.com/articles/database/123006.html
Splunk大數據分析經驗分享:從入門到奪門而逃

* 作者:Porsche(U神),本文屬FreeBuf原創獎勵計划文章,未經許可禁止轉載
大家好,我是U神,關於Splunk的文章網上非常少,中文的官方文檔也很少。這篇文章的都是我觀看某Splunk視頻(那視頻好貴,我是通過某XX看到的)后寫下的學習筆記,我用自己通俗易懂的語言非常詳細地寫了splunk的安裝、CLI命令、SPL語言、數據分析等。記錄這些筆記花了較長時間,一方面是讓學習更加深刻,一方面防止忘記了后可以找找筆記再看看,另一方面發出來也想分享給每一個想學習Splunk的朋友,相信這篇文章會是你入門的最佳選擇。
目錄
0×01 初識splunk0x02 Linux上安裝Splunk0x03 Windows上安裝Splunk
0×04 Splunk安裝后配置
0×05 Splunk的目錄結構
0×06 Splunk常用的CLI命令
0×07 實戰-導入數據前的准備
0×08 實戰-導入並分析本地數據-1
0×09 實戰-導入並分析本地數據-2
0×10 使用轉發器轉發數據
0×11 實戰-數據分析和可視化-1
0×12 實戰-數據分析和可視化-2
0×13 郵箱服務器配置
0×14 創建APP 0X15 Splunk技巧
0×15 splunk技巧
0×01 初識splunk
一、公司:
美國Splunk公司,成立於2004年,2012年納斯達克上市,第一家大數據上市公司,榮獲眾多獎項和殊榮。 總部位於美國舊金山,倫敦為國際總部,香港設有亞太支持中心,上海設有海外第一個研發中心。 目前國內最大的客戶許可是800GB/天。 產品:Splunk Enterprise【企業版】、Splunk Free【免費版】、Splunk Cloud、Splunk Hunk【大數據分析平台】、Splunk Apps【基於企業版的插件】等。
二、產品:
Splunk Enterprise,企業版,B/S架構,按許可收費,即每天索引的數據量。
(購買20GB的許可,則默認每天可索引20G數據量;一次購買永久使用;如果使用試用版,試用期結束之后會切換到免費版)
Splunk Free,免費版,每天最大數據索引量500MB,可使用絕大多數企業版功能。
(免費版沒有例如:身份驗證、分布式搜索、集群等功能)
Splunk Universal Forwarder,通用轉發器,是Splunk提供的數據采集組件,免費,部署在數據源端,無UI界面,非常輕量,占用資源小。
(轉發器無許可證,是免費的;企業版專用的;所以部署在數據源,例如:部署在你的WEB服務器上,監控你的WEB日志,實時監控,產生一條日志則轉發一條,進行增量轉發;一般配置修改配置文件或者使用CLI命令。占用資源小)
三、Splunk是什么
面向機器數據的全文搜索引擎;
(使用搜索引擎的方式處理數據;支持海量級數據處理)
准實時的日志處理平台;
基於時間序列的索引器;
大數據分析平台;
一體化的平台:數據采集->存儲->分析->可視化;
通用的搜索引擎,不限數據源,不限數據格式;
提供榮獲專利的專用搜索語言SPL(Search Processing Language),語法上類似SQL語言
Splunk Apps 提供更多功能
(針對操作系統、思科網絡設備,splunk都提供了專用的APP,接入數據源都可以看到直觀的儀盤表。)
四、機器數據是什么
機器數據是指:設備和軟件產生的日志數據、性能數據、網絡數據包。這些數據都是一些非結構化的數據,我們可以統一將這些數據統一采集到splunk之后,splunk可以對這些數據進行索引、調查、監控、可視化等。
五、Splunk組件
索引器:索引器是用於為數據創建索引的Splunk Enterprise 實例。索引器將原始數據轉換為事件並將事件存儲至索引(Index)中。索引器還搜索索引數據,以響應搜索請求。
搜索頭:在分布式搜索環境中,搜索頭是處理搜索管理功能、指引搜索請求至一組搜索節點,然后將結果合並返回至用戶的Splunk Enterprise 實例。如果該實例僅搜索不索引,通常被稱為專用搜索頭。
搜索節點:在分布式搜索環境中,搜索節點是建立索引並完成源自搜索頭搜索請求的Splunk Enterprise實例。
轉發器:轉發器是將數據轉發至另一個Splunk Enterprise 實例(索引器或另一個轉發器)或至第三方系統的Splunk Enterprise 實例。
接收器:接收器是經配置從轉發器接收數據的Splunk Enterprise 實例。接收器為索引器或另一個轉發器。
應用:應用是配置、知識對象和客戶設計的視圖和儀表板的集合,擴展Splunk Enterprise 環境以適應Unix 或Windows 系統管理員、網絡安全專家、網站經理、業務分析師等組織團隊的特定需求。單個Splunk Enterprise 安裝可以同時運行多個應用。
六、Splunk分布式架構
如上圖所示:
1、可分為三層:第一層為數據源端:如應用服務器、服務總線、網絡設備、防火牆等。
2、如果要采集這些數據例如:應用服務器可安裝splunk的轉發器,防火牆的數據可以通過TCP\UPD端口將數據發送到Splunk的中間層,Splunk的中間層稱為splunk的索引器(接收器),數據將存儲在這一層。
3、用戶使用search head檢索實例,search head將檢索請求發送到各個索引器中。再把結果匯集到search head中,最后呈現給用戶觀看。
4、 數據源的轉發器會將數據轉發到多個splunk的實例中,轉發器將進行自動負載均衡。
七、通用轉發器
轉發器分為重量(Heavy)、輕量(Light)和通用轉發器(Universal)三種類型。
最常用的是通用轉發器,其他兩類很少使用。
與完整Splunk Enterprise實例相比,通用轉發器的唯一目的是轉發數據。與完整Splunk Enterprise 實例不同的是,您無法使用通用轉發器索引或搜索數據。
為實現更高性能和更低的內存占用,它具有幾個限制:
通用轉發器沒有搜索、索引或告警功能。
通用轉發器不解析數據。
通用轉發器不通過syslog 輸出數據。
與完整Splunk Enterprise 不同的是,通用轉發器不包含捆綁的Python 版本。
八、多種應用場景
0×02 Linux上安裝Splunk
一、配置時間:
配置一致的時間
建議搭建企業內NTP服務器,將所有相關設備指向該服務器
(如果各個機器的時間不一致,就會因此產生問題。所以建議搭建一台NTP服務器,讓所有設備的時間指向NTP服務器,讓所有設備統一時間)
二、安裝准備
本次安裝基於CentOS 6.7, 64位
建議部署在64位環境下
Splunk Enterprise:
splunk-6.4.2-00f5bb3fa822-Linux-x86_64.tgz
Splunk 通用轉發器:
splunkforwarder-6.4.2-00f5bb3fa822-Linux-x86_64.tgz
本次以root用戶安裝(可以使用非root)
三、 安裝步驟
1)、wget下載tgz的壓縮包。
2)、解壓縮:#tar -zxvf splunk-6.5.1-f74036626f0c-Linux-x86_64.tgz -C /opt (默認我們解壓到/opt目錄下)
3)、splunk的可執行程序都放在/opt/splunk/bin/下,啟動該程序應執行splunk,splunk命令參數如下:
#注意:以下命令我們稱之為CLI命令,如下:通用轉發器和splunk命令都可以如下執行
./splunk
start //啟動splunk
--accept-license //自動接收許可
restart //重啟splunk
status //查看splunk狀態
version //查看splunk版
開始啟動的時候記得記住加上–accept-license,這樣更便於我們安裝。
4)、splunk安裝之后開啟Splunk Web端口8000。Splunkd端口8089端為管理端口。 安裝之后我們可以在瀏覽器中訪問splunk 8000端口的WEB界面。
注意:如果外部計算機無法訪問它。需要關閉iptables服務或將該端口加入策略中
#services iptables stop [其它類unix系統關閉防火牆] systemctl stop firewalld.service [CentOS 7下停止防火牆]
Splunk地址如:http://192.168.199.205:8000,進入splunk默認的管理員為:admin 、密碼為changeme。第一登錄便會強制要求修改密碼
配置splunk開機啟動 ./splunk enable boot-start //這樣每次開機,splunk服務都會開機啟動
#通過上述命令查看splunk狀態和版本信息 ./splunk status
#查看進程相關信息 : ps -f | grep splunk
四、 Splunk的卸載
./splunk disable boot-start //關閉自啟動
./splunk stop //停止splunk
./rm–rf/opt/splunk //移除splunk安裝目錄
卸載要慎重,注意數據備份
五、安裝Splunk 通用轉發器
1)、將通用轉發器解壓到opt目錄下,Splunk轉發器的安裝方法和splunk一致,但它無UI界面。
tar zxvf splunkforwarder-6.4.2-00f5bb3fa822-Linux-x86_64.tgz -C /opt
2)、切換到Splunkforwarder的bin目錄下去啟動通用轉發器
cd /opt/splunkforwarder/bin/ //切換到通用轉發器的可執行程序目錄
./splunk start –accept-license //啟動通用轉發器
注意:如果splunk web和通用轉發器安裝在同一 服務器,通用轉發器的管理端口也是8090,則會提示被splunk占用,選擇yes修改轉發器管理端口,如下:
我們可通過CLI命令查看splunkd的端口
./splunk show splunkd-port //不過這里得輸入splunk登錄的賬號密碼
./splunk set splunkd-port 8091 //修改splund的端口為8091,提示:重啟生效
3)、修改通用轉發器密碼
默認密碼:admin/changeme
修改密碼如下:其中role是角色,auth是驗證原密碼
./splunk edit user admin -password ‘admin’ -role admin -auth admin:changeme
0×03 Windows上安裝Splunk
一、安裝准備:
#搭建NPT服務器
配置一致的時間
建議搭建企業內NTP服務器,將所有相關設備指向該服務器
#安裝用戶的選擇
本地系統用戶,本次采用此方式
域用戶,較復雜,請參考文檔
#安裝環境
本次安裝基於Windows 7, 64位
建議部署在64位環境下
Splunk Enterprise:
splunk-6.4.2-00f5bb3fa822-x64-release.msi
Splunk 通用轉發器:
splunkforwarder-6.4.2-00f5bb3fa822-x64-release.msi
二、 安裝步驟
GUI安裝,比較簡單, 此處不演示。
Splunk默認安裝在 “C:\Program Files\Splunk”
安裝之后會注冊兩個服務,它的顯示名稱為:Splunkd Service、splunkweb (legacy purposes only)
啟動:splunk start
關閉:splunk stop
重啟:splunk restart
查看狀態:splunk status
查看版本:splunk version
通過Windows DOS命令:
net start splunkd
net stop splunkd
通過服務面板 (services.msc)
#查看splunk web的端口命令為:
splunk show web-port
三、卸載splunk
依照上方的講解的停止splunkd。
通過Windows控制面板的卸載程序卸載。
四、 安裝Splunk 通用轉發器
GUI安裝,比較簡單,選擇:自定義(Customize Options),如下可選擇SSL證書。
#其次安裝的用戶如下:
local system :本地系統用戶
domain account :域賬號
#選擇是否收集的日志選項(Windows Event logs)。如:應用日志、安全日志、系統日志、轉發事件日志、安裝日志。
#選擇是否收集Windows 的性能數據(Performance Monitor)。如:CPU、內存、磁盤、網絡狀態等
#注:收集這些日志都是Splunk的 Splunk Add-on for Microsoft Windows插件,你在NEXT下一步則可安裝它。
由於收集的這些日志會轉發到splunk企業版中winEventlog的索引中,但是由於splunk 企業版沒有創建該索引,如果需要創建要么手動創建,要么安裝一個Splunk APP.創建索引可在:
進入Splunk Web→設置→索引→新建索引
下一步(Receiving Indexer),這里是設置接收器,即上述勾選的系統日志將轉發到哪個IP和端口上。由於我們的splunk企業版在本地,所以這里寫localhost,開啟一個10001端口讓這些日志轉發到Splunk entiprise上。
#接着在splunk enterprise上配置接收。
進入Splunk Web→設置→轉發和接收→接收數據→新增→偵聽此端口為:10001(剛才設置的接收端口)
#使用splunk的CLI命令可以查看監聽的端口
splunk display listen
當然你也可以通過splunk CLI命令來增加監聽端口。
splunk enable listen 10002
此時你便可以查看wineventlog索引接收的數據了
此時可以系統自帶的APP (Search &Reporting)使用SPL語言來搜索索引事件。
#注:Windows 下會自動解決Splunk Enterprise和通用轉發器的管理端口8090的端口沖突。
0×04 splunk安裝后的配置
一、配置Splunk的服務器名稱
設置->服務器設置->常規設置
默認是服務器主機名
也可通過命令行修改
./splunk set servername 服務器名稱 //修改Splunk服務器名稱
修改需要重啟Splunk
二、配置Splunk的端口號
Splunkd端口號:8089
Splunk Web端口號:8000
可在Splunk Web 中修改,也可通過CLI命令修改
./splunk set splunkd-port 8090 //設置管理端口
./splunk set web-port 8001 //設置WEB端口
配置后需要重啟Splunk
三、設置默認HOST名稱
設置源自該服務器的事件的默認host值 #即設置日志所來自的源主機的名稱進行標記。
可在Web界面修改
進入Splunk WEB頁面→設置→服務器設置→常規設置→索引設置→默認主機名:
或者通過Splunk CLI修改:
#./splunk set default-hostname 新的host名稱
配置后需要重啟服務器
四、Splunk Web 啟用SSL (HTTPS)
在Splunk Web 中啟用:設置->服務器設置->常規設置
通過Splunk CLI 命令:
./splunk enable web-ssl //啟用SSL
./splunk disable web-ssl //禁用SSL
需要重啟
重啟后Splunk Web 地址變為:
五、修改默認索引位置
默認索引目錄為:/opt/splunk/var/lib/splunk/
可以通過配置文件進行修改位置:(例如,修改為:/foo/splunk):
mkdir /foo/splunk/ //創建新的索引目錄, 非root用戶請更改目錄所有者(chown)
./splunk stop //停止Splunk
cp rp /opt/splunk/var/lib/splunk/* /foo/splunk/ //復制原索引目錄下的所有文件到新的索引目錄
vi /opt/splunk/etc/splunk-launch.conf //編輯splunk的配置文件
SPLUNK_DB=/foo/splunk //在該配置文件中設置splunk_db為新的索引路徑(將原來注釋去掉,然后再修改)
./splunk start //重新啟動splunk
通過CLI命令:
./splunk list index //可查看所有索引以及索引的目錄
六、創建索引
索引:被檢索的數據存儲在索引(index)中,類似於database。(就是說轉發過來的事件格式化后存儲在索引中)
設置->索引->新建索引 (WEB頁面中創建索引)
帶有_的索引都是splunk的內部索引,這些索引不記錄在許可證中
默認索引:main (如果轉發過來的數據不指定索引,則會保存在默認的main索引中)
在Splunk Web 中創建/刪除索引
通過Splunk CLI 創建/刪除索引:
./splunk add index 新的索引名稱 //創建新的索引
./splunk remove index 被刪除的索引名稱 //刪除索引
七、配置接收端口
Universal Forwarder 轉發給Splunk Enterprise 時,Splunk Enterprise所使用的接收端口默認為TCP 9997。
設置->轉發和接收->配置接收,新增9997 (Web界面設置)
通過Splunk CLI 命令:
./splunk enable listen 9997 //啟用splunk的接收端口
無需重啟Splunk
八、許可類型
設置->授權
安裝后是“Enterprise Trial”試用版許可證,500MB/天,試用60天
試用到期后轉為“Splunk Free”免費版許可證,500MB/天,部分功能無法使用。
企業版許可證,請聯系Splunk銷售。
轉發器許可證,針對重量和輕量級許可證,通用轉發器不需要。
使用情況報表,可以查看當前許可證使用的情況報表
0×05 Splunk的目錄結構
一、Splunk的目錄結構
bin目錄下:常用的Splunk命令將存儲在該文件夾。
etc目錄下:許可、配置文件 ,以及splunk創建的app、下載的app都將存在etc/apps;
etc/system目錄,存放系統配置文件;
etc/system/local目錄,用戶對splunk進行的系統配置
etc/users目錄,用戶的配置文件,每個用戶都擁有一個文件夾;
etc/licenses/ 目錄,splunk的許可證目錄。
etc/apps/目錄,本身存在很多自帶的APP,如:默認的search & reporting 的APP就是存在etc/apps/search。
etc/apps/SplunkForwarder 目錄,是Splunk的重量級轉發器。
etc/apps/SplunkLightForwarder 目錄,是Splunk的輕量級轉發器;
etc/apps/splunk_management_console 目錄,是splunk的分布式管理控制台的APP;
以Search&Repoeting APP具體說明:
etc/apps/search/bin 目錄,一些APP的腳本放在該目錄;
etc/apps/search/local 目錄,用戶配置APP的文件存在在這里。Splunk升級不會覆蓋該該文件夾下的配置文件
etc/apps/search/default 目錄,Splunk APP自帶的配置文件。
etc/apps/search/static 目錄,APP的圖標存放文件
#var目錄:
var/lib/ 目錄下基本是放索引。
var/log Splunk自身日志目錄。
#include目錄:
include/目錄,Splunk自帶的Python目錄
#share
share/GeoLite2-City.mmdb 文件,Splunk自帶的免費IP地址庫。
share/splunk/目錄,引用的第三方的庫文件存儲位置。
二、Splunk的配置文件
三、default 和 local區別
Default 目錄是Splunk自帶的目錄
系統優先讀取用戶自定義local目錄下的配置文件, 然后才會讀取default目錄下的
自定義的配置都要放在local 目錄下
千萬不要直接修改default目錄下的文件
升級時default目錄會被覆蓋,local目錄則不會
0×06 Splunk常用的CLI命令
一、Splunk啟動/停止/重啟
啟動:splunk start
關閉:splunk stop
重啟:splunk restart
查看狀態:splunk status
查看版本:splunk version
二、配置端口號(splunkd 管理端口和Web端口)
查看端口:
splunk show splunkd-port
splunk show web-port
修改端口:
splunk set splunkd-port
splunk set web-port
三、服務器配置命令
splunk set servername 新的服務器名稱 //設置服務器名稱
splunk set default-hostname 新的主機名稱 //設置默認主機名稱
splunk enable web-ssl //啟用SSL
splunk disable web-ssl //關閉SSL
四、修改用戶密碼
splunk edit user admin –password ‘newpassword’ –authadmin:oldpassword //修改用戶密碼
splunk add user //新增用戶
./splunk add user 新的用戶名 -password ‘新用戶密碼’ -full-name ‘設置它的全名’ –role User(這個是角色)
./splunk list user //列出用戶
username: 用戶名稱
full-name :全名
role : 角色
./splunk remove user 被移除的用戶名 //刪除用戶
五、索引操作
./splunk list index //列出所有索引
./splunk add index 新的索引名稱 //添加索引
./splunk remove index 要刪除索引的名稱 //刪除索引 #注意:處於已禁用狀態無法刪除
./splunk enable index 要啟用的索引名稱 //啟用索引
./splunk disable index 被禁用的索引名稱 //禁用索引
./splunk reload index //重新加載索引配置
六、啟用監聽端口
./splunk enable listen 要啟用的端口號 // 開啟splunk接收的指定端口
./splunk disable listen 要禁用的端口號 // 關閉splunk接收的指定端口
./splunk display listen // 顯示已啟用的splunk接收的端口
七、splunk show 命令
./splunk show web-port // 查看splunk web的端口
./splunk show splunkd-port // 查看splunkd的端口
./splunk show default-hostname // 查看默認的主機名稱
./splunk show servername // 查看顯示splunk服務器名稱
./splunk show datastore-dir // 查看索引存儲的目錄
八、splunk search 命令
在命令行執行搜索命令:
./splunk search ‘index=_audit| head 5′ //查看_audit索引前5條數據
九、轉發器常用命令(切換到轉發器的bin目錄下)
#案例:(通過案例學習命令)
我們這里將Linux的審計日志 /var/log/audit/audit.log 作為監控目標,通過通用轉發器,將其轉發給Splunk enterprise,我們這里 通用轉發器和Splunk Enterprise都是同一台服務器。
1)./splunk add monitor 監控日志的物理地址 -index 所轉發到的索引 //添加一個監控項
2)./splunk list monitor //列出當前的所有監控項
3)./splunk add forward-server 192.168.199.205:9997 【Splunk Enterprise的IP:接收的端口號】//添加轉發服務器
4)./splunk list forward-server //列出轉發服務器
5)./splunk remove monitor ‘移除的監控文件路徑’ //刪除監控項
6)./splunk remove forward-server 192.168.199.205:9997 //刪除
Web中查看linuxaudit索引:
十、splunk help 命令
splunk help //列出splunk常用命令列表
splunk help commands //列出更多的常用命令
splunk help index //列出索引的相關命令
splunk help monitor //列出監控相關的命令
splunk help show //列出信息顯示的命令
splunk help forward-server //列出轉發服務器的命令
splunk help set //列出設置相關命令
0×07 實戰-導入數據前的准備
一、確定數據的存儲和歸類
確定數據存儲在Splunk Enterprise中的哪個索引(index)中:針對不同類型的數據,建議分別存儲在不同的索引中,便於數據的搜索和管理
為數據指定一個類型(sourcetype):對不同類型的數據進行歸類
默認字段:index(指定特定索引), host(指定host 主機), sourcetype(數據源類型),source(日志文件路徑)
二、確定編碼類型
Splunk支持多種編碼類型
默認編碼UTF-8
中文字符編碼HZ 如果包含中文字符,建議采用HZ編碼
可以在數據預覽時選擇適合的編碼
通過修改配置文件設定編碼,設置全局默認編碼,或為特定的數據類型設定編碼:
編輯local 下的props.conf 文件(/opt/splunk/etc/system/default/props.conf):
(注:此類配置到Splunk enterprise中,非轉發器中)
[default]
CHARSET=HZ
三、確定時間戳
時間戳非常重要。
如果被轉發的日志中不帶時間戳,則將當前索引這些數據進來的時間設置為時間戳。
時間戳是否可以正常識別,如無法正確識別,則需配置。
四、數據預覽
最佳實踐—通常在將數據導入Splunk之前,建議先取小部分來進行測試,通過Splunk提供的“數據預覽”功能來驗證數據是否可以正確導入,是否需要額外配置。這樣做可以避免,如果數據未正確導入則可能需要重新導入數據的情況。
復制額外配置並保存到props.conf配置文件中。
五、實戰導入Linux審計日志
Web頁面的方式
1)、進入Splunk Web界面, 設置→數據:索引→新建索引→鍵入索引名稱
2)、設置→添加數據→監視→文件和目錄→文件或目錄:瀏覽 需要導入的數據
#連續監視:不斷實時地監控,一旦有新增記錄則索引到splunk
#索引一次:只會將文件索引一次,后續新增的將不會被索引到splunk中
3)、單擊下一步,進入來源類型;此處設置 來源類型。再進入一下在輸入設置中設置索引為我們剛創建的索引。
4)、最后提交完成,變可以再search & reporting中查詢得到索引內容
命令行方式執行
1)、切換到/opt/splunk/bin中,使用./splunk add index linux_audit命令新增索引。
2)、修改配置文件/opt/splunk/etc/apps/search/local/inpust.conf(如果沒有請新建),添加如下:
[monitor:///var/log/audit/audit.log]
disabled = false
index = linux_audit
sourcetype = linux_audit
3)、同樣在該目錄下創建props.conf文件,填寫如下信息:
[ linux_audit ]
SHOULD_LINEMERGE=true
NO_BINARY_CHECK=true
BREAK_ONLY_BEFORE_DATE=false
CHARSET=UTF-8
category=Operating System
description=Output produced by the auditd system daemon used to track changes on a Linux machine
disabled=false
pulldown_type=true
這些信息實際上和在Web設置來源類型中的參數配置是一樣的:
4)最后使用./splunk restart重啟服務即可!在search & reporting上我們像之前我們提到的一樣搜索日志信息,我們使用 “stats count” 來統計日志的數量:
0×08 實戰-導入並分析本地數據-1
一、創建索引
創建名為tutorialdata 的索引
二、數據介紹
上傳示例數據壓縮包,Splunk支持.zip和.tar.gz等壓縮包格式,splunk會對上傳的壓縮包自動解壓縮
該壓縮包包含三類數據(我當前測試的壓縮包):
access.log,Apache訪問日志 secure.log,安全日志
三、數據
采用上傳(Upload)的方式從本地導入數據
// Splunk有 上傳、監視本地、來自轉發三種添加數據的方式
設定路徑中的段為主機名,如壓縮包:/waf/secure.log,我們可以取waf為主機host名稱
Splunk會自動為它們確定數據源類型(sourcetype)
創建單獨的App,名為TutorialData,並在該App中查看導入的數據
步驟:
1)、 首先要創建APP,進入Splunk web界面,左上角點擊“應用”→管理應用→創建應用
2)、 開始添加數據,左上角選擇剛才創建的應用。然后設置→添加數據→上載→上傳剛才的文件→
3 )、在輸入設置中主機名稱可設置為:路徑中的段,此處輸入“2”表示二級目錄的名稱命令主機,即可我壓縮包中/logs/apache/access.log,則以apache作為主機名。索引則設置我們剛才設置的索引。
上載完畢之后可以開始搜索了。
四、搜索界面
搜索界面介紹
source="tutorialdata.zip:*" index="tutorialdata“
字段列表
例如搜索:
source="logs.zip:*" index="tutorialdata" sourcetype=access_common clientip="127.0.0.1" select sleep
解釋: #來源logs.zip 索引為:tutorialdata 源類型為:通用訪問日志 搜索日志中IP為:127.0.0.1 關鍵字包括select 和 sleep
其它語法:
source="logs.zip:*" index="tutorialdata" (script OR select)
#: (select OR union) 邏輯或。滿足一個即可。 關鍵字OR要大寫
source="logs.zip:" index="tutorialdata" sele
#:通配符*代表后面任意
我們在在右上角 “另存為——>報表”,輸入標題則可保存為報表。如果你后期想修改,可在“編輯——>在搜索中打開——>修改搜索語句——>保存” 重新保存之后即可。
還可以使用統計數量之后,可視化的形式進行查看、另存為:儀表板面板、報表、告警等等
五、Splunk的搜索語言(head&tail)
管道運算符(|),將管道左邊搜索產生的結果作為右邊的輸入 head, 返回前n 個(離現在時間最近的)結果 tail, 返回后n 個(離現在時間最后的)結果,如
index="tutorialdata" sourcetype="access_common" select | head 2
index="tutorialdata" sourcetype="access_common" select | tail 2
通過 SPL語言搜索、過濾的結果也可以保存為儀盤表,(此處我還做了單值型的可視化)。如下圖:
六、Splunk的搜索語言(top、rare、rename as )
top, 顯示字段最常見/出現次數最多的值
rare, 顯示字段出現次數最少的值
limit,限制查詢,如:limit 5,限制結果的前5條
rename xx as zz : 為xx字段設置別名為zz,多個之間用 ,隔開
fields :保留或刪除搜索結果中的字段。fiels – xx 刪除xx字段,保留則不需要 – 符號
source="tutorialdata.zip:*" index="tutorialdata" | top clientip
(獲取出現次數最多的IP,降序排列)
source="tutorialdata.zip:*" index="tutorialdata" | top clientip limit=5
(在上方結果中限制顯示前5條)
#source="tutorialdata.zip:*" index="tutorialdata" | top clientip |rename clientip as “攻擊源” |rename count as "攻擊次數"
(為兩個字段設置別名)
可以保存為餅狀圖的儀表盤
source="tutorialdata.zip:*" index="tutorialdata" | rare clientip
(返回clientip最少的10個,升序排序)
0×09 實戰-導入並分析本地數據-2
一、Splunk的搜索語言(table,sort)
table :返回僅由參數中指定的字段所形成的表。如:table _time,clientip,返回的列表中只有這兩個字段,多個字段用逗號隔開
基於某個字段排序(升序、降序),降序的字段前面要使用-號,升序的使用+
sort -clientip, +status, 先基於clientip降序排列之后,再對這個結果基於status升序
source="tutorialdata.zip:*" index="tutorialdata" host="www1" | table _time,clientip,status
source="tutorialdata.zip:*" index="tutorialdata" host="www1" | table _time,clientip,status|sort -clientip,+status
(針對上述中先基於clientip降序排列之后,再對這個結果基於status升序)
二、Splunk的搜索語言(stats)
對滿足條件的事件進行統計
stats count() :括號中可以插入字段,主要作用對事件進行計數
stats dc():distinct count,去重之后對唯一值進行統計
stats values(),去重復后列出括號中的字段內容
stats list(),未去重之后列出括號指定字段的內容
stats avg(),求平均值
source="tutorialdata.zip:*" index="tutorialdata" host="www1"|stats count(clientip)
[統計clientip數量]
index="tutorialdata" sourcetype="access_combined_wcookie" status=200 "action=purchase" |stats dc(clientip)
[dc去重復之后再進行統計]
可視化可以使用“徑向儀表”,對滿足一定數量進行不同顏色標記,可存為現有的儀表盤面板。
index="tutorialdata" sourcetype="access_combined_wcookie" |stats values(host) as "主機列表"
[去除重復后列出字段的內容]
index="tutorialdata" sourcetype="access_combined_wcookie" status=200 "action=purchase" |stats list(host)
[未去除重復列出括號中的內容]
三、Splunk的搜索語言(chart)
在用於制作圖表的表格輸出中返回結果。
chart count():
index="tutorialdata" sourcetype="access_combined_wcookie" status=200 "action=purchase" | chart count by host
[統計字段status=200以及action=purchase的事件,並且以host字段來進行排列顯示]
chart max()
index="tutorialdata" sourcetype="access_combined_wcookie" status=200 "action=purchase" | chart count by host|chart max(count)
[求出最大值]
chart min()
index="tutorialdata" sourcetype="access_combined_wcookie" status=200 "action=purchase" | chart count by host|chart min(count)
[求出最小值]
chart avg()
index="tutorialdata" sourcetype="access_combined_wcookie" status=200 "action=purchase" | chart count by host|chart avg(count)
[根據第一次的結果求出平均值]
四、Splunk的搜索語言(timechart)
使用相應的統計信息創建時間系列圖表
index="tutorialdata" sourcetype="access_combined_wcookie" status=200 "action=purchase" | timechart count by host
[可以看到以每天作為時間分隔統計,在每24小時中滿足條件的通過host字段進行統計]
index="tutorialdata" sourcetype="access_combined_wcookie" status=200 "action=purchase" | timechart span=8h count by host
[加入span參數來定義時間間隔為8h一次分隔統計]
五、子搜索([search ])
子搜索包含在方括號[]中
注:以下字段中含義:action=purchase代表成功購買產品 status表示狀態為200
index="tutorialdata" sourcetype="access_combined_wcookie" status=200 "action=purchase" | top clientip limit=1
(搜索滿足成功購買產品、狀態為200的,出現數量最多的IP,只取最高的那個)
index="tutorialdata" sourcetype="access_combined_wcookie" "action=purchase" status=200 clientip="87.194.216.51"|stats count dc(productId),values(productId) by clientip
(搜成功購買,狀態為200,IP為:87.194.216.51,統計購買產品的數量,並且去重復地列出具體的名稱,最后通過clientip排序顯示)
合並上面兩個語句,子搜索放在[]中
index="tutorialdata" sourcetype="access_combined_wcookie" action="purchase" status=200 [search index="tutorialdata" sourcetype="access_combined_wcookie" status=200 action="purchase" | top clientip limit=1 |table clientip]|stats count dc(productId),values(productId) by clientip
(上面的clientip是通過子搜索 search 后面的結果,最后使用了“|table clientip”來只顯示clientip字段,最后再進行如上次的統計數量和明細)
可視化后添加到儀表盤,可將現有儀表盤生成PDF。
還可以通過“PDF計划交付”來定時通過郵箱將報表發送給指定用戶。
0×10 使用轉發器轉發數據
一、數據准備
三個主機的Apache 訪問日志,Splunk可以自動識別該類型
位於/opt/log目錄下
日志文件來自三台服務器,因此需要區分三台服務器
預覽數據:
/opt/log/BigDBbook-www1
/opt/log/BigDBbook-www2/opt/log/BigDBbook-www3
二、服務器端配置(Splunk Enterprise: Cent OS 7:192.168.199.205)
創建新索引apachedata
./splunk add index apachedata
新增接收端口9998
./splunk enable listen 9998
三、客戶端配置(ubuntu 192.168.213.129)
修改配置文件添加監控項
~ vim /opt/splunkforwarder/etc/apps/search/local 如果沒有local則創建該目錄
創建inputs.conf ,配置如下:
明確index,host,sourcetype字段
[monitor:///opt/log/BigDBbook-www/] //設置監控/opt/log/下的所有BigDBbook-www開頭的目錄下的日志,記得“/”符號
index=apachedata //設置索引名稱為服務端創建的:apachedata
host_segment=3 // 為這三個日志設置主機名稱,取名的方式將第三級目錄作為名稱命令,如:/opt/log/BigDBbook-www1
disabled=false //非關閉狀態的監控
使用CLI命令添加轉發服務器,轉發端口9998
~ sudo ./splunk add forward-server 192.168.199.205:9998
查看監控狀態,處於活動狀態:
~sudo ./splunk list forward-server
重啟服務器
~ sudo ./splunk restart
四、確認接收數據
確認數據已正確接收
驗證host字段是否正確
通過索引可以看到splunk已經接收了日志,host主機名稱也已經以日志路徑的第三級目錄名字進行命名了
sourcetype 被splunk自動識別為access_combined_wcookie
0×11 實戰- 數據分析和可視化-1
一、Apache日志中HTTP狀態碼分析
服務器響應客戶端請求的狀態碼:
200表示請求成功
4xx表示客戶端錯誤
5xx表示服務器錯誤
400-請求失敗,服務器無法識別當前客戶端請求;
401-未進行用戶驗證,當前客戶端請求需要用戶驗證;
403-禁用,服務器已理解當前請求,但拒絕執行;
404-頁面未找到;
500-內部服務器錯誤
503-服務不可用:由於服務器過載,服務器無法處理當前請求
#統計4xx和5xx事件數
index="apachedata" sourcetype="access_combined_wcookie" status > 200 | stats count by status
另存為餅狀圖,保存成一個新的儀表盤,儀表板標題我們取:Web日志分析,儀表板ID取:web_log,面板標題取:HTTP錯誤狀態碼分析。
統計4xx和5xx事件的時間趨勢圖(折線圖、面積圖、柱狀圖) ,可視化為line chart圖形
index="apachedata" sourcetype="access_combined_wcookie" status>200 | timechart count by status
200表示“成功”,其他均為“錯誤”,統計事件數量
eval命令和if函數 eval-對表達式進行計算並將結果存儲在某個字段中
if (條件,True的結果,False的結果)
index="apachedata" sourcetype="access_combined_wcookie" | eval success=if(status==200,"成功","錯誤")| timechart count by sucess
解釋:if函數判斷status狀態如果等於200則標記為成功字段,否則標記為錯誤字段,通過eval統計這些結果存儲在sucess字段中,通過sucess字段排列,顯示出成果與錯誤的數量
制作每一個主機的200、400和500事件數的對比圖
200標記為“成功”,400標記為“客戶端錯誤”,500標記為“服務器錯誤”,保存為column chart可視化圖,另存現有儀表面板
index="apachedata" sourcetype="access_combined_wcookie" | chart count(eval(status==200)) as "成功", count(eval((400500 OR status==500)) as "服務器錯誤" by host
解釋: 統計status狀態碼等於200的別名則為成功,狀態碼大於400或者等於400,並且狀態碼要小於500則為 客戶端錯誤,狀態碼大於500或者等於500的則為服務器錯誤,最后通過host字段排列
二、瀏覽器分析
.列出用戶最常用的5種瀏覽器,可視化為Pie chart圖,另存為現有儀表盤
index=apache sourcetype="access_combined_wcookie" | top useragentlimit=5
三、IP地址分析
排名前10的IP地址
index=apache sourcetype="access_combined_wcookie" | top clientiplimit=10
通過IP地址獲取地區、國家、城市等信息
iplocation: 使用3rd-party數據庫解析IP地址的位置信息
index="apachedata" sourcetype="access_combined_wcookie" | top 10 clientip|iplocation clientip
解釋:獲取前十的IP,並且對前十IP所在地區進行解析顯示
來自中國的IP有多少
where:條件查詢
index="apachedata" sourcetype="access_combined_wcookie"|iplocation clientip | where Country="China"|stats count by Country|rename Country as "國家"
四、IP地址分析
在世界地圖上顯示IP分布,使用Cluster Map可視化顯示。
geostats命令:生成將在世界地圖上呈現且群集化成地理數據箱的統計信息。
index="apachedata" sourcetype="access_combined_wcookie"|iplocation clientip | geostats count
五、IP地址分析
每台服務器的GET和POST請求的對比圖,並且另存為儀表板
index="apachedata" sourcetype="access_combined_wcookie"|timechart count(eval(method=="GET")) as "GET請求",count(eval(method=="POST")) as "POST請求" by host
最后來看看我們的儀表盤——點擊左上方儀表板——選定對應的儀表板標題,點擊打開,由於沒有進行編輯調整,看起來就沒那么好看,我們可以編輯調整,包括調整圖例。
最終直觀的儀表板
0×12 實戰- 數據分析和可視化-2
一、數據分析-了解字段含義
Action 字段:
view:瀏覽
addtocart:添加到購物車
remove:刪除
purchase:購買
changequantity:更改數量
購買:action=purchase
productId字段:后面跟着的是產品名稱
二、最暢銷的產品
最暢銷的三款產品,另存為餅狀圖
index="apachedata" sourcetype="access_combined_wcookie" "action=purchase" |top 3 productId
產品的購買趨勢圖
index="apachedata" sourcetype="access_combined_wcookie" action=purchase|timechart count(eval(action="purchase")) by productId
解釋:查看action=purchase,即購買成功的記錄,統計這個成功購買數量的記錄,並且通過productId排序顯示
改進,去除other、NULL的產品:
index="apachedata" sourcetype="access_combined_wcookie" action=purchase|timechart count(eval(action="purchase")) by productId usenull=false useother=false
三、頁面的瀏覽率與購買數量
頁面瀏覽:method=GET
購買:action=purchase
基於時間線的對比:timechart 命令
per_hour,不同於span,是一個匯總函數,用來獲取比例一致的數據
index="apachedata" sourcetype="access_combined_wcookie" | timechart per_hour(eval(method=="GET")) as "瀏覽率" per_hour(eval(action=="purchase")) as "購買數量"
四、來源最多的網站
referer 字段表示來源地址,但站內地址應該排除
使用!=不等於排除某些,使用*通配符匹配
index="apachedata" sourcetype="access_combined_wcookie" referer !=MyGizmoStore | top referer |fields - percent| rename referer as "來源網址",count as "來源數量"
五、獨立IP數
特定時間范圍內的獨立IP數
index="apachedata" sourcetype="access_combined_wcookie" | timechart span=2h dc(clientip) as "獨立IP數" by host
最后查看我們儀表板的布局
0×13 配置郵箱服務器
一、個人用戶郵箱配置
設置用戶郵箱:用戶名->編輯用戶->電子郵件地址
二、郵箱服務器配置
設置->服務器設置->電子郵件設置 ,在這里填寫你發信郵箱的主機地址、用戶名、密碼
三、驗證是否能正常發信
Web界面手工驗證
打開Splunk→儀表板→選擇某個儀表板→編輯→計划PDF交互→勾選“計划PDF”→發送郵件至“” 填寫收件人地址→發送測試電子郵件
使用sendmail(SPL語言)驗證郵件是否能正常發送
Index=_internal | sendemail to=“收件人郵箱地址" from=“發件人郵箱地址" server=“發件服務器" subjectsendresults=true sendpdf=true
測試:
index="apachedata" sourcetype="access_combined_wcookie"|stats count|sendemail to="969769906@qq.com" from="xxxxx@163.com" server="smtp.163.com" sendresults=true sendpdf=true subject="統計測試2"
0×14 創建APP
一、在Splunk Web 中創建APP
進入Splunk Web頁面→應用→管理應用。瀏覽更多的應用:瀏覽splunk APP頁面獲取更多應用。從文件安裝應用:是指的從Splunk的官方網站下載APP以本地文件形式安裝。創建應用:則是我們自行創建的應用。
新增APP至少需要填寫名稱、文件夾名稱,建議在創建APP的時候針對不同網絡設備創建不同的APP
創建的APP在左窗口有顯示
二、設置進入splunk首頁視圖、導航、顏色
選擇對應的應用→用戶界面→default,編輯XML配置,例如:將之前的儀表板如:web_log(即當時保存為儀表板時的字段)加入視圖。
注意:每個視圖的順序配置也決定splunk應用菜單上的順序
最后查看效果:
三、更新圖標
1、上傳圖標到相應APP的static目錄中(如果沒有請自行創建),如:/opt/splunk/etc/apps/tutorialdata/static
圖標名稱必須為:appIcon.png 36x36px
2、重啟splunk生效
0×15 splunk技巧
一、忘記管理員密碼怎么辦
如果忘記管理員密碼,可以重置。需要有服務器的訪問權限。
方法
1)將$SPLUNK_HOME/etc/passwd文件重命名為passwd.bak
2)重新啟動Splunk,此時登錄Splunk Web之后,所使用的密碼則為初始賬號密碼:admin changeme
二、_time時間字段的處理
格式化時間。
方法:
| eval my_time=_time | convert timeformat=“%Y-%m-%d %H:%M:%S” ctime(my_time) | rename my_time as “時間” index="apachedata" sourcetype="access_combined_wcookie"|table _time,clientip | rename _time as 時間,clientip as "用戶IP"
這種類型的搜索,所顯示的時間為時間戳,為了更好地展示給用戶看,我們可對該時間進行格式化。
index="apachedata" sourcetype="access_combined_wcookie"|eval my_time=_time|convert timeformat="%Y-%m-%d %H:%M:%S" ctime(my_time) | table my_time,clientip|rename my_time as "時間",clientip as "用戶IP"
解釋:將_time賦值給my_time,最后通過ctime進行格式化,格式為timeformat指定的格式。
三、是否可以刪除數據
我索引的部分日志事件中包含敏感信息,或日志事件有亂碼,是否可以刪除這些事件?
Splunk不允許對索引后的數據進行修改。但可以使用delete 命令刪除數據,刪除后無法檢索到這些數據,但其實這些數據並未被從磁盤上刪除。
使用delete命令需要開啟該角色的can_delete權限
1、 權限設置
打開→設置→訪問控制→角色→角色名稱:admin繼承can_delete角色。
2、測試刪除
index="apachedata" sourcetype="access_combined_wcookie" host="bigdbbook-www1"|delete
刪除bigDBbook-www1主機的日志信息,並打印出詳細的刪除信息
四、導入后的數據亂碼了,是否可以重新再導入?
導入后的數據亂碼了,是否可以重新再導入?
可以。在Splunk里,稱為“重新索引(reindex)”。
方法:
1)重新索引所有數據:
splunk clean eventdata-index 索引名稱
2)選擇性重新索引某個文件:
splunk cmdbtprobe-d $SPLUNK_HOME/var/lib/splunk/fishbucket/splunk_private_db–file $FILE –reset
最后想說,有什么錯誤請指點,謝謝!