日志分析利器Splunk的搭建、使用、破解
博主对splunk的了解不多,博主的使用目的是为了同步,分析日志。当初的搭建也是为了公司申请牌照需要日志服务器分析日志,顺便自己也对这方面感兴趣就买了本书看了看搭建玩的,后来检查来了博主也给他们演示了下,splunk到底有多强大,博主现在也玩了个大概,具体的命令使用也只算初级水平,只能说很强大,至于splunk的原理还有更多功能感兴趣就去splunk官网或是百度查查看看。
Splunk 分为免费 Free 版和企业 Enterprise 版。 SplunkFree 专供个人使用。 SplunkEnterprise 添加了支持多用户和分布式部署的功能,并包括警报、基于角色的安全、单一登录、预设的 PDF 交付以及对无限数据量的支持。 你可以使用浏览器访问 http://zh-hans.splunk.com/download 下载最新版的 Splunk .如果你是第一次访问 Splunk 网站,需要先注册一个 Splunk 用户,默认下载的是 60 天 Enterprise 试用版, 60 天试用之后将自动转化为 Free 版,转化位 Free 版后每日处理的日志量最高位 500M 。
对于传统的syslog日志同步,博主只能说它们已经out了,算不上一种高大上的方法,awk,grep,sed这些运维人员自己玩玩就好了。splunk提供日志实时同步,客户只需要在可视化web 引擎上输入关键字就可以查询,也可以保存上次查询的命令,也可以选择查询时间的范围,最主要的是可以建立每个应用的索引,不至于应用日志混乱。
下载软件包:
splunkserver软件包 http://pan.baidu.com/s/1dFLOUkx 密码:2xxy
splunkforward插件 http://pan.baidu.com/s/1sl01KfF 密码:n7op
博主的软件包是splunk-6.2.5-272645-linux-2.6-x86_64的rpm包,官网已经出6.2.7的,虽然算不上最新的,但是足够使用,感兴趣可以去官网下载。
splunk server搭建
安装server软件包:
#rpm -ivh splunk-6.2.5-272645-linux-2.6-x86_64.rpm
默认的安装路径在/opt/splunk目录下;
#cd /opt/splunkforwarder/bin
./splunk enable boot-start 生成/etc/init.d/splunk 启动脚本,以后就可以这样启动了
#netstat -antple | grep splunk
tcp 0 0 0.0.0.0:8089 0.0.0.0:* LISTEN 0 10651 1582/splunkd
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 0 11711 1582/splunkd
splunk启动两个端口8000和8089,8000为server web端口,8089位splunkforward端口,同步日志时使用。
浏览器输入:http://192.168.1.33:8000/
默认的用户密码: admin changme

添加接收数据同步的端口,首页默认的端口9997就好:

添加一个接收数据端口

添加默认的端口就好9997

#splunk server端操作
建立索引,每个索引代表一个应用的日志:

博主的splunk都是之前建好的,splunk已经在使用了,下面是一些应用日志的索引。

