zoukankan      html  css  js  c++  java
  • 日志分析利器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

    wKiom1cKA2nCaueeAABj29Lzkwk765.png


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

    wKiom1cKA7eyaMmxAABa9TC9reY379.png

    添加一个接收数据端口

    wKiom1cKA9uQaFUSAAAZ8OJyMC0674.png

    添加默认的端口就好9997

    wKiom1cKBB3x-KJGAAAsHYuFQ3A619.png


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

    wKiom1cKBGvAfD09AABF1a3QpAc866.png 

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

    wKiom1cKBKiym0jQAACCGpDloBU614.png

    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日志的查询

    wKiom1cKBtqh3P3BAAD0rTfzn74714.png

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

    wKioL1cKCM6yjSZ7AADeffklXRI010.png

    Splunk字段的提取:

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

    wKiom1cKCsixa59MAADOvt-oFuQ763.png

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

    wKioL1cKC_GwU1SUAABpTJXDVYE138.png

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

    wKioL1cKDL6i2CKHAAEOoTQSTcI799.png

    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 "
    expect ""
    send "y "
    expect ""
    send "y "
    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就玩完了,有问题可以找我一块玩

  • 相关阅读:
    Proj THUDBFuzz Paper Reading: PMFuzz: Test Case Generation for Persistent Memory Programs
    入围 WF 后训练记
    算法竞赛历程
    2021 多校 杭电 第十场
    2021 多校 杭电 第九场
    2021 多校 牛客 第十场
    2021 多校 牛客 第九场
    2021 多校 杭电 第八场
    2021 多校 杭电 第六场
    2021 多校 杭电 第七场
  • 原文地址:https://www.cnblogs.com/wsy0202/p/11510500.html
Copyright © 2011-2022 走看看