当前位置:   article > 正文

ELK日志平台分析(Elasticsearch安装配置+logstash数据采集+Kibana数据可视化+xpack安全验证)_elk日志监控平台

elk日志监控平台

1.Elasticsearch

官网:https://www.elastic.co/cn/

1.1 Elasticsearch介绍

Elasticsearch 是一个开源的分布式搜索分析引擎,建立在一个全文搜索引擎库 Apache Lucene基础之上。
Elasticsearch 不仅仅是Lucene,并且也不仅仅只是一个全文搜索引擎:
一个分布式的实时文档存储,每个字段可以被索引与搜索
一个分布式实时分析搜索引擎

能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据
基础模块:

cluster:管理集群状态,维护集群层面的配置信息。
alloction:封装了分片分配相关的功能和策略。
discovery:发现集群中的节点,以及选举主节点。
gateway:对收到master广播下来的集群状态数据的持久化存储。
indices:管理全局级的索引设置。
http:允许通过JSON over
HTTP的方式访问ES的API。
transport:用于集群内节点之间的内部通信。

engine:封装了对Lucene的操作及translog的调用。

elasticsearch应用场景:
• 信息检索
• 日志分析
• 业务数据分析
• 数据库加速
• 运维指标监控


1.2 Elasticsearch的安装与配置

可参考官网:https://www.elastic.co/guide/en/elasticsearch/reference/7.6/index.html
实验环境:给2G内存
server1:172.25.0.1
server2:172.25.0.2
server3:172.25.0.3

1.安装软件并修改配置文件

yum install -y elasticsearch-7.6.1.rpm 安装软件
vim /etc/elasticsearch/elasticsearch.yml修改配置文件

