美国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命令。占用资源小)
面向机器数据的全文搜索引擎;
(使用搜索引擎的方式处理数据;支持海量级数据处理)
准实时的日志处理平台;
基于时间序列的索引器;
大数据分析平台;
一体化的平台:数据采集->存储->分析->可视化;
通用的搜索引擎,不限数据源,不限数据格式;
提供荣获专利的专用搜索语言SPL(Search Processing Language),语法上类似SQL语言
Splunk Apps 提供更多功能
(针对操作系统、思科网络设备,splunk都提供了专用的APP,接入数据源都可以看到直观的仪盘表。)
机器数据是指:设备和软件产生的日志数据、性能数据、网络数据包。这些数据都是一些非结构化的数据,我们可以统一将这些数据统一采集到splunk之后,splunk可以对这些数据进行索引、调查、监控、可视化等。
索引器:索引器是用于为数据创建索引的Splunk Enterprise 实例。索引器将原始数据转换为事件并将事件存储至索引(Index)中。索引器还搜索索引数据,以响应搜索请求。
搜索头:在分布式搜索环境中,搜索头是处理搜索管理功能、指引搜索请求至一组搜索节点,然后将结果合并返回至用户的Splunk Enterprise 实例。如果该实例仅搜索不索引,通常被称为专用搜索头。
搜索节点:在分布式搜索环境中,搜索节点是建立索引并完成源自搜索头搜索请求的Splunk Enterprise实例。
转发器:转发器是将数据转发至另一个Splunk Enterprise 实例(索引器或另一个转发器)或至第三方系统的Splunk Enterprise 实例。
接收器:接收器是经配置从转发器接收数据的Splunk Enterprise 实例。接收器为索引器或另一个转发器。
应用:应用是配置、知识对象和客户设计的视图和仪表板的集合,扩展Splunk Enterprise 环境以适应Unix 或Windows 系统管理员、网络安全专家、网站经理、业务分析师等组织团队的特定需求。单个Splunk Enterprise 安装可以同时运行多个应用。
如上图所示:
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 版本。
配置一致的时间
建议搭建企业内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目录下)
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 disable boot-start //关闭自启动
./splunk stop //停止splunk
./rm–rf/opt/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
#搭建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
依照上方的讲解的停止splunkd。
通过Windows控制面板的卸载程序卸载。
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的端口冲突。
设置->服务器设置->常规设置
默认是服务器主机名
也可通过命令行修改
./splunk set servername 服务器名称 //修改Splunk服务器名称
修改需要重启Splunk
Splunkd端口号:8089
Splunk Web端口号:8000
可在Splunk Web 中修改,也可通过CLI命令修改
./splunk set splunkd-port 8090 //设置管理端口
./splunk set web-port 8001 //设置WEB端口
配置后需要重启Splunk
设置源自该服务器的事件的默认host值 #即设置日志所来自的源主机的名称进行标记。
可在Web界面修改
进入Splunk WEB页面→设置→服务器设置→常规设置→索引设置→默认主机名:
或者通过Splunk CLI修改:
#./splunk set default-hostname 新的host名称
配置后需要重启服务器
在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 //可查看所有索引以及索引的目录
索引:被检索的数据存储在索引(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销售。
转发器许可证,针对重量和轻量级许可证,通用转发器不需要。
使用情况报表,可以查看当前许可证使用的情况报表
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/目录,引用的第三方的库文件存储位置。
Default 目录是Splunk自带的目录
系统优先读取用户自定义local目录下的配置文件,然后才会读取default目录下的
自定义的配置都要放在local 目录下
千万不要直接修改default目录下的文件
升级时default目录会被覆盖,local目录则不会
启动:splunk start
关闭:splunk stop
重启:splunk restart
查看状态:splunk status
查看版本:splunk version
查看端口:
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 web-port // 查看splunk web的端口
./splunk show splunkd-port // 查看splunkd的端口
./splunk show default-hostname // 查看默认的主机名称
./splunk show servername // 查看显示splunk服务器名称
./splunk show datastore-dir // 查看索引存储的目录
在命令行执行搜索命令:
./splunk search ‘index=_audit| head 5′ //查看_audit索引前5条数据
#案例:(通过案例学习命令)
我们这里将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常用命令列表
splunk help commands //列出更多的常用命令
splunk help index //列出索引的相关命令
splunk help monitor //列出监控相关的命令
splunk help show //列出信息显示的命令
splunk help forward-server //列出转发服务器的命令
splunk help set //列出设置相关命令
确定数据存储在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配置文件中。
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” 来统计日志的数量:
创建名为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
#:通配符*代表后面任意
我们在在右上角 “另存为——>报表”,输入标题则可保存为报表。如果你后期想修改,可在“编辑——>在搜索中打开——>修改搜索语句——>保存” 重新保存之后即可。
还可以使用统计数量之后,可视化的形式进行查看、另存为:仪表板面板、报表、告警等等
管道运算符(|),将管道左边搜索产生的结果作为右边的输入 head, 返回前n 个(离现在时间最近的)结果 tail, 返回后n 个(离现在时间最后的)结果,如
index="tutorialdata" sourcetype="access_common" select | head 2
index="tutorialdata" sourcetype="access_common" select | tail 2
通过 SPL语言搜索、过滤的结果也可以保存为仪盘表,(此处我还做了单值型的可视化)。如下图:
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个,升序排序)
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升序)
对满足条件的事件进行统计
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)
[未去除重复列出括号中的内容]
在用于制作图表的表格输出中返回结果。
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)
[根据第一次的结果求出平均值]
使用相应的统计信息创建时间系列图表
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一次分隔统计]
子搜索包含在方括号[]中
注:以下字段中含义: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计划交付”来定时通过邮箱将报表发送给指定用户。
三个主机的Apache 访问日志,Splunk可以自动识别该类型
位于/opt/log目录下
日志文件来自三台服务器,因此需要区分三台服务器
预览数据:
/opt/log/BigDBbook-www1
/opt/log/BigDBbook-www2/opt/log/BigDBbook-www3
创建新索引apachedata
./splunk add index apachedata
新增接收端口9998
./splunk enable listen 9998
修改配置文件添加监控项
~ 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
admin/changeme
重启服务器
~ sudo ./splunk restart
确认数据已正确接收
验证host字段是否正确
通过索引可以看到splunk已经接收了日志,host主机名称也已经以日志路径的第三级目录名字进行命名了
sourcetype 被splunk自动识别为access_combined_wcookie
服务器响应客户端请求的状态码:
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
排名前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分布,使用Cluster Map可视化显示。
geostats命令:生成将在世界地图上呈现且群集化成地理数据箱的统计信息。
index="apachedata" sourcetype="access_combined_wcookie"|iplocation clientip | geostats count
每台服务器的GET和POST请求的对比图,并且另存为仪表板
index="apachedata" sourcetype="access_combined_wcookie"|timechart count(eval(method=="GET")) as "GET请求",count(eval(method=="POST")) as "POST请求" by host
最后来看看我们的仪表盘——点击左上方仪表板——选定对应的仪表板标题,点击打开,由于没有进行编辑调整,看起来就没那么好看,我们可以编辑调整,包括调整图例。
最终直观的仪表板
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数
index="apachedata" sourcetype="access_combined_wcookie" | timechart span=2h dc(clientip) as "独立IP数" by host
最后查看我们仪表板的布局
设置用户邮箱:用户名->编辑用户->电子邮件地址
设置->服务器设置->电子邮件设置 ,在这里填写你发信邮箱的主机地址、用户名、密码
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="[email protected]" from="[email protected]" server="smtp.163.com" sendresults=true sendpdf=true subject="统计测试2"
进入Splunk Web页面→应用→管理应用。浏览更多的应用:浏览splunk APP页面获取更多应用。从文件安装应用:是指的从Splunk的官方网站下载APP以本地文件形式安装。创建应用:则是我们自行创建的应用。
新增APP至少需要填写名称、文件夹名称,建议在创建APP的时候针对不同网络设备创建不同的APP
创建的APP在左窗口有显示
选择对应的应用→用户界面→default,编辑XML配置,例如:将之前的仪表板如:web_log(即当时保存为仪表板时的字段)加入视图。
注意:每个视图的顺序配置也决定splunk应用菜单上的顺序
最后查看效果:
1、上传图标到相应APP的static目录中(如果没有请自行创建),如:/opt/splunk/etc/apps/tutorialdata/static
图标名称必须为:appIcon.png 36x36px
2、重启splunk生效
如果忘记管理员密码,可以重置。需要有服务器的访问权限。
方法
1)将$SPLUNK_HOME/etc/passwd文件重命名为passwd.bak
2)重新启动Splunk,此时登录Splunk Web之后,所使用的密码则为初始账号密码:admin changeme
格式化时间。
方法:
| 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
/opt/splunkforwarder/etc/apps/search/local