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

举报
Jack.Tang 发表于 2020/07/26 01:41:16 2020/07/26
【摘要】 概要ELK(Elasticsearch,Logstash,Kibana)是一套实时数据收集,存储,索引,检索,统计分析及可视化的解决方案,下面简单针对ELK三大组件进行介绍:ELK介绍Elasticsearch开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。特点:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源等Logstash:主要是用来日志的搜...

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整体架构图:

                                   

一、 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" => '(?<time>.*?)\s*\[%{LOGLEVEL:loglevel}\]\s*%{DATA}:\s*%{DATA:errorinfo},\s*%{WORD}:\s*%{IP:clientip},\s*%{WORD}:%{DATA:server},\s*%{WORD}:\s*%{QS:request},\s*%{WORD}:\s*%{QS:upstream},\s*%{WORD}:\s*"%{IP:hostip}",\s*%{WORD}:\s*%{QS:referrer}'
       }
       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平台

      






【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。