暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ELK(Elasticsearch+Logstash+kibana)安装详解

蓝亚之舟 2021-07-22
1601

1、前提准备

1.1 在线安装 jdk

1.1.1 是否安装 jdk

Elasticsearch 的运行需要 jdk 环境,但是在 elasticsearch7 以上的版本中会自带 jdk(安装包由几十兆变成了几百兆就是这个原因),并且 elasticsearch7 以上的版本需要 jdk11 版本,平时使用的 jdk8 并不满足:

    future versions of Elasticsearch will require Java 11; your Java version from [d:\Program Files\java\jdk1.8.0_91\jre] does not meet this requirement

    1.1.2 安装 jdk

    因为可以 ping 通www.baidu.com,表明当前是联网状态,直接在线安装jdk,不过尝试之后已经不推荐了,下载速度太慢了,直接本地下载然后上传再安装比较好。

    第一步:查看 yum 库中 jdk 的版本

      yum search java|grep jdk

      可以看到共有 1.6,1.7,1.8 和 11 四个版本,要使用版本 11,我之前使用的是 1.8 版本,然后提示版本不符(当然,不会报错,应该是警告)

      第二步:选择 java-11.0 安装

        yum install java-11.0-openjdk*

        第三步:配置环境变量

          vi etc/profile

          这里 jdk1.8.0 的文件夹路径是/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64

          添加内容如下:

            #set java environment
            JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64
            JRE_HOME=$JAVA_HOME/jre
            CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
            PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
            export JAVA_HOME JRE_HOME CLASS_PATH PATH

            注意:上面的 JAVA_HOME 对应的版本名称可能不一样,最后自己对应路径找一下更改一下。

            第四步:环境变量生效

              source etc/profile

              第五步:查看 jdk 是否安装成功

                java -version


                1.2 本地下载 ELK

                如果 linux 联网可以直接通过命令下载 ELK 软件,但是大多数情况都是离线状态,并且即便是联网状态下载速度也很慢,远不如在本地下载好安装包,然后上传到服务器中。

                ELK 三个软件安装包(linux64 位,7.8.1 版本)已经上传百度云,百度云链接:https://pan.baidu.com/s/1K4M0eBFwGsiiv3q3y-yaDQ 提取码:bfp9

                有需要的自行下载。

                2、安装 Elasticsearch

                2.1 简单介绍

                Elasticsearch 是一个分布式的免费开源搜索和分析引擎,适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据。Elasticsearch 在 Apache Lucene 的基础上开发而成,由 Elasticsearch N.V.(即现在的 Elastic)于 2010 年首次发布。Elasticsearch 以其简单的 REST 风格 API、分布式特性、速度和可扩展性而闻名,是 Elastic Stack 的核心组件;Elastic Stack 是一套适用于数据采集、扩充、存储、分析和可视化的免费开源工具。人们通常将 Elastic Stack 称为 ELK Stack(代指 Elasticsearch、Logstash 和 Kibana),目前 Elastic Stack 包括一系列丰富的轻量型数据采集代理,这些代理统称为 Beats,可用来向 Elasticsearch 发送数据。

                更多介绍,可以参考:

                • Elasticsearch 官网

                • github 项目地址

                • 中文论坛

                2.2 第一步:上传并解压缩

                上传安装包到/opt 目录下,到该目录下执行:

                  tar -zxvf elasticsearch-7.2.0-linux-86_64.tar.gz

                  解压缩完,对目录重命名:

                    mv elasticsearch-7.2.0 elasticsearch

                    2.3 第二步:配置系统参数

                    修改系统参数的目的是确保系统有足够的资源启动 Elasticsearch。

                    (a)设置内核参数

                      vi etc/sysctl.conf

                      增加以下参数

                        vm.max_map_count=655360

                        执行以下命令,确保参数生效:

                          sysctl -p

                          (b)设置资源参数

                            vi etc/security/limits.conf

                            在末尾增加如下

                              * soft nofile 65536
                              * hard nofile 131072
                              * soft nproc 65536
                              * hard nproc 131072

                              (c)设置用户资源参数

                                vi etc/security/limits.d/20-nproc.conf

                                添加如下:

                                  # 设置elk用户参数
                                  elk soft nproc 65536

                                  2.4 第三步:增加新用户

                                  因为 Elasticsearch 不允许使用 root 作为程序启动用户,所以要新增加一个系统用户,否则报错:

                                    #创建组elk


                                    groupadd elk
                                    # 创建用户es, 属于es用户组, 密码为123456
                                    useradd elk -g elk -p 123456




                                    # 创建数据和日志目录,为下一步做准备


                                    mkdir -pv opt/elk/{data,logs}


                                    # 修改文件所有者
                                    chown -R elk:elk opt/elk/
                                    chown -R elk:elk opt/elasticsearch/

                                    删除用户名:

                                      userdel  -r  用户名

                                      2.5 第四步:Elasticsearch 配置

                                      修改 Elasticsearch 的配置文件/opt/elasticsearch/elasticsearch.yml。配置如下:

                                      注意:配置参数时,冒号后面要有一个空格

                                      2.6 第五步:关闭防火墙

                                      远程登录需要关闭防火墙,这个可选,不需要可不用关闭。

                                        # 关闭防火墙
                                        systemctl stop firewalld


                                        # 关闭防火墙开机自启动
                                        systemctl disable firewalld

                                        2.7 第六步:运行 Elasticsearch

                                        运行命令:

                                          # 显示执行
                                          ./opt/elasticsearch/bin/elasticsearch


                                          # 后台执行
                                          ./opt/elasticsearch/bin/elasticsearch -d

                                          如果安装路径不一致,需要更改一下。

                                          验证是否执行成功:

                                            [root@localhost ~]# curl 'http://localhost:9200/?pretty'
                                            {
                                            "name" : "O5BAVYE",
                                            "cluster_name" : "elasticsearch",
                                            "cluster_uuid" : "rw1yjlzkSgODXkUVgIxmxg",
                                            "version" : {
                                            "number" : "6.4.1",
                                            "build_flavor" : "default",
                                            "build_type" : "tar",
                                            "build_hash" : "e36acdb",
                                            "build_date" : "2018-09-13T22:18:07.696808Z",
                                            "build_snapshot" : false,
                                            "lucene_version" : "7.4.0",
                                            "minimum_wire_compatibility_version" : "5.6.0",
                                            "minimum_index_compatibility_version" : "5.0.0"
                                            },
                                            "tagline" : "You Know, for Search"
                                            }
                                            [root@localhost ~]#

                                            返回成功,则说明运行成功了。

                                            2.8 第七步:查看进程

                                            通过名称来查询 Elasticsearch 是查询不到的,因为 Elasticsearch 是运行在 java 中,需要使用端口号来查询:

                                              netstat -tunlp|grep 9200


                                              也可以通过如下进行查询:

                                                ps aux|grep elasticsearch

                                                2.9 第八步:开机自启动

                                                (a)先查看当前的开机启动服务

                                                  chkconfig --list


                                                  会列出当前系统的开机服务。

                                                  (b)创建 es 的系统启动服务文件

                                                  进入到 cd etc/init.d 目录,执行:

                                                    cd /etc/init.d      # 进入到目录
                                                    vi elasticsearch    # 创建es系统启动服务文件

                                                    (c)编写启动脚本

                                                      #!/bin/bash
                                                      #chkconfig: 345 63 37
                                                      #description: elasticsearch
                                                      #processname: elasticsearch-5.4.0


                                                      export ES_HOME=/opt/elasticsearch #这个目录是你Es所在文件夹的目录


                                                      case $1 in
                                                      start)
                                                      su elk<<! #es 这个是启动es的账户,如果你的不是这个记得调整
                                                      cd $ES_HOME
                                                      ./bin/elasticsearch -d -p pid
                                                      exit
                                                      !
                                                      echo "elasticsearch is started"
                                                      ;;
                                                      stop)
                                                      pid=`cat $ES_HOME/pid`
                                                      kill -9 $pid
                                                      echo "elasticsearch is stopped"
                                                      ;;
                                                      restart)
                                                      pid=`cat $ES_HOME/pid`
                                                      kill -9 $pid
                                                      echo "elasticsearch is stopped"
                                                      sleep 1
                                                      su elk<<! #es 这个是启动es的账户,如果你的不是这个记得调整
                                                      cd $ES_HOME
                                                      ./bin/elasticsearch -d -p pid
                                                      exit
                                                      !
                                                      echo "elasticsearch is started"
                                                      ;;
                                                      *)
                                                      echo "start|stop|restart"
                                                      ;;
                                                      esac
                                                      exit 0

                                                      (d)修改文件权限

                                                        chmod 777 elasticsearch

                                                        (e)添加和删除服务并设置启动方式

                                                          chkconfig --add elasticsearch    //添加系统服务
                                                          chkconfig --del elasticsearch    //删除系统服务

                                                          上面只需要执行添加系统服务即可,如果不想使用该服务再执行删除操作,两者并不是顺序执行。

                                                          (f)关闭和启动服务

                                                            service elasticsearch start     【启动】
                                                            service elasticsearch stop      【停止】
                                                            service elasticsearch restart   【重启】

                                                            (g)设置服务是否开机启动

                                                              chkconfig elasticsearch on      【开启】
                                                              chkconfig elasticsearch off     【关闭】

                                                              2.10 遇到问题

                                                                ERROR: [2] bootstrap checks failed
                                                                [1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
                                                                [2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

                                                                解决方案可以参考:ELK 搭建过程中出现的问题与解决方法汇总(https://www.cnblogs.com/hellxz/p/11057234.html)

                                                                3、安装 kibana

                                                                3.1 简单介绍

                                                                Kibana 是一个开源的分析与可视化平台,设计出来用于和 Elasticsearch 一起使用的。你可以用 kibana 搜索、查看存放在 Elasticsearch 中的数据。Kibana 与 Elasticsearch 的交互方式是各种不同的图表、表格、地图等,直观的展示数据,从而达到高级的数据分析与可视化的目的。

                                                                直白来说,就是一个可视化工具,某种程度上类似于 Navicat。

                                                                更多内容可以参考:https://www.elastic.co/cn/kibana

                                                                3.2 第一步:上传解压

                                                                依然是上传压缩包到/opt 路径下,然后解压缩:

                                                                  //解压缩
                                                                  tar -zxvf kibana-7.8.1-linux-x86_64.tar.gz


                                                                  //重命名
                                                                  mv kibana-7.8.1 kibana

                                                                  3.3 第二步:修改配置文件

                                                                  修改 配置 config 目录下的 kibana.yml 文件,配置 elasticsearch 地址和 kibana 地址信息:

                                                                    server.host: "192.168.92.50"  # kibana 服务器地址
                                                                    elasticsearch.url: "http://192.168.92.50:9200" # ES 地址

                                                                    想要 kibana 界面转换中文,需要在 yml 文件中添加(最后一行本身有,只是注释了):

                                                                      i18n.locale: "zh-CN"

                                                                      3.4 第三步:启动

                                                                      启动 kibana,打开/kibana/bin,运行命令:

                                                                        ./kibana   //显示启动


                                                                        nohup opt/kibana/bin/kibana & //后台启动

                                                                        启动后在浏览器打开:http://127.0.0.1:5601,如果不是本地安装,则更改一下ip即可。

                                                                        3.5 第四步:查看进程

                                                                        通过 ps -e|grep kibana 命令是无法查看的,需要通过进程号或者搜索名称如下:

                                                                          # 通过进程号查询
                                                                          netstat -tunlp|grep 5601


                                                                          # 通过名称搜索
                                                                          ps -aux | grep kibana

                                                                          4、安装 logstash

                                                                          4.1 简单介绍

                                                                          Logstash 是一个具有实时管道的开源数据收集引擎。可以动态地统一不同来源的数据,并将数据归到不同目的地。也是一个管理事件和日志工具。你可以用它来收集日志,分析它们,并将它们储存起来以供以后使用。

                                                                          Logstash 通常都是和 Kibana 以及 Elasticsearch 一起使用,但是在 ELK 中,Logstash 不是必须安装的。

                                                                          4.2 第一步:上传解压

                                                                          依然是上传压缩包到/opt 路径下,然后解压缩:

                                                                            //解压缩
                                                                            tar -zxvf logstash-7.8.1.tar.gz


                                                                            //重命名
                                                                            mv logstash-7.8.1 logstash

                                                                            4.3 第二步:修改配置

                                                                            logstash 最关键的就在于配置上,打开/opt/logstash/config/目录,然后根据自己的需求创建一个配置文件。

                                                                            比如,我的需求是利用 logstash 读取一个.json 文件,然后将其内容发送给 Elasticsearch,那么我要创建一个配置文件:logstash.conf(名称随意)

                                                                            文件内容如下:

                                                                              #读取json文件
                                                                              input {
                                                                              file {
                                                                              #设置json文件路径,多个文件路径可设置成数组[],模糊匹配用*
                                                                              #指定单一文件
                                                                              path => "/opt/suricataFile/eve.json"
                                                                              #指定数组文件
                                                                              #path => ["/data/es/jsonstash-5.6.1/files/test-1.json","/data/es/jsonstash-5.6.1/files/test-2.json"]
                                                                              #指定同级目录模糊匹配
                                                                              #path => "/data/es/jsonstash-5.6.1/files/test*.json"
                                                                              #指定多级目录模糊匹配
                                                                              #path => "/data/es/jsonstash-5.6.1/files/**/test*.json"


                                                                              start_position => "beginning"


                                                                              #设置编码
                                                                              codec => json {charset => "UTF-8"}


                                                                              #当存在多个文件的时候可使用type指定输入输出路径
                                                                              type => "json_index"


                                                                              # 删除之前发送过的数据,每次从头解析读取
                                                                              sincedb_path => "/dev/null"
                                                                              }
                                                                              }


                                                                              #2.过滤格式化数据阶段
                                                                              filter {


                                                                              mutate{
                                                                              #删除无效的字段
                                                                              remove_field => ["@version","message","host","path"]
                                                                              }


                                                                              #新增timestamp字段,将@timestamp时间增加8小时
                                                                              ruby { code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60)" }


                                                                              }


                                                                              #3.数据输出到ES阶段
                                                                              output {


                                                                              #日志输出格式,json_lines;rubydebug等
                                                                              stdout {
                                                                              codec => rubydebug
                                                                              }


                                                                              # 输出到es
                                                                              if[type] == "json_index"{


                                                                              #无法解析的json不记录到elasticsearch中
                                                                              if "_jsonparsefailure" not in [tags] {
                                                                              elasticsearch {
                                                                              #es地址ip端口
                                                                              hosts => "127.0.0.1:9200"
                                                                              #索引
                                                                              index => "json_index"
                                                                              #类型
                                                                              document_type => "json_index"


                                                                              #覆盖模板,不需要可注释掉,通用模板下载:https://download.csdn.net/download/alan_liuyue/11241484
                                                                              #template_overwrite=>true
                                                                              #template=>"/data/es/logstash-5.6.1/template/logstash.json"


                                                                              }
                                                                              }
                                                                              }


                                                                              }

                                                                              配置文件主要内容是:读取"/opt/suricataFile/eve.json"文件内容,然后经过过滤后,发送给 Elasticsearch 的索引 json_index,如果没有索引,则要创建该索引。

                                                                              上面的注释介绍的很详细,具体不再多说。

                                                                              4.4 第三步:启动 logstash

                                                                              运行命令如下:

                                                                                /opt/logstash/bin/logstash -f /opt/logstash/config/logstash.conf

                                                                                运行命令中要指定配置文件(第二步中创建的)。

                                                                                4.5 遇到问题

                                                                                4.5.1 卡在:Successfully started Logstash API endpoint {:port=>9600}

                                                                                如上图所示,就是卡在这里了,我一开始以为这是成功了,但是去查询索引,没有任何增加和导入,不知道是哪里的问题,各种更改配置文件。

                                                                                最后参考下面两个博客解决问题:

                                                                                • logstash 导入数据到 Elasticsearch 踩过的坑详解(https://blog.csdn.net/LJFPHP/article/details/89340807)

                                                                                • 配置 sincedb_path 让 logstash 每次都从头读取文件(https://www.4spaces.org/sincedb-path-logstash/)

                                                                                出现该问题的原因是一开始 logstash 读取 eve.json 文件时,全部读取完了,但是并没有发送(可能出现了某个 bug,暂时不知道),这时生成了一个 sincedb 文件,以后每次读取 eve.json 文件都是从最后开始读取,导致读取不出来。

                                                                                需要增加 sincedb_path => "/dev/null",这是第一个博客获得的信息,但是并没有说增加在哪里?

                                                                                第二个博客上知道了在哪里增加,于是顺利解决问题。

                                                                                4.5.2 配置文件中需不需要写用户和密码

                                                                                在解决第一个问题的时候,看了很多 logstash 的配置文件,发现有一部分博客中提到要在配置文件中写明 Elasticsearch 所在主机的用户名和密码。

                                                                                但是,最后解决上面后,重新在 root 用户运行(配置文件中并没有写用户和密码),发现依然可以运行,说明并不需要

                                                                                文章转载自蓝亚之舟,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                                                                评论