cluster.name: my-es                   #集群名称
node.name: server7                   #主机名需要解析
path.data: /var/lib/elasticsearch #数据目录
path.logs: /var/log/elasticsearch #日志目录
bootstrap.memory_lock: true     #锁定内存分配
network.host: 172.25.0.1            #主机ip
http.port: 9200                   #http服务端口
discovery.seed_hosts: ["server1"]
cluster.initial_master_nodes: ["server1"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


2.修改系统限制

vim /etc/security/limits.conf

elasticsearch    soft    memlock         unlimited
elasticsearch    hard    memlock         unlimited
elasticsearch    -       nofile          65536 ##要将elasticsearch用户的最大打开文件数设置为65535
elasticsearch    -       nproc           4096 ## 确保Elasticsearch用户可以创建的线程数至少为4096
  • 1
  • 2
  • 3

在这里插入图片描述
vim /etc/elasticsearch/jvm.options

-Xms1g ###Xmx设置不超过物理RAM的50%,以确保有足够的物理RAM留给内核文件系统缓存。但不要超过32G。
-Xmx1g
  • 1

在这里插入图片描述
swapoff -a禁用swap
vim /etc/fstab

#UUID=2a714265-f92d-4429-87da-9f09e32e6ff2 swap                    swap    defaults        0 0 ##避免开机自启

    在这里插入图片描述
    也可以:
    echo 0 >/proc/sys/vm/swappiness

    在这里插入图片描述


    3.修改systemd启动文件

    vim /usr/lib/systemd/system/elasticsearch.service

    [Service]
    LimitMEMLOCK=infinity
    • 1

    在这里插入图片描述
    systemctl daemon-reload
    systemctl start elasticsearch

    在这里插入图片描述


    4.elasticsearch插件安装

    unzip elasticsearch-head-master.zip
    在这里插入图片描述
    在这里插入图片描述
    yum install -y nodejs-9.11.2-1nodesource.x86_64.rpmhead插件本质上是一个nodejs的工程,因此需要安装node
    在这里插入图片描述
    在这里插入图片描述


    5.更换npm的yum源(要求虚拟机可上网)

    tar jxf phantomjs-2.1.1-linux-x86_64.tar.bz2
    cp phantomjs-2.1.1-linux-x86_64//bin/phantomjs /usr/local/bin
    yum install -y fontconfig-2.13.0-4.3.el7.x86_64解决依赖性
    cd elasticsearch-head-master必须在这个目录中
    npm install --registry=https://registry.npm.taobao.org更换npm的yum源

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述


    6.修改es主机ip和端口

    vim /root/elasticsearch-head-master/_site/app.js

    "http://172.25.0.1:9200";

      在这里插入图片描述


      7.启动head插件

      cd /root/elasticsearch-head-master
      npm run start &在目录中后台启动head插件

      在这里插入图片描述
      在这里插入图片描述


      8.修改ES跨域主持

      vim /etc/elasticsearch/elasticsearch.yml修改ES跨域主持

      http.cors.enabled: true # 是否支持跨域
      http.cors.allow-origin: "*"    # *表示支持所有域名
      • 1

      systemctl restart elasticsearch.service重启ES服务
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述


      9.创建索引

      在这里插入图片描述
      在这里插入图片描述


      1.3 配置Elasticsearch集群

      将server2与server3加入集群
      vim /etc/elasticsearch/elasticsearch.yml修改配置文件**

      cluster.name: my-es
      node.name: server2 ##server3写server3
      path.data: /var/lib/elasticsearch
      path.logs: /var/log/elasticsearch
      bootstrap.memory_lock: true
      network.host: 172.25.0.2 ##server3的IP写172.25.0.3
      http.port: 9200
      http.cors.enabled: true
      http.cors.allow-origin: "*"
      discovery.seed_hosts: ["server1", "server2", "server3"] ##server1中也需要改
      cluster.initial_master_nodes: ["server1", "server2", "server3"]
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10

      vim /etc/security/limits.conf

      elasticsearch    soft    memlock         unlimited
      elasticsearch    hard    memlock         unlimited
      elasticsearch    -       nofile          65536
      elasticsearch    -       nproc           4096123
      • 1
      • 2
      • 3

      vim /usr/lib/systemd/system/elasticsearch.service

      [Service]
      LimitMEMLOCK=infinity1
      systemctl daemon-reload
      • 1
      • 2

      systemctl start elasticsearch.service
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述


      1.4 Elasticsearch中的节点角色与优化

      1.Elasticsearch中的节点角色

      Master : 主要负责集群中索引的创建、删除以及数据的Rebalance等操作。Master不负责数据的索引和检索,所以负载较轻。当Master节点失联或者挂掉的时候,ES集群会自动从其他Master节点选举出一个Leader。
      Data Node: 主要负责集群中数据的索引和检索,一般压力比较大。
      Coordinating Node: 原来的Client node的,主要功能是来分发请求和合并结果的。所有节点默认就是Coordinating node,且不能关闭该属性。
      Ingest Node: 专门对索引的文档做预处理


      2.Elasticsearch节点的优化

      在生产环境下,如果不修改elasticsearch节点的角色信息,在高数据量,高并发的场景下集群容易出现脑裂等问题。
      默认情况下,elasticsearch集群中每个节点都有成为主节点的资格,也都存储数据,还可以提供查询服务。

      节点角色是由以下属性控制:
      node.master: false|true
      node.data: true|false
      node.ingest: true|false
      search.remote.connect: true|false
      默认情况下这些属性的值都是true。

      node.master:这个属性表示节点是否具有成为主节点的资格
      注意:此属性的值为true,并不意味着这个节点就是主节点。因为真正的主节点,是由多个具有主节点资格的节点进行选举产生的。
      node.data:这个属性表示节点是否存储数据。
      node.ingest: 是否对文档进行预处理。
      search.remote.connect:是否禁用跨集群查询

      第一种组合:(默认)
      node.master: true
      node.data: true
      node.ingest: true
      search.remote.connect: true
      这种组合表示这个节点即有成为主节点的资格,又存储数据。

      如果某个节点被选举成为了真正的主节点,那么他还要存储数据,这样对于这个节点的压力就比较大了。
      测试环境下这样做没问题,但实际工作中不建议这样设置。

      第二种组合:(Data node)
      node.master: false
      node.data: true
      node.ingest: false
      search.remote.connect: false
      这种组合表示这个节点没有成为主节点的资格,也就不参与选举,只会存储数据。
      这个节点称为data(数据)节点。在集群中需要单独设置几个这样的节点负责存储数据。后期提供存储和查询服务。

      第三种组合:(master node)
      node.master: true
      node.data: false
      node.ingest: false
      search.remote.connect: false
      这种组合表示这个节点不会存储数据,有成为主节点的资格,可以参与选举,有可能成为真正的主节点。
      这个节点我们称为master节点。

      第四种组合:(Coordinating Node)
      node.master: false
      node.data: false
      node.ingest: false
      search.remote.connect: false
      这种组合表示这个节点即不会成为主节点,也不会存储数据,这个节点的意义是作为一个协调节点,主要是针对海量请求的时候可以进行负载均衡。

      第五种组合:(Ingest Node)
      node.master: false
      node.data: false
      node.ingest: true
      search.remote.connect: false
      这种组合表示这个节点即不会成为主节点,也不会存储数据,这个节点的意义是ingest节点,对索引的文档做预处理。

      vim /etc/elasticsearch/elasticsearch.yml
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      生产集群中可以对这些节点的职责进行划分,建议集群中设置3台以上的节点作为master节点,这些节点只负责成为主节点,维护整个集群的状态。再根据数据量设置一批data节点,这些节点只负责存储数据,后期提供建立索引和查询索引的服务,这样的话如果用户请求比较频繁,这些节点的压力也会比较大。所以在集群中建议再设置一批协调节点,这些节点只负责处理用户请求,实现请求转发,负载均衡等功能。

      节点需求:
      master节点:普通服务器即可(CPU、内存 消耗一般)
      data节点:主要消耗磁盘、内存。
      path.data: data1,data2,data3
      这样的配置可能会导致数据写入不均匀,建议只指定一个数据路径,磁盘可以使用raid0阵列,而不需要成本高的ssd。
      Coordinating节点:对cpu、memory要求较高。


      2.logstash数据采集

      2.1 logstash介绍

      Logstash是一个开源的服务器端数据处理管道。
      logstash拥有200多个插件,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的 “存储库” 中。(大多都是Elasticsearch。)
      Logstash管道有两个必需的元素,输入和输出,以及一个可选元素过滤器。

      在这里插入图片描述
      1.输入:采集各种样式、大小和来源的数据
      Logstash 支持各种输入选择 ,同时从众多常用来源捕捉事件。
      能够以连续的流式传输方式,轻松地从日志、指标、Web 应用、数据存储以及各种 AWS 服务采集数据。

      在这里插入图片描述
      2.过滤器:实时解析和转换数据
      数据从源传输到存储库的过程中,Logstash 过滤器能够解析各个事件,识别已命名的字段以构建结构,并将它们转换成通用格式,以便更轻松、更快速地分析和实现商业价值。

      功能:
      利用 Grok 从非结构化数据中派生出结构
      IP 地址破译出地理坐标
      将 PII 数据匿名化,完全排除敏感字段
      简化整体处理,不受数据源、格式或架构的影响

      3.输出:选择存储库,导出数据
      logstash 提供众多输出选择,您可以将数据发送到您要指定的地方,并且能够灵活地解锁众多下游用例。

      在这里插入图片描述


      2.2 logstash的安装与配置

      实验环境:
      server4:172.25.0.4

      rpm -ivh jdk-8u171-linux-x64.rpm
      rpm -ivh logstash-7.6.1.rpm 安装logstash

      在这里插入图片描述
      标准输入到标准输出:
      /usr/share/logstash/bin/logstash -e 'input { stdin { } } output { stdout {} }'

      在这里插入图片描述
      在这里插入图片描述


      2.3 logstash的输入/输出

      1.file输出插件

      标准输入到文件:vim /etc/logstash/conf.d/file.conf

      input {
              stdin { }
      }
      output {
              file {
                      path => "/tmp/logstash.txt"        ##输出的文件路径
                      codec => line { format => "custom format: %{message}"} ##定制数据格式 
              }
      }
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

      指定配置文件运行:/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/file.conf
      查看输入:cat /tmp/logstash.txt

      在这里插入图片描述
      在这里插入图片描述


      2.elasticsearch输出插件

      标准输入到es主机:vim /etc/logstash/conf.d/es.conf

      input {
              stdin { }
      }
      output {
              elasticsearch {
                      hosts => "172.25.0.1:9200"    ##输出到的ES主机与端口
                      index => "logstash-%{+YYYY.MM.dd}"   ##定制索引名称
              }
      }
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

      指定配置文件运行:/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/es.conf
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述


      3.file输入插件

      在server4安装并开启httpd
      yum install -y httpd
      systemctl start httpd
      echo www.red.com > /var/www/html/index.html

      用户访问server4的httpd生成数据ab -c 1 -n 100 http://172.25.0.4/index.html

      把文件内容输出到es主机:vim /etc/logstash/conf.d/es.conf

      input {
              file { 
        path => "/var/log/httpd/access_log"
        start_position => "beginning"
       }
      }
      output {
              stdout {} ##可以在这里输出
              elasticsearch {
                      hosts => "172.25.0.1:9200"    
                      index => "logstash-%{+YYYY.MM.dd}"   
              }
      }
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12

      指定配置文件运行:/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/es.conf
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述


      4.logstash会把进度保存到sincedb文件中

      sincedb文件内容解释(sincedb文件一共6个字段)
      1.inode编号
      2.文件系统的主要设备号
      3.文件系统的次要设备号
      4.文件中的当前字节偏移量
      5.最后一个活动时间戳(浮点数)
      6.与此记录匹配的最后一个已知路径

      在这里插入图片描述
      注意:如果数据被在删除,再次运行的时候将不会从头读取。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述


      5.Syslog输入插件

      logstash可以伪装成日志服务器,直接接受远程日志
      vim /etc/logstash/conf.d/syslog.conf

      input {
              syslog {
                      port => 514 ##日志收集端口
              }
      }
      output {
       stdout {}        
       elasticsearch {
                      hosts => "172.25.0.1:9200"    
                      index => "syslog-%{+YYYY.MM.dd}"   
              }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12

      配置客户端传入日志:vim /etc/rsyslog.conf

      *.* @@172.25.0.4:514

        systemctl restart rsyslog.service重启日志服务
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述


        6.多行过滤插件

        多行过滤可以把多行日志记录合并为一行事件
        示例一
        vim /etc/logstash/conf.d/multiline.conf

        input {
              stdin {
                    codec => multiline {
                    pattern => "^EOF"
                    negate => true
                    what => previous
                    }
             }
        }
        
        output {
              stdout {}
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13

        /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/multiline.conf
        在这里插入图片描述
        在这里插入图片描述


        示例二:解决日志多行录入的情况
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        vim /etc/logstash/conf.d/es.conf

        input {
          file {
               path => "/var/log/my-es.log"
               start_position => "beginning"
               codec => multiline {
                       pattern => "^\[" ##已[开头的地方换行
                       negate => true
                       what => previous
                        }
               }
        }
        
        output {
           stdout {}
         
          elasticsearch {
                  hosts => ["172.25.0.1:9200"]
                index => "eslog-%{+yyyy.MM.dd}"
         }
        }
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19

        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述


        7.grok过滤插件

        vim /etc/logstash/conf.d/grok.conf

        input {
                stdin {}
        }
        filter {
                grok {
                   match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
                }
        }
        output {
                stdout {}
        }
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10

        指定配置文件运行:/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/grok.conf

        在这里插入图片描述
        在这里插入图片描述


        grok过滤插件处理apache日志
        获得帮助:cat /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.1.2/patterns/httpd
        在这里插入图片描述
        vim /etc/logstash/conf.d/apache.conf

        input {
         file {
          path => "/var/log/httpd/access_log"
          start_position => "beginning"
         }
        }
        
        
        filter {
              grok {
                     match => { "message" => "%{HTTPD_COMBINEDLOG}" }
              }
        }
        
        output {
             stdout {}
        
         elasticsearch {
             hosts => ["172.25.0.1:9200"]
             index => "apachelog-%{+yyyy.MM.dd}"
         }
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21
        • 22

        /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/apache.conf
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述


        3.kibana数据可视化

        3.1 kibana的介绍

        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述


        3.2 kibana的安装与配置

        实验环境:
        server5:172.25.0.5

        安装kibana:rpm-ivh kibana-7.6.1-x86_64.rpm
        kibana配置:vim /etc/kibana/kibana.yml

        server.port: 5601                #服务端口
        server.host: "172.25.0.17"           #服务监听地址
        elasticsearch.hosts: ["http://172.25.0.13:9200"] #ES集群地址
        kibana.index: ".kibana"               #kibana在ES中创建的索引
        i18n.locale: "zh-CN"                   
        • 1
        • 2
        • 3
        • 4

        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述


        3.3 kibana的自定义图表

        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        **

        3.4 启用xpack安全验证

        集群模式需要先创建证书:
        cd /usr/share/elasticsearch/bin/
        ./elasticsearch-certutil ca
        ./elasticsearch-certutil cert --ca elastic-stack-ca.p12
        cd ..
        cp elastic-certificates.p12 elastic-stack-ca.p12 /etc/elasticsearch/
        cd /etc/elasticsearch/
        chown elasticsearch elastic-certificates.p12 elastic-stack-ca.p12

        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述


        配置所有的elasticsearch集群节点:
        vim /etc/elasticsearch/elasticsearch.yml

        在这里插入代码片

          在这里插入图片描述
          在这里插入图片描述
          在这里插入图片描述


          ES集群重启正常后,设置用户密码:
          /usr/share/elasticsearch/bin//elasticsearch-setup-passwords interactive

          在这里插入图片描述


          vim /etc/kibana/kibana.yml

          elasticsearch.username: "kibana"
          elasticsearch.password: "redhat"
          • 1

          systemctl restart kibana.service
          在这里插入图片描述
          在这里插入图片描述


          在这里插入图片描述


          head访问:
          vim /etc/elasticsearch/elasticsearch.yml

          http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type

            systemctl restart elasticsearch.service
            在这里插入图片描述
            在这里插入图片描述http://172.25.0.1:9100/?auth_user=elastic&auth_password=redhat
            在这里插入图片描述

            声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/442422
            推荐阅读
            相关标签
              

            闽ICP备14008679号