ELK7.8日志分析平台部署实践

ELK介绍

         Elasticsearch是一款开源的分布式搜索引擎,提供搜集、分析、存储数据。

         特点:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源等

         Logstash:作用于日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。

         基于c/s架构,Client端(FileBeat)部署在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作再发往elasticsearch。

         Kibana 实现数据可视化。在 Elastic Stack 中进行导航,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好Web 界面,汇总、分析和搜索重要数据日志。

         Beats:收集、解析和传输数据等常用beat有:Filebeat,Packetbeat,Metricbeat,Auditbeat,Winlogbeat 此次我们将用Filebeat做Client端

         注: Beats 和 Logstash 之间支持 SSL/TLS 加密传输,客户端和服务器双向认证,保证了通信安全

         ELK整体架构图:

ELK7.8日志分析平台部署实践_第1张图片

一、 ELK部署环境准备

      1、 服务器环境准备

            10.0.60.191 elk-master                 部署Role:Logstash, ES, Kibana

            10.0.60.192 Elasticsearch-n1        部署Role:Elasticsearch

            10.0.60.193 Elasticsearch-n2        部署Role:Elasticsearch

            10.0.60.195 ELK-Client                  部署Role:Filebeat

       2、 安装JDK

            Elasticsearch、Logstash的部署都需要JDK环境的支持,分别在10.0.60.191-193上进行安装部署在oracle官方下载8版本以上的JDK版本

            这里选择JDK14

官方下载地址:

https://download.oracle.com/otn-pub/java/jdk/14.0.2+12/205943a0976c4ed48cb16f1043c5c647/jdk-14.0.2_linux-x64_bin.tar.gz


     tar -zxvf jdk-14.0.2_linux-x64_bin.tar.gz -C /usr/local/ 

     #解压完毕后将JDK路径增加到环境变量中

     vim /etc/profile #文件定位到PATH处新增一行进行增加环境变量

     export JAVA_HOME=/usr/jdk-14.0.2/

     export JRE_HOME=$JAVA_HOME/jre

     export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

     export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

 3、 部署ELK之前需对操作系统调优设置否则会提示报错

     #修改 limits.conf文件

     vi /etc/security/limits.conf

     #增加以下内容

     * soft nofile 65536

     * hard nofile 65536

     * soft nproc  4096

     * hard nproc  8192

     #修改系统文件20-nproc.conf

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

    优化以下参数配置:  

      *          soft    nproc     4096

      root       soft    nproc     unlimited

      #调整内核参数

      vi /etc/sysctl.conf

      vm.max_map_count=262144  #限制一个进程可以拥有的VMA数量

      fs.file-max=655360       #系统中可以同时打开的文件数目

      #调整完毕需要重新加载内核参数

     sysctl -p

4、配置hosts记录主机名解析工作(三台主机都需要添加)

      vi /etc/hosts

      10.0.60.191 elk-master                

     10.0.60.192 Elasticsearch-n1        

     10.0.60.193 Elasticsearch-n2

5、关闭linux firewall、Selinux

      sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

      setenforce 0

      systemctl stop firewalld

      systemctl disable firewalld

6、创建普通用户用于启动elk使用这里我们就以elk为用户名进行创建

      useradd elk   #默认会创建同步用户组

7、 创建ELK安装目录:

      mkdir /usr/local/elk

      chown -R elk:elk /usr/local/elk

  8、通过elastic官网下载elk所需安装包

                   下载完毕后解压至/usr/local/elk下

      #master

      wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.8.0-linux-x86_64.tar.gz

      wget https://artifacts.elastic.co/downloads/logstash/logstash-7.8.0.tar.gz

      wget https://artifacts.elastic.co/downloads/kibana/kibana-7.8.0-linux-x86_64.tar.gz

      tar -zxvf elasticsearch-7.8.0-linux-x86_64.tar.gz -C /usr/local/elk && \

      tar -zxvf logstash-7.8.0.tar.gz  -C /usr/local/elk && \

      tar -zxvf kibana-7.8.0-linux-x86_64.tar.gz -C /usr/local/elk

      #将elasticsearch-7.8.0-linux-x86_64.tar.gz利用scp复制到其他两台node上

