ELK搭建

简介

ELK是elasticsearch、logstash、kibana软件的集合,对外是作为一个日志管理系统的开源方案,它可以从任何来源、任何格式进行日志搜索、分析与可视化展示。
基本组成软件:

  • elasticsearch:一个开源分布式搜索引擎,提供收集、分析、存储数据三大功能。
  • kibana:一个基于web的图形界面,用于搜索、分析和可视化存储在elasticsearch中的日志数据。
  • logstash:一个服务端的数据处理管道,可以从多个源中提取数据,对其进行转换,然后将其存储到Elasticsearch中。简单来说就是日志的收集、分析、过滤工具。

搭建步骤

使用版本是7.9.3,部署前我们可以先提前从官网上下载下面4个安装包:
elasticsearch-7.9.3-linux-x86_64.tar.gz
kibana-7.9.3-linux-x86_64.tar.gz
logstash-7.9.3.tar.gz

这4个组件可以部署在不同的机器上,只要机器之间是端口开放即可
本文档中elasticsearch、logstash、kibana部署在一台机器,filebeat部署在有业务服务的机器上。

  1. 创建用户和解压文件

    groupadd elk
    useradd elk -g elk
    

    解压文件:

    tar -zxvf elasticsearch-7.9.3-linux-x86_64.tar.gz -C /home/elk
    tar -zxvf kibana-7.9.3-linux-x86_64.tar.gz -C /home/elk
    tar -zxvf logstash-7.9.3.tar.gz -C /home/elk
    
    cd /home/elk
    mv kibana-7.9.3-linux-x86_64 kibana-7.9.3
    
    chown -R elk:elk /home/elk/elasticsearch-7.9.3
    chown -R elk:elk /home/elk/kibana-7.9.3
    chown -R elk:elk /home/elk/logstash-7.9.3
    
  2. 部署elasticsearch

    1. 切换到elk用户
      su - elasticsearch
      cd /home/elk/
      
    2. 修改elasticsearch.yml

      cd /home/elk/elasticsearch-7.9.3/config
      vi elasticsearch.yml
      

      在文件末尾增加以下内容

      # 集群初始主节点
      cluster.name: "es-cluster"
      network.host: 0.0.0.0
      node.name: "node-1"
      
      # discovery type
      discovery.type: single-node
      #discovery.seed_hosts: ["127.0.0.1", "[::1]"]
      
      # 设置允许所有ip可以连接该elasticsearch
      network.host: 0.0.0.0
      
      # 开启监听的端口为9200
      http.port: 9200
      
      # 增加新的参数,为了让elasticsearch-head插件可以访问es
      http.cors.enabled: true
      http.cors.allow-origin: "*"
      
      # 启用密码
      xpack.security.enabled: true
      
      # 使用默认密码
      xpack.security.authc.accept_default_password: true
      xpack.security.transport.ssl.enabled: true
      

      如果需要外置存储和日志,需要修改path.data和path.logs

      path.data: /nfsc/cnas_csp_pase_hrx_id010797_vol1003_dev/elasticsearch
      path.logs: /nfsc/cnas_csp_pase_hrx_id010797_vol1003_dev/elasticsearch_logs
      
    3. 修改Elasticsearch占用内存
      cd /home/elk/elasticsearch-7.9.3/config
      vi jvm.options
      
      修改JVM参数 :
      -Xms16g
      -Xmx16g
      
    4. 启动es的时候有可能会报类似的下面的错误【max virtual memory areas vm.max_map_count [65530] is too low】,所以我们可以通过下面的方法去处理:
      vi /etc/sysctl.conf
      
      文件末尾添加一行
      vm.max_map_count=655360
      
      保存之后执行下面的命令加载参数
      sysctl -p
      
    5. 启动Elasticsearch
      切换用户,进入bin目录启动:
      cd /home/elk/elasticsearch-7.9.3/bin
      ./elasticsearch -d
      
    6. 为内置账号添加密码
      # interactive:给用户一一设置密码
      # auto:自动生成密码
      cd /home/elk/elasticsearch-7.9.3/bin/
      ./elasticsearch-setup-passwords interactive
      
    7. 验证是否启动成功

      # curl -XGET -u elastic 'localhost:9200'
      
      {
        "name" : "node-1",
        "cluster_name" : "es-cluster",
        "cluster_uuid" : "8eGk8_ohRbWl8ZcNSPsFDQ",
        "version" : {
          "number" : "7.9.3",
          "build_flavor" : "default",
          "build_type" : "tar",
          "build_hash" : "c4138e51121ef06a6404866cddc601906fe5c868",
          "build_date" : "2020-10-16T10:36:16.141335Z",
          "build_snapshot" : false,
          "lucene_version" : "8.6.2",
          "minimum_wire_compatibility_version" : "6.8.0",
          "minimum_index_compatibility_version" : "6.0.0-beta1"
        },
        "tagline" : "You Know, for Search"
      }
      
  3. 部署kibana

    1. 修改配置文件,文件位置在/home/elk/kibana-7.9.3/config目录下

      su - elasticsearch
      cd /home/elk/kibana-7.9.3/config
      vi kibana.yml
      

      添加es的配置,由于是都在同一台机器所以用localhost,如果是不同机器,就换成对应的ip即可

      # kibana端口
      server.port: 5601
      
      # 允许所有ip访问
      server.host: "0.0.0.0"
      
      # elasticsearch所在的ip及监听的地址
      elasticsearch.hosts: ["http://localhost:9200"]
      elasticsearch.username: "kibana_system"
      elasticsearch.password: "kibana_system"
      
      # kibana默认创建的索引
      kibana.index: ".kibana"
      
      # 字符编码
      i18n.locale: "zh-CN"
      
      # elasticsearch加密所需配置
      xpack.reporting.encryptionKey: "a_random_string"
      xpack.security.encryptionKey: "something_at_least_32_characters"
      
    2. 启动kibana
      cd /home/elk/kibana-7.9.3/bin
      ./kibana &
      
    3. 访问kibana
      http://IP:5601/
  4. 部署Logstash

    1. 修改Logstash的YML配置文件

      cd /home/elk/logstash-7.9.3/config/
      vim logstash.yml
      

      修改以下内容

      # 配置自动刷新
      config.reload.automatic: true
      config.reload.interval: 20s
      
      # 配置可任意地址都可访问
      http.host: 0.0.0.0
      http.port: 9600
      
      # 配置es的访问密码
      xpack.monitoring.enabled: true
      xpack.monitoring.elasticsearch.username: logstash_system
      xpack.monitoring.elasticsearch.password: logstash_system
      xpack.monitoring.elasticsearch.hosts: ["http://localhsot:9200"]
      
    2. 修改 pipelines配置文件
      - pipeline.id: gmp-logs
        queue.type: persisted
        path.config: "/home/elk/logstash-7.9.3/conf.d/*.config"
      
    3. 创建日志的config文件

      touch /home/elk/logstash-7.9.3/conf.d/logstash-beats.conf
      

      写入文件内容

      input {
        beats {
          port => 5044
        }
      }
      
      filter {
          grok {
              match => [
                  "message", "%{TIMESTAMP_ISO8601:timestamp_string}%{SPACE}%{GREEDYDATA:line}"
              ]
          }
          date  {
              match => ["timestamp_string", "ISO8601"]
          }
          mutate {
              remove_field => [message, timestamp_string]
          }
      }
      
      output {
          elasticsearch {
              hosts =>  ["http://localhost:9200"]
              user => elastic
              password => "elastic"
          }
          stdout {
              codec => rubydebug
          }
      }
      
    4. 启动Logstash(root用户)
      cd /home/elk/logstash-7.9.3/bin
      sh logstash -f ../conf.d/logstash-beats.conf &