大数据时代的全能日志分析专家
--Splunk安装与实践
( 此文已刊发在《网络运维与管理》杂志 )
0.背 景
随着大家对网络安全意识的提高,企业网管理人员,必须对IT基础设置进行监控及安全事件的管理,管理数据的数量和种类非常巨大,那么就需要有一款能否分析各种日志数据的工具,经过长期实践,为大家推荐Splunk这么一款全能型分析工具。
1.Splunk简介
Splunk是一款功能强大的、记录详细的日志分析软件,Splunk是基于原始日志数据(Raw data)内容建立索引,保存索引的同时也保存原始日志内容,在大数据时代,种类繁多的日志如何能快速分析找到你需要的内容呢,你需要一个更加方便智能的工具,那就是Splunk。它能处理常规的日志格式,比如Apache、Squid、系统日志、邮件日志等这些对所有日志先进行索引,然后可以交叉查询,支持复杂的查询语句,最后通过直观的方式表现出来。它与其他开源日志分析工具不同的是,操作界面支持全中文,而且对于中文版操作系统的日志收集非常不错,目前它的商业版本价格的确不便宜(国内天旦、精诚华厦微科都在代理这款产品,商务可联系他们)。下面我们先看看怎么安装和基本使用吧。
2.Splunk安装
首先到官方http://www.splunk.com/download注册一个账号下载对应的操作系统版本(截止目前最新版本为6.1.3),安装时记住关闭SELinux功能,另外注意一点,如果要通过WMI的方式来搜集Windows(中文版)日志的话,那么Splunk建议装在Windows操作系统(须4GB以上可用空间)上。如果收集的日志主要是各种网络设备及Linux系统日志建议装在类Unix系统上。下面以Redhat Linux系统安装Splunk为例讲解安装过程,启动过程如图1所示。
(1).安装软件包
#rpm –ivhsplunk-4.1.7.95063-linux-2.6-x86_64.rpm
Splunk安装路径在/opt/splunk,这个路径各种UNIX/Linux系统都一样。
(2).关闭Selinux
#setenforce 0
(3).启动splunk,命令如下:
#/opt/splunk/bin/splunk start
(4).浏览Splunk Web接口,在浏览器中输入以下地址:
http://localhost.localdomain:8000
图1 Linux下安装Splunk
用netstat命令检查8000端口是否处于监听状态。
#netstat -ant
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8089 0.0.0.0:* LISTEN
我们看到以上信息输出即可通过网址访问。
3.设置自动运行
1).设置开机自动启动
#ln -s /usr/local/splunk/bin/splunk/etc/rc2.d/S80splunk
2).设置到服务里面
#ln -s /usr/local/splunk/bin/splunk/etc/init.d/splunk
4.系统配置
下面我们通过配置来收集客户端的日志。
1)通过Syslog收集Cisco网络设备的日志
在Cisco网络设备上的配置命令一般为:
logging <syslog server IP Address>
logging trap <severity>
Splunk默认使用UDP 514端口来监听syslog消息。例如:
logging 192.168.122.1
logging trap warning
2)通过Syslog收集Linux主机的日志
在Linux主机上的配置一般为修改/etc/syslog.conf配置,添加以下两行:
# Send syslog to Splunk server
*.<severity> @<syslog server IPAddress>
如:
# Send syslog to Splunk server
*.debug @192.168.122.1
3)通过WMI来收集Windows主机的日志
首先要确保运行Splunk服务(在服务管理器中显示为Splunkd)的帐号有权限读取远程Windows机器的WMI信息。在《Unix/Linux日志分析和流量监控》一书中的第14章中还会讲到利用WMI收集Windows日志。
然后,在Splunk服务器上做一下简单的配置。Splunk的安装路径默认为C:\Program Files\Splunk。在C:\Program Files\Splunk\etc\system\local文件下修改inputs.conf文件,添加以下内容:
[script://$SPLUNK_HOME\bin\scripts\splunk-wmi.py]
interval = 10
source = wmi
sourcetype = wmi
disabled = 0
接着,在同一目录中新建一个文本文件,命名为wmi.conf,并添加以下内容:
[WMI:<Name>]
server = <Remote Windows Host IPAddress>
interval = 60
event_log_file = <Event log Type>
disabled = 0
比如监控IP地址为192.168.122.10的Windows主机上Application和System的Event Log:
[WMI:AppAndSys]
server = 192.168.122.1
interval = 60
event_log_file = Application, System
disabled = 0
其实还可以通过Syslog来收集Windows的日志,这里可以用一个免费工具NTSyslog(下载)。
5.设置日志分析目录
当首次进入Web界面后,需要重设密码并添加数据。进入系统可以将默认语言选择为中文,开始导入数据,如图2所示。
图2 导入数据
选择数据源(从本地),接着选“从文件和目录”,选择/var/log即可。如图3所示。从图中我们也可以看出Splunk默认支持的日志种类很多,包含大多数运维人员平时工作中所需要分析的日志类型。
图3 选择本地数据源
点击应用菜单下方的search即可看到生成的日志报告(比如cron日志,mail日志。当然也可以把我们所需要记录的日志比如php错误日志等都输出到/var/log目录下,对其进行分析)。
6 .Splunk搜索的使用
系统中的搜索工具栏是Splunk最强大的工具,为了学习Splunk,我们先在http://www.splunk.com/base/images/Tutorial/Sampledata.zip下载一个演示文件。我们学习如何添加数据,首先向Splunk添加示例数据方法如下:
在Splunk首页中点击右上角的Home按钮,再选择添加数据,选择服务器本地文件,当你选择正确系统提示:“Use auto-detected source type:access_combined_wcookie”最后保存配置,当系统提示索引建立后就可以查看日志。
图4 开始搜索
我们看看仪表盘的内容,读者应该已经熟悉搜索栏及时间范围选择,摘要仪表板上也有这些内容。但搜索仪表板上还包含其他内容,比如事件记录、时间轴、字段菜单及检索到的事件列表或搜索结果。
1).匹配及扫描事件记录:在搜索中,Splunk在检索时将显示两组事件记录:一组为匹配事件记录,另一组为已扫描事件记录。搜索完成后,时间轴上方的记录显示的是匹配事件的总数。时间轴下方事件列表上方的记录显示用户所选时间范围内的时间数目。稍后可以看到,当向下分析事件时,此数目会发生变化。
2).事件的时间轴:时间轴能直观的显示出每一时刻发生的事件。当时间轴随着搜索结果不断更新时,可能会注意到有条状图案。每一条状图案的高度表示时间记录。时间轴的峰值和谷值可表示活动高峰期或服务器停机。此时,时间轴可有效用于强调时间模式或调查各事件活动的高峰期和低谷期。时间轴选项位于时间轴上方。还可以放大或缩小图表。
3).字段菜单:前面说过将数据编入索引时,Splunk可自动按名称和值的格式识别并生成数据信息,我们把这称作是字段。当您进行搜索时,Splunk将把其从字段菜单上识别的所有字段列在搜索结果旁边。您可以选择其他字段来显示您搜索的事件。所选字段都已被设置为搜索结果可见格式。将默认显示主机、源及源类型。其它字段是Splunk从您的搜索结果中抽取的。
4).事件查看器:事件查看器将显示Splunk搜索到的与您的搜索匹配的事件。事件查看器位于时间轴下方。事件默认显示为列表,您也可以选用表格查看。选择按表格形式查看事件时,表格只显示已选字段。
7.Splunk搜索实例解析
我们先构造一个场景,假如有人投诉网站,说在提交表单时总是提示有某个IP地址错误, 10.2.1.44,这时我们该如何利用搜索功能来查找问题呢?
我们可以输入如下内容:sourcetype=access_combined_wcookie10.2.1.44
当然,如果你不知道数据源,那么你也可以直接输入IP地址,这样匹配的条目会非常多,如果能精确找到数据源就很容易找到问题。
图5 使用搜索功能
access_combined_wcookie代表数据源,要根据你提交的日志而定。注意,当您在搜索栏中输入的同时,将弹出Splunk“搜索助手”这个很重要,可以帮助你解决搜索中的很多问题。就如同MS Office中的帮助一样好用。为了缩小范围我们做如下操作,我们还应该在搜索栏中键入purchase:
sourcetype=access_combined_wcookie10.2.1.44 purchase
图6 缩小搜索范围
请看左上角搜到的日志从109降到83条。注意,搜索关键词时,不用区分大小写。
8.使用布尔运算符查找日志
Apache服务器日志中发现大部分事件的状态码为“200”,它代表“成功”。现在有人投诉网站出现了问题,那么就要找出不是200的日志。我们使用布尔运算方法。
图7 使用布尔运算符查找
这时匹配条数骤减到31条。这时发现了HTTP服务器(503)错误,用这个方法可以快速排除无关事件。使用布尔运算符可进行搜索的信息更多,Splunk支持的布尔运算符有与、或和非所以第四步的搜索和下述语句相同:
sourcetype=access_* AND 10.2.1.44 ANDpurchase NOT 200
当搜索中含有布尔表达式时,运算符须全部大写。使用括号将有关表达式组合起来,以便进行更复杂的搜索。计算布尔表达式时,Splunk将从最里面的括号开始运算,接着运算括号外面的下一个值对。当括号内的所有运算符都运行完成,Splunk将先计算或子句,然后计算和或者非子句。
9.使用时间轴功能
现在您已经确认存在问题类型,现在您想找到导致问题的原因。从发现顾客无法购买的那次搜索开始,继续进行下面的步骤。时间轴上的各柱状体,代表搜索的匹配事件发生的时间。滑动鼠标,选中其中一个柱状体,将弹出工具提示,并显示时间数目和该柱距的原始时间戳,1个柱状体=1分钟,这个单位根据你的选择而动态变化,这样您的搜索将仅限于您所选定的1小时内所发生的事件,如图8所示。
图8 使用时间轴
Splunk支持使用星号(*)通配符来搜索“所有”或根据关键词的部分进行模糊检索事件。该搜索可告诉Splunk希望看到在这段时间内发生的所有事件。
时间轴的其他功能:
- 点击选择上述的所有时间轴,可再次显示所有时间;
- 点击放大,可锁定与您的搜索匹配的选定事件范围;
- 点击缩小,可扩展时间轴,看到更多事件;
10.故障定位方面的应用
Splunk能通过搜索出日志中的重要关键字来挖掘出网络设备日志中最有价值的信息。搜索关键字“up OR down”查看日志中存在接口连接情况,splunk将信息转换成时间分布图,使我们更快捷地查看当天或者过去几天设备接口连接状态。
搜索关键字“duplicate”,发现有少量存在IP地址冲突的地址,其中地址冲突所发生的时间以及冲突的源主机MAC地址都可以一目了然;搜索关键字“SYNflood”,可在防火墙日志中查找SYN攻击事件;搜索关键字“power”可快速查找重要设备是否会出现“poweroff”的情况。
搜索关键字“deny”可查找核心交换机上丢弃数据包的具体情况,根据这些情况可以统计一些经常出现的被丢弃数据包源头。输入EventCode=6005 or EventCode=6006查询可以掌握机器的开关机情况,主要是提取6006的事件和6005的事件信息系统,思路是在windows 中打开eventvwr.msc(事件查看器)程序打开事件查看器,在左侧窗口中选择“系统”,从右侧系统事件中查找事件ID为6005、6006的事件(事件ID号为6005的事件表示事件日志服务已启动,即开机事件ID:6006表示关机),它们对应的时间就分别是开机时间和关机时间。
注意:Windows事件ID含义详情请点击这里
11.看视频学用Splunk分析日志
最后轻松一下,大家打开这个链接(前提是你的浏览器支持flash)观看Splunk视频指南: http://www.tudou.com/programs/view/7iXM5WfXpDg/
技巧:
在试用版的Splunk中有500MB日志的限制(个人还无法突破限制),如果你直接将主机架设在生产环境,很快就到达上限,也许你一着急,就把他卸载了,从而错失真么一款优秀的工具,建议开始测试时,找几个典型测试设备在实验室进行功能测试,经过自评价后,有必要在联系商务人员,他们可以免费为您企业进行安装调试。