一、简介
ELK+Filebeat 5.5.x

二、安装配置
    1、软件清单
        jdk 1.8.0_144
        elasticsearch/logstash/kibana/filebeat    5.5.2
        
        说明:
            (1)jdk
                ①logstash安装时需要检测系统java运行环境,以此安装正确的启动方法。同时要求1.8版本以上Java,不支持Java 9。
                ②建议使用Oracle版本,而不是操作系统自带的OpenJDK。
                        -检查预载的jdk信息    rpm -qa|grep jdk
                        -卸载     yum -y remove java-1.7.0-openjdk-1.7.0.131-2.6.9.0.el6_8.i686
                        -配置java运行环境    编辑/etc/profile,新增如下内容
                            export JAVA_HOME=/usr/java/jdk1.8.0_144
                            export PATH=$JAVA_HOME/bin:$PATH
                            export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
                        -使配置生效    source /etc/profile
                        -检查配置    echo $PATH
            (2)为了减少版本选择的困扰,从5.0版本开始,ELK升级为ElasticStack,并将各个产品的版本进行统一。每一次升级,所有产品的版本信息都会同时更新。

    2、下载与安装
        (1)根据服务器情况以及安装方式选择相应的安装包,由于这里演示的是最简单的安装方式,我们直接选择LINUX 32/64-BIT(kibana/filebeat)和TAR.GZ(elasticsearch/logstash)。
        官网下载:https://www.elastic.co/cn/products   
        (2)出于安全考虑,elasticsearch默认不允许以root身份启动,可以通过修改配置实现。这里建议为elk创建用户组与用户。
                    -添加用户组    group elasticstack
                    -添加用户    useradd -g elasticstack elasticstack
                    -添加用户密码    passwd elasticstack
        (3)使用elasticstack登陆,上传安装包,解压elk到服务器指定位置
                    -解压    tar -xzf elasticsearch-5.5.2.tar.gz   

    3、配置
            elk的各个配置文件使用yaml语言编写,位于相应软件的config目录下,elasticsearch.yml/logstash.yml/kibana.yml。
        (1)elasticsearch
                ①将elasticsearch.yml的network.host设为安装elasticsearch的服务器ip,不能使用localhost/127.0.0.1/0.0.0.0。如:network.host: 10.0.7.227。
                ②启动(加参数d,可以后台运行)
                    ./bin/elasticsearch
                ③检查
                    浏览器访问elasticsearch服务器,默认端口为9200。如:http://10.0.7.227:9200/ 。即可以查看es信息。
                
                注意:
                    ①开放服务器相应端口。
                    ②需要增大elasticstack用户能打开的文件数量至65536以上。切换root用户,修改/etc/security/limits.conf,添加以下内容,保存退出文件后,退出服务器重新登陆即可生效。
                        elasticstack soft nofile 65536
                        elasticstack hard nofile 131072                                                
                    ③需要增大一个进程可以拥有的虚拟内存区域的数量。切换root用户,修改/etc/sysctl.conf,添加以下内容,并使用sysctl -p使配置生效。
                        vm.max_map_count=655360
                    ④这种“开箱即用”的方式,默认的数据与日志文件存放在应用目录下,在升级或卸载时将会带来安全隐患。通过修改配置文件的path.data与path.logs项即可。
                        elasticsearch默认数据与日志文件位置:
                            ./elasticsearch-5.5.2/data/
                            ./elasticsearch-5.5.2/logs/
                        修改配置:
                            path.data: /home/elasticsearch/elk/data/elasticsearch/
                            path.logs: /home/elasticsearch/elk/log/elasticsearch/
                    ⑤elasticsearch head是一款通过界面管理elasticsearch索引等信息的插件,可以在chrome应用店下载也可以在github上得到更多的安装方式。

        (2)logstash
                logstash.yml完成有关工作线程、队列等等配置,以此提高资源的利用率,我们使用默认即可,更详细的配置信息可以参阅官方文档。logstash在elasticstack中完成的主要工作是将收集的日志进行过滤与整理,再传递给elasticsearch。其运行依赖“管道”文件。
ELK+Filebeat 5.5.x
                
                ①在config目录中创建一个文件,用于定义我们的输入输出与过滤规则。以我编写的first-pipeline.conf做简要说明:
                    #input定义数据来源
                    input {
                        #beats插件为官方提供的用于接收filebeat/packetbeat/winlogbeat等beats产品传送的数据
                        #这里我们只需监听logstash默认端口即可
                        beats { port => 5044 }
                    }
                   
                    #定义过滤规则,logstash将会从日志取得符合规则的信息,并整理成单个字段,以方便我们在kibana检索数据
                    filter {
                        #使用grok表达式灵活定义,更多插件请参阅官方文档
                        grok{
                            #指定自定义表达式文件位置
                            patterns_dir => ["/usr/local/logstash-5.5.2/config/patterns"]
                            #用message字段进行规则匹配
                            match => {
                                "message" => "%{LOG:LEVEL}\^\^%{LOG:TIMESTAMP}\^\^%{LOG:REQUEST_ID}\^\^%{LOG:IP}\^\^%{LOG:REQUEST_URL}\^\^%{LOG:USERID}\^\^%{LOG:REQUEST_PARAM}\^\^%{LOG:OPERATION}\^\^%{LOG:OBJECT}\^\^%{LOG:OLD_VALUE}\^\^%{LOG:NEW_VALUE}\^\^%{LOG:DESCRIPTION}\^\^%{LOG:RESULT}\^\^%{LOG:JAVACLASS}"
                            }
                        }
                    }

                    #将处理之后的日志输出至elasticsearch
                    output {    
                        elasticsearch { hosts => ["10.0.7.227:9200"] 
                    }
                ②运行
                    ./logstash-5.5.1/bin/logstash -f ./logstash-5.5.1/config/first-pipeline.conf
                    常见运行参数:
                         -f    指定配置文件
                         -e    指定配置字符串
                         -l     指定日志输出地址
                         -t     测试配置文件是否正确
                ③检查
                    使用ps -ef|grep logstash命令检查进程是否启动,或修改运行命令为./logstash -e 'input { stdin { } } output { stdout {} }',logstash将从标准输入接收数据,并返回至标准输出,也就是将屏幕上将返回你键入的数据。

        (3)kibana
                ①修改kibana.yml
                    server.host: "10.0.7.227"
                    elasticsearch.url: "http://10.0.7.227:9200";
                ②运行
                    ./bin/kibana
                ③检查
                    浏览器访问 http://10.0.7.227:5601

       (4)filebeat
                filebeat负责业务日志收集,解压安装在业务服务器上
                ①修改filebeat.yml,指定监听的日志文件并设置输出至logstash
                    filebeat.prospectors:
                        - input_type: log
                           paths:
                                - /data/usr/tomcat/logs/log.*
                    output.logstash:
                        hosts: ["10.0.7.227:5044"]
                ②运行
                    ./filebeat -e -c filebeat.yml
                ③检查
                    浏览器访问10.0.7.227:5601,进入kibana,创建logstash-*索引,即可在Discover页查看到所有日志

三、参阅资料
    1、elasticstack官方文档    https://www.elastic.co/guide/index.html
    2、elasticsearch中文指南    https://kibana.logstash.es/content/
    3、elasticsearch中文社区    https://elasticsearch.cn/
    4、grok debugger    https://grokdebug.herokuapp.com/

相关文章: