ELK单机集群搭建,增量索引方案


环境准备

java版本:无需准备(es7.x内置JDK12)

操作系统:CentOS7

安装包:https://www.elastic.co/cn/downloads/past-releases#elasticsearch

我这里选择的是7.10.1版本的ElasticSearch

ElasticSearch单机搭建

ElasticSearch下载

## 下载
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.2-linux-x86_64.tar.gz
## 解压
tar -zxvf elasticsearch-7.10.2-linux-x86_64.tar.gz -C /
## 软链接
ln -s /elasticsearch-7.10.2/ es/

ElasticSearch建立用户组用户

ElasticSearch 无法使用root权限安装所以需要创建用户组用户账号

## 创建es用户组
groupadd es
## 创建用户 esdm 并设置密码
useradd esdm
passwd esdm
## 用户esdm添加到es用户组
usermod -G es esdm
## 赋权
chown -R esdm /es
chown -R esdm /elasticsearch-7.10.2
chown -R esdm /es

修改配置文件

mkdir /data/es
vim /es/config/elasticsearch.yml

elasticsearch.yml

cluster.name: my-application
node.name: node-1
path.data: /data/es
path.logs: /es/log
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["192.168.186.131"]
cluster.initial_master_nodes: ["node-1"]
http.cors.enabled: true
http.cors.allow‐origin: "*"
bootstrap.system_call_filter: false
bootstrap.memory_lock: false
## xpack配置加密
#xpack.security.enabled: true
#xpack.license.self_generated.type: basic
#xpack.security.transport.ssl.enabled: true

机器内存较小可以调整jvm.options内存大小

修改启动文件使其使用自带JDK11

if [ ! -z "$JAVA_HOME" ]; then
  JAVA="$JAVA_HOME/bin/java"
  JAVA_TYPE="JAVA_HOME"
else
  if [ "$(uname -s)" = "Darwin" ]; then
    # macOS has a different structure
    JAVA="$ES_HOME/jdk.app/Contents/Home/bin/java"
  else
    JAVA="$ES_HOME/jdk/bin/java"
  fi
  JAVA_TYPE="bundled jdk"
fi

改为

if [ "$(uname -s)" = "Darwin" ]; then
  # macOS has a different structure
  JAVA="$ES_HOME/jdk.app/Contents/Home/bin/java"
else
  JAVA="$ES_HOME/jdk/bin/java"
fi
JAVA_TYPE="bundled jdk"

启动es实例

su esdm
nohup /es/bin/elasticsearch 2>&1 &

报错修改

普通用户打开文件的最大数限制

max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]

su root
vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096

普通用户启动线程数限制

max number of threads [1024] for user [es] likely too low, increase to at least [4096]

su root
vim /etc/security/limits.d/20-nproc.conf

普通用户虚拟内存修改

max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

su root
vim /etc/sysctl.conf
sysctl -p
vm.max_map_count=262144

ik分词器

ik下载

## 创建目录
mkdir -p /es/plugins/ik
cd /es/plugins/ik
## 下载
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.10.2/elasticsearch-analysis-ik-7.10.2.zip
## 解压
unzip elasticsearch-analysis-ik-7.10.2.zip

重启es,ik配置成功

Kibana搭建

Kibana下载

## 下载
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.10.2-linux-x86_64.tar.gz
## 解压
tar -zxvf kibana-7.10.2-linux-x86_64.tar.gz -C /
## 软链接
ln -s /kibana-7.10.2-linux-x86_64/ kibana

修改配置文件

vim /kibana/config/kibana.yml
server.port: 5601
server.host: "192.168.186.131"
elasticsearch.hosts: ["http://localhost:9200"]

赋权

su root
chown -R esdm /kibana-7.10.2-linux-x86_64/

启动实例

su esdm
/kibana/bin/kibana

Logstash 部署

我这里使用的是ELKF架构,所以Logstash监听的是filebeat

请注意Logstash版本与ES版本保持一致

Logstash7.x版本的没有安装,可能与这里有稍许出入,这里安装的是Losgstash6.x版本

Logstash下载

## 下载
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.4.3.tar.gz
## 解压
tar -zxvf logstash-6.4.3.tar.gz -C /

修改配置文件

input {
    beats {
      port => 5044
    }
  }
  filter {
    if [fields][index_name] == "mq" and [fields][index_name] == "java" {
      grok {
        match => [
          "message", "%{IPORHOST:http_host} %{IPORHOST:user_ip} - - \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion:float})?|%{DATA:rawrequest})\" %{NUMBER:response:int} (?:%{NUMBER:bytes:int}|-) %{QS:referrer} %{QS:useragent} (?:%{NUMBER:request_time:float}|-) (?:%{NUMBER:upstream_time:float}|-)"
        ]
      }

      geoip {
        source => "192.168.186.131"
      }

      date {
        match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ]
      }

      useragent {
        target => "ua"
        source => "useragent"
      }
    }
  }

  output{
    if[fields][index_name] == "mq" {
      elasticsearch {
        hosts => ["http://192.168.186.131:9200"]
        index => "mq-%{+YYYY.MM.dd}"
      }
    }
    if[fields][index_name] == "java" {
      elasticsearch {
        hosts => ["http://192.168.186.131:9200"]
        index => "mq-java-zd-%{+YYYY}"
      }
    }
  }

索引信息修改

logstash默认使用的是logstash模板访问地址http://localhost:9200/_template/logstash 可以看到具体的模板信息

我们要想修改有2种办法,1是修改默认模板,2是output中指定模板信息

  1. 修改默认模板

    在kibana中执行

    就是将上面链接的模板信息copy下来修改

    • 删掉最外层命名
    • 修改index_patterns,为你索引匹配路由,由上面的output中index
    • 修改分片副本数在settings.index下加入number_of_shards和number_of_replicas2个配置
    PUT /_template/logstash
    {
        "order": 0,
        "version": 60001,
        "index_patterns": ["mq-*"],
        "settings": {
          "index": {
            "number_of_shards": 1,
            "number_of_replicas": 0,
            "refresh_interval": "5s"
          }
        },
        "mappings": {
          "_default_": {
            "dynamic_templates": [
              {
                "message_field": {
                  "path_match": "message",
                  "match_mapping_type": "string",
                  "mapping": {
                    "type": "text",
                    "norms": false
                  }
                }
              },
              {
                "string_fields": {
                  "match": "*",
                  "match_mapping_type": "string",
                  "mapping": {
                    "type": "text",
                    "norms": false,
                    "fields": {
                      "keyword": {
                        "type": "keyword",
                        "ignore_above": 256
                      }
                    }
                  }
                }
              }
            ],
            "properties": {
              "@timestamp": {
                "type": "date"
              },
              "@version": {
                "type": "keyword"
              },
              "geoip": {
                "dynamic": true,
                "properties": {
                  "ip": {
                    "type": "ip"
                  },
                  "location": {
                    "type": "geo_point"
                  },
                  "latitude": {
                    "type": "half_float"
                  },
                  "longitude": {
                    "type": "half_float"
                  }
                }
              }
            }
          }
        },
        "aliases": {}
    }
    
  2. output中指定模板信息

    同样也是编写上面的模板json文件,放入指定目录,然后在output中指定模板文件位置即可

    elasticsearch {
      hosts => ["http://192.168.186.131:9200"]
      index => "mq-%{+YYYY.MM.dd}"
      template => "/path/to/mytemplate"
      template_name => "myname"
    }
    

filebeat 部署

filebeat 下载

## 下载
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.4.3-linux-x86_64.tar.gz
## 解压
 tar -zxvf filebeat-6.4.3-linux-x86_64.tar.gz -C /

修改配置文件

filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  ## 指定tag方便logstash区别
  fields:
    index_name: mq
  ## 监控文件目录
  paths:
    - /logs/server.log.*
- type: log
  enabled: true
  fields:
    index_name: java
  paths:
    - /logs/java/web*
  ## 多行文本合一 非xxxx-xx-xx为前缀的合并到前一行
  multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
  multiline.negate: true
  multiline.match: after
## 输出到logstash
output.logstash:
  hosts: ["localhost:5044"]

然后启动即可


文章作者: dm
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 dm !
评论
 上一篇
Redis单机、主从、哨兵、高可用集群搭建和集群扩缩容 Redis单机、主从、哨兵、高可用集群搭建和集群扩缩容
Redis单机搭建Redis下载这里使用的是redis5.0.3 Redis下载有多种方式,可以选择官网也可以选择镜像 官网地址:http://download.redis.io/ ## 下载 wget http://download.
2022-10-07
下一篇 
Spring整合MyBatis源码剖析 Spring整合MyBatis源码剖析
MyBatis整合MyBatis源码设计很多Spring IOC的内容,要想明白MyBatis如何整合进Spring需要对Spring IOC的加载流程和扩展点很熟悉,详情可以看SpringIOC容器加载流程和源码剖析 Demo首先引入sp
2022-08-23
  目录