二、部署Elasticsearch集群

   2.1、 切换到刚创建的elk用户环境下配置elasticsearch

       su - elk

   2.2、创建Elasticsearch数据目录、日志目录

       mkdir /usr/local/elk/elasticsearch-7.8.0/data   #此操作需在三台服务器操作

       mkdir /usr/local/elk/elasticsearch-7.8.0/logs   #此操作需在三台服务器操作

   2.3、编辑ES-Master节点配置文件

       vi /usr/local/elk/elasticsearch-7.8.0/config/elasticsearch.yml

         # ES集群名称

         cluster.name: escluster

         # ES节点名称

         node.name: elk-master

         # 存放数据目录

         path.data: /usr/local/elk/elasticsearch-7.8.0/data

         # 存放日志目录

         path.logs: /usr/local/elk/elasticsearch-7.8.0/logs

         # 节点IP

         network.host: 10.0.60.191

         # tcp端口

         transport.tcp.port: 9300

         # http端口

         http.port: 9200

         # ES节点列表,Master节点IP须在seed_hosts中

         discovery.seed_hosts: ["10.0.60.191:9300","10.0.60.192:9300","10.0.60.193:9300"]

         # Master节点列表,若有多个Master节点,则Master节点进行配置

         cluster.initial_master_nodes: ["10.0.60.191:9300"]


         # 是否允许作为Master节点

         node.master: true

         # 是否保存数据

         node.data: true

         node.ingest: false

         node.ml: false

         cluster.remote.connect: false


         # 是否开启跨域功能

         http.cors.enabled: true

         http.cors.allow-origin: "*"

    2.4、编辑ES-Node01节点配置文件:

      vi /usr/local/elk/elasticsearch-7.8.0/config/elasticsearch.yml

         # ES集群名称

         cluster.name: escluster

         # ES节点名称

         node.name: elasticsearch-n1

         # 存放数据目录

         path.data: /usr/local/elk/elasticsearch-7.8.0/data

         # 存放日志目录

         path.logs: /usr/local/elk/elasticsearch-7.8.0/logs

         # 节点IP

         network.host: 10.0.60.192

         # tcp端口

         transport.tcp.port: 9300

         # http端口

         http.port: 9200

         # ES节点列表,Master节点IP须在seed_hosts中

         discovery.seed_hosts: ["10.0.60.191:9300","10.0.60.192:9300","10.0.60.193:9300"]

         # Master节点列表,若有多个Master节点,则Master节点进行配置

         cluster.initial_master_nodes: ["10.0.60.191:9300"]


         # 是否允许作为Master节点

         node.master: false

         # 是否保存数据

         node.data: true

         node.ingest: false

         node.ml: false

         cluster.remote.connect: false


         # 是否开启跨域功能

         http.cors.enabled: true

         http.cors.allow-origin: "*"

  2.5、编辑ES-Node02节点配置文件:

      vi /usr/local/elk/elasticsearch-7.8.0/config/elasticsearch.yml

         # ES集群名称

         cluster.name: escluster

         # ES节点名称

         node.name: elasticsearch-n2

         # 存放数据目录

         path.data: /usr/local/elk/elasticsearch-7.8.0/data

         # 存放日志目录

         path.logs: /usr/local/elk/elasticsearch-7.8.0/logs

         # 节点IP

         network.host: 10.0.60.193

         # tcp端口

         transport.tcp.port: 9300

         # http端口

         http.port: 9200

         # ES节点列表,Master节点IP须在seed_hosts中

         discovery.seed_hosts: ["10.0.60.191:9300","10.0.60.192:9300","10.0.60.193:9300"]

         # Master节点列表,若有多个Master节点,则Master节点进行配置

         cluster.initial_master_nodes: ["10.0.60.191:9300"]


         # 是否允许作为Master节点

         node.master: false

         # 是否保存数据

         node.data: true

         node.ingest: false

         node.ml: false

         cluster.remote.connect: false


         # 是否开启跨域功能

         http.cors.enabled: true

         http.cors.allow-origin: "*"

    2.6、 配置完之后开始启动ES

       /usr/local/elk/elasticsearch-7.8.0/bin/elasticsearch -d

    2.7、 启动ES后利用curl检查启动情况也是通常部署时常用的检查方法

      [root@elk-master ~]# curl -X GET 'http://10.0.60.191:9200/_cluster/health?pretty'

        {

          "cluster_name" : "escluster",

          "status" : "green",

          "timed_out" : false,

          "number_of_nodes" : 3,

          "number_of_data_nodes" : 3,

          "active_primary_shards" : 12,

          "active_shards" : 24,

          "relocating_shards" : 0,

          "initializing_shards" : 0,

          "unassigned_shards" : 0,

          "delayed_unassigned_shards" : 0,

          "number_of_pending_tasks" : 0,

          "number_of_in_flight_fetch" : 0,

          "task_max_waiting_in_queue_millis" : 0,

          "active_shards_percent_as_number" : 100.0

          }

          #状态值:Green代表服务正常

