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

一、 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平台


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342