博主對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的,雖然算不上最新的,可是足夠使用,感興趣能夠去官網下載。html
splunk server搭建
安裝server軟件包:java
#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 changmenode
添加接收數據同步的端口,首頁默認的端口9997就好:python
添加一個接收數據端口linux
添加默認的端口就好9997nginx
#splunk server端操做
創建索引,每一個索引表明一個應用的日誌:web
博主的splunk都是以前建好的,splunk已經在使用了,下面是一些應用日誌的索引。瀏覽器
splunk forward的安裝:
rpm -ivh splunkforwarder-6.2.5-272645-linux-2.6-x86_64.rpmtomcat
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就玩完了,有問題能夠找我一塊玩
原地址 http://blog.51cto.com/215687833/1762344