三、安装kibana

          3.1 修改Kibana配置文件

    cd /usr/local/elk/kibana-7.8.0-linux-x86_64/config

     vim kibana.yml

     # 指定kibana端口

     server.port: 5601

     # 监听地址

     server.host: "10.0.60.191"

     # 指定ES集群的Master服务器ip地址。

     elasticsearch.hosts: "http://10.0.60.191:9200/"

     # 指定kibana存放日志文件路径

     logging.dest:/home/app/elk/kibana-7.8.0-linux-x86_64/logs/kibana.log

          3.2、启动kibana

      nohup /usr/local/elk/kibana-7.8.0-linux-x86_64/bin/kibana &  #启动过程中可通过tail -f nohup.out启动是否存在报错日志

四、 安装filebeat

        在10.0.60.195上面已经安装了nginx服务并运行,后面我们利用filebeat采集nginx请求日志

        4.1、官网下载filebeat:

    wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.8.0-linux-x86_64.tar.gz

    tar -zxvf filebeat-7.8.0-linux-x86_64.tar.gz -C /usr/local

        4.2、配置filebeat.yml

 vim /usr/local/filebeat-7.8.0/filebeat.yml

 #=========================== Filebeat inputs =============================

 filebeat.inputs:

 - type: log

   paths:

    - /usr/local/nginx/logs/access.log

   fields:

    log_source: nginx-access

 - type: log

   paths:

    - /usr/local/nginx/logs/error.log

   fields:

    log_source: nginx-error

 #============================== Dashboards =====================================

 setup.dashboards.enabled: false

 #============================== Kibana =====================================

 #添加到libana

 setup.kibana:

   host: "10.0.60.191:5601"

 #----------------------------- Logstash output --------------------------------

 output.logstash:

   # The Logstash hosts

   hosts: ["10.0.60.191:5044"]

     4.3、 启动filebeat

  cd /usr/local/filebeat-7.8.0/ && nohup ./filebeat -c filebeat.yml &

五、 安装logstash角色:-------Master

    5.1、创建logstash.conf文件

 vim /usr/local/elk/logstash-7.8.0/config/logstash.conf

 input {

   beats {

     port => 5044   #指定端口5044,filebeat配置中一致

   }

 }

 filter {

   if [fields][log_source]=="nginx-access"{

     grok {

       match => {

         "message" => '%{IP:clientip}\s*%{DATA}\s*%{DATA}\s*\[%{HTTPDATE:requesttime}\]\s*"%{WORD:requesttype}.*?"\s*%{NUMBER:status:int}\s*%{NUMBER:bytes_read:int}\s*"%{DATA:requesturl}"\s*%{QS:ua}'

      }

       overwrite => ["message"]

     }

   }

   if [fields][log_source]=="nginx-error"{

     grok {

       match => {

         "message" => '(?

       }

       overwrite => ["message"]

     }

   }

 }

 output {

   if [fields][log_source]=="nginx-access"{

     elasticsearch {

       hosts => ["http://10.0.60.191:9200"]

       action => "index"

       index => "nginx-access-%{+YYYY.MM.dd}"

    }

   }

   if [fields][log_source]=="nginx-error"{

     elasticsearch {

       hosts => ["http://10.0.60.191:9200"]

       action => "index"

       index => "nginx-error-%{+YYYY.MM.dd}"

    }

   }

   stdout { codec => rubydebug }

 }

 #这里我们自定义Index,elk中logstash-*是为elk自带索引可以试用一下

     5.2、 启动logstash

nohup /usr/local/elk/logstash-7.8.0/bin/logstash -f /usr/local/elk/logstash-7.8.0/config/logstash.conf &

     到目前为止elk环境已经部署完毕,接下来验证一次

六、登录Kibana平台


ELK7.8日志分析平台部署实践_第2张图片
ELK7.8日志分析平台部署实践_第3张图片
ELK7.8日志分析平台部署实践_第4张图片

你可能感兴趣的:(ELK7.8日志分析平台部署实践)