安全路透社
当前位置:安全路透社 > 网络转载 > 正文

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可以对这些数据进行索引、调查、监控、可视化等。

01.png

五、Splunk组件

索引器:索引器是用于为数据创建索引的Splunk Enterprise 实例。索引器将原始数据转换为事件并将事件存储至索引(Index)中。索引器还搜索索引数据,以响应搜索请求。

搜索头:在分布式搜索环境中,搜索头是处理搜索管理功能、指引搜索请求至一组搜索节点,然后将结果合并返回至用户的Splunk Enterprise 实例。如果该实例仅搜索不索引,通常被称为专用搜索头。

搜索节点:在分布式搜索环境中,搜索节点是建立索引并完成源自搜索头搜索请求的Splunk Enterprise实例。

转发器:转发器是将数据转发至另一个Splunk Enterprise 实例(索引器或另一个转发器)或至第三方系统的Splunk Enterprise 实例。

接收器:接收器是经配置从转发器接收数据的Splunk Enterprise 实例。接收器为索引器或另一个转发器。

应用:应用是配置、知识对象和客户设计的视图和仪表板的集合,扩展Splunk Enterprise 环境以适应Unix 或Windows 系统管理员、网络安全专家、网站经理、业务分析师等组织团队的特定需求。单个Splunk Enterprise 安装可以同时运行多个应用。

六、Splunk分布式架构

02.png 

如上图所示: 

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 版本。

八、多种应用场景

03.png

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的压缩包。

wget -c https://download.splunk.com/products/splunk/releases/6.5.1/linux/splunk-6.5.1-f74036626f0c-Linux-x86_64.tgz ;

2)、解压缩:#tar -zxvf splunk-6.5.1-f74036626f0c-Linux-x86_64.tgz -C /opt (默认我们解压到/opt目录下)

04.png

3)、splunk的可执行程序都放在/opt/splunk/bin/下,启动该程序应执行splunk,splunk命令参数如下:

#注意:以下命令我们称之为CLI命令,如下:通用转发器和splunk命令都可以如下执行

./splunk

start      //启动splunk

--accept-license  //自动接收许可

restart   //重启splunk

status    //查看splunk状态

version   //查看splunk版

开始启动的时候记得记住加上–accept-license,这样更便于我们安装。

Image

4)、splunk安装之后开启Splunk Web端口8000。Splunkd端口8089端为管理端口。 安装之后我们可以在浏览器中访问splunk 8000端口的WEB界面。

06.png

注意:如果外部计算机无法访问它。需要关闭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 地址变为:

https://192.168.199.205:8000

图片

五、修改默认索引位置

默认索引目录为:/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 //可查看所有索引以及索引的目录

30.png

六、创建索引

索引:被检索的数据存储在索引(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

17.png

通过 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" | top clientip|fields clientip count |rename clientip as “攻击源” |rename count as "攻击次数" (删除最后一个percent百分比字段) 或者:

#source="tutorialdata.zip:*" index="tutorialdata" | top clientip|fields - percent |rename clientip as “攻击源” |rename count as "攻击次数" | fields

图片

可以保存为饼状图的仪表盘

图片

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) 

[未去除重复列出括号中的内容]

20161216152721.png

三、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

1.png

重启服务器

~ 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字段排列

58.png

61.png

二、浏览器分析

.列出用户最常用的5种浏览器,可视化为Pie chart图,另存为现有仪表盘

index=apache sourcetype="access_combined_wcookie" | top useragentlimit=5

60.png 图片

三、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应用菜单上的顺序

图片

最后查看效果:

87.png

三、更新图标

1、上传图标到相应APP的static目录中(如果没有请自行创建),如:/opt/splunk/etc/apps/tutorialdata/static

图标名称必须为:appIcon.png 36x36px

2.png

2、重启splunk生效

3.png

0×15 splunk技巧

一、忘记管理员密码怎么办

如果忘记管理员密码,可以重置。需要有服务器的访问权限。

方法

1)将$SPLUNK_HOME/etc/passwd文件重命名为passwd.bak

4.png

2)重新启动Splunk,此时登录Splunk Web之后,所使用的密码则为初始账号密码:admin changeme

5.png

二、_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"

这种类型的搜索,所显示的时间为时间戳,为了更好地展示给用户看,我们可对该时间进行格式化。

6.png

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指定的格式。

7.png

三、是否可以删除数据

我索引的部分日志事件中包含敏感信息,或日志事件有乱码,是否可以删除这些事件?

Splunk不允许对索引后的数据进行修改。但可以使用delete 命令删除数据,删除后无法检索到这些数据,但其实这些数据并未被从磁盘上删除。

使用delete命令需要开启该角色的can_delete权限

1、 权限设置

打开→设置→访问控制→角色→角色名称:admin继承can_delete角色。

8.png

2、测试删除

index="apachedata" sourcetype="access_combined_wcookie" host="bigdbbook-www1"|delete

删除bigDBbook-www1主机的日志信息,并打印出详细的删除信息

9.png

四、导入后的数据乱码了,是否可以重新再导入?

导入后的数据乱码了,是否可以重新再导入?

可以。在Splunk里,称为“重新索引(reindex)”。

方法:

1)重新索引所有数据:

splunk clean eventdata-index 索引名称

2)选择性重新索引某个文件:

splunk cmdbtprobe-d $SPLUNK_HOME/var/lib/splunk/fishbucket/splunk_private_db–file $FILE –reset

最后想说,有什么错误请指点,谢谢!

* 作者:Porsche(U神),本文属FreeBuf原创奖励计划文章,未经许可禁止转载

未经允许不得转载:安全路透社 » Splunk大数据分析经验分享:从入门到夺门而逃

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册