zoukankan      html  css  js  c++  java
  • 日志分析利器Splunk的搭建、使用、破解

                                        日志分析利器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 "
    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就玩完了,有问题可以找我一块玩

    http://www.mamicode.com/info-detail-1273329.html
  • 相关阅读:
    学习第23天
    学习第22天
    学习第21天
    Servlet交互与JSP
    Cookie与Session
    servlet入门
    网络编程
    DOM4j
    xml文档对象模型doc
    反射
  • 原文地址:https://www.cnblogs.com/enet01/p/8387802.html
Copyright © 2011-2022 走看看