splunk forward的安装:
rpm -ivh splunkforwarder-6.2.5-272645-linux-2.6-x86_64.rpm
cd /opt/splunkforwarder/bin
#启动splunk
./splunk start
#自启动splunk
./splunk enable boot-start 生成/etc/init.d/splunk 启动脚本
#客户端添加转发器已经连接到接收器
./splunk add forward-server 192.168.160.98:9997 //node的ip,也就是splunk forward的ip,也就是n多个你想把日志同步到splunk server服务器的ip
#客户端查看可用splunk接收器列表
./splunk list forward-server
#客户端让转发器收集/var/log/messages日志,绝对路径。
./splunk add monitor /var/log/messages //客户端转发messages的日志到splunk server
./splunk add monitor /var/log/nginx/mfront_access.log //
查看splunk forward的配置转发文件,可以看到很多,要是命令运行完里面没有,就自己手动写下。
# pwd
/opt/splunkforwarder/etc/apps/search/local
# ls
inputs.conf
#cat inputs.conf
[monitor:///var/log/nginx/mfront_access.log] //日志的路径
index = nginx //索引为nginx
sourcetype = mfront_access //数据类型
disabled = false //同步索引的状态为开启
[monitor:///var/log/nginx/pmout_access.log]
index = nginx
sourcetype = pmout_access
disabled = false
[monitor:///var/log/nginx/pm_access.log]
index = nginx
sourcetype = pm_access
disabled = false
[monitor:///var/log/nginx/pmout_error.log]
index = nginx
sourcetype = pmout_error
disabled = false
[monitor:///var/log/messages]
index = messages
disabled = false
[monitor:///var/log/secure]
index = secure
disabled = false
重启下fowrward的服务:
# /etc/init.d/splunk restart
重启下splunk server的服务:
# /etc/init.d/splunk restart
splunk服务日志查询:nginx日志的查询

防火墙日志的查询:(火墙日志同步,只需在火墙上面syslog选项通填写splunk服务器的ip和端口就ok)

Splunk字段的提取:
(提取关键字段,做日志分析,制表等等。splunk同步过来的日志都是一段,日志分析只需要关键字,所以要提取字段)

做关键字段提取,提取完成,下一步,下一步就完成了,一次可以提取N个字段。

提取字段后的搜索,比如火墙挡住的源ip,目的ip,类型等等,(table制表,reip,sourceip...是我提取字段的命名)

Splunk破解:
前面提到Splunk是收费的,免费的只有500M的空间,怎么破解呢?linux软件包的破解无非就是重新安装,但是里面的索引怎么办,不可能天天重新装吧,可以想办法卸载时把索引过滤掉,下面是我这块的脚本,感兴趣的看下:
这个脚本是破解脚本:(里面的路径可以自己改改,索引也是一样)
cat splunk.sh //这个脚本是自己写的,官网可是没有的
#!/bin/bash
#/opt/splunk/bin/splunk start --accept-license
#/opt/splunk/bin/splunk enable boot-start
echo $(date "+%F %T")
warns=$(/opt/splunk/bin/splunk list licenser-messages -auth admin:changeme |grep license_window -A4|grep WARN|wc -l)
#上句中 admin:changeme 改成你的用户密码
if [ $warns -gt 3 ];then
installflag=1
/opt/splunk/bin/splunk stop
rpm -e splunk-6.2.5-272645
ls /opt/splunk/ |egrep -v "etc|var" |xargs rm -rf
cd /opt/splunk/var/lib/splunk/
rm -rf `ls /opt/splunk/var/lib/splunk/|grep -vE "access|java|tomcat"`
#上一句中access|java|tomcat 修改为你自己建的索引名称
rpm -ivh /opt/sh/splunk-6.2.5-272645-linux-2.6-x86_64.rpm
expect <<EOF
spawn /opt/splunk/bin/splunk start
expect ""
send "q\r"
expect ""
send "y\r"
expect ""
send "y\r"
expect eof
EOF
/opt/splunk/bin/splunk enable boot-start
/opt/splunk/bin/splunk start
echo current warns $warns overload
echo "Reinstall is successful!"
else
echo current warns $warns, or password is wrong!
fi
python /opt/sh/check_status.py
splunk关闭服务,开启服务,重装服务的检查脚本。
cat check_status.py
#!/usr/bin/python
#coding=utf-8
from email import Utils
from email.MIMEText import MIMEText
import smtplib
import socket
def mail(sender, subject, body):
to_list = ['lixiaobo-jt@haowu.com', '215687833@qq.com','merm@jfpal.com'']
mail_host = "smtp.exmail.qq.com"
mail_user = "215687833@qq.com"
mail_pass = "xxxxxxxxxxxxxxxxxxx"
me = "splunk" + "<" + mail_user + ">"
#msg = MIMEText(body.decode('utf8').encode('gb2312'), 'html', 'gb2312')
msg = MIMEText(body)
#msg['Subject'] = subject.decode('utf8').encode('gb2312')
msg['Subject'] = subject
msg['From'] = me
msg['To'] = ";".join(to_list)
msg['Date'] = Utils.formatdate(localtime=1)
try:
s = smtplib.SMTP()
s.connect(mail_host)
s.login(mail_user, mail_pass)
s.sendmail(me, to_list, msg.as_string())
s.close()
return True
except Exception, e:
print str(e)
return False
def check_server(address, port):
s = socket.socket()
print "Attempting to connect to %s on port %s" %(address, port)
try:
s.connect((address, port))
print "Connected to %s on port %s" % (address, port)
return True
except socket.error, e:
print "Connection to %s on port %s failed: %s" % (address, port, e)
return False
if __name__ == '__main__':
if check_server('127.0.0.1', 9997):
print "9997 up"
else:
mess = "9997 down"
mail(sender="", subject=mess, body=mess)
if check_server('127.0.0.1', 8000):
print "8000 up"
else:
mess = "8000 down"
mail(sender="", subject=mess, body=mess)
将脚本写到计划任务内,每天晚上或者周末运行就ok了,到此splunk就玩完了,有问题可以找我一块玩
日志分析利器Splunk的搭建、使用、破解的更多相关文章
- 日志分析与splunk浅谈
难易程度:★★★ 阅读点:linux;python;web安全;日志分析; 文章作者:xiaoye 文章来源:i春秋 关键字:网络渗透技术 前言 linux下的日志分析对企业来说非常重要,对我们分析p ...
- ELK搭建实时日志分析平台之一ElasticSearch搭建
文:铁乐与猫 系统:CentOS Linux release 7.3.1611 (Core) 注:我这里为测试和实验方便,ELK整套都装在同一台服务器环境中了,生产环境的话,可以分开搭建在不同的服务器 ...
- nginx日志分析利器GoAccess
面试的时候一定会被面到的问题是:给出web服务器的访问日志,请写一个脚本来统计访问前10的IP有哪些?访问前10的请求有哪些?当你领略过goaccess之后,你就明白,这些问题,除了考验你的脚本背诵记 ...
- nginx日志分析利器GoAccess(转)
面试的时候一定会被面到的问题是:给出web服务器的访问日志,请写一个脚本来统计访问前10的IP有哪些?访问前10的请求有哪些?当你领略过goaccess之后,你就明白,这些问题,除了考验你的脚本背诵记 ...
- 海量可视化日志分析平台之ELK搭建
ELK是什么? E=ElasticSearch ,一款基于的Lucene的分布式搜索引擎,我们熟悉的github,就是由ElastiSearch提供的搜索,据传已经有10TB+的数据量. L=LogS ...
- 大数据时代日志分析平台ELK的搭建
A,首先说说ELK是啥, ELK是ElasticSearch . Logstash 和 Kiabana 三个开源工具组成.Logstash是数据源,ElasticSearch是分析数据的,Kiaba ...
- Mysql慢查询和慢查询日志分析利器–mysqlsla
1.安装mysqlsla Source code wget http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz tar zvxf mysqlsl ...
- 日志分析利器elk与logback(log4j)实战
https://blog.csdn.net/puhaiyang/article/details/69664891
- 跑健壮性Monkey,出现一次Crash全过程-日志分析-Dotest董浩
最近带着学生做的某个项目,跑健壮性Monkey,出现一次Crash全过程-日志分析: 准备:搭建adb环境.安装实际测试包:开始: Monkey命令: adb shell monkey -p com. ...
随机推荐
- Codeforces Global Round 5
传送门 A. Balanced Rating Changes 签到,分正负搞一下就行. B. Balanced Tunnel 题意: 给出\(n\)辆车的进洞顺序和出洞顺序,问有多少量车实现了洞中超车 ...
- 利用 ROW_NUMBER() OVER ( ORDER BY 进行选择性排序,按不同字段进行排序处理,分页
--就在OVER order by 中用case语句进行判断. IF ( OBJECT_ID('tempdb..#TempTable') IS NOT NULL ) DROP TABLE #TempT ...
- POJ3974Palindrome(Manacher)
传送门 题目大意:求最长回文串 题解:Manacher 代码: #include<cstdio> #include<cstring> #include<iostream& ...
- django执行源生的mysql语句
执行源生sql在python中我们可以借助pymysql模块来进行执行源生sql关于pymysql执行源生sql可以看我的另外一篇博文:pymysql应用 本篇博客只介绍django中执行的源生sql ...
- 【zibbix自定义监控】zabbix服务自定义监控mysql的状态信息
由于mysql我安装在zabbix_server服务的主机上,所以下面操作在zabbix服务主机上进行,注意服务主机已经安装了监控服务 实现步骤: 1.修改 zabbix_agentd.conf,添加 ...
- Java设计模式:Flyweight(享元)模式
概念定义 享元(Flyweight)模式运用共享技术高效地支持大量细粒度对象的复用. 当系统中存在大量相似或相同的对象时,有可能会造成内存溢出等问题.享元模式尝试重用现有的同类对象,如果未找到匹配的对 ...
- netty ByteBuf与String相互转换
String转为ByteBuf 1)使用String.getBytes(Charset),将String转为byte[]类型 2)使用Unpooled.wrappedBuffer(byte[]),将b ...
- 在IDEA中用Maven打包大项目时失败问题
今天在完成公司里某项功能开发时,准备用Maven打包,后来在打包的过程中报错:OutOfMemoryError.如下图: 后来经过查找资料,发现可以配置一下Maven的参数即可解决此问题. 配置参数为 ...
- Elasticsearch 6.x版本全文检索学习之Search API
Elasticsearch 6.x版本全文检索学习之Search API. 1).Search API,实现对es中存储的数据进行查询分析,endpoind为_search,如下所示. 方式一.GET ...
- JS实现根据两点位置的经纬度获取距离
// 经纬度转换成三角函数中度分表形式. function rad(d) { return d * Math.PI / 180.0; } // 根据经纬度计算距离,参数分别为第一点的纬度,经度:第二点 ...