介绍

首先准备ELK中的三个组件Elasticsearch、Logstash、Kibana。
其中他们三者有版本对应关系,不同的版本加在一起可能会不起作用,详细的对应的关系如下:官方版本关系浏览连接

下载

安装

  • ES是基于JVM的,所以需要安装1.8的JDK。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    wget https://repo.huaweicloud.com/java/jdk/8u201-b09/jdk-8u201-linux-x64.rpm

    rpm -ivh jdk-8u201-linux-x64.rpm

    vi /etc/profile
    export JAVA_HOME=/usr/java/latest

    vi ~/.bash_profile
    export PATH=$JAVA_HOME/bin:$PATH

    #刷新环境变量
    source /etc/profile
    source ~/.bash_profile

    查看java版本:
    java -version

ElasticSearch

安装

  • 解压tar包

    1
    tar zxvf elasticsearch-7.7.0-linux-x86_64.tar.gz -C /opt/app/
  • 创建data和logs目录

    1
    2
    mkdir /opt/app/elasticsearch-7.7.0/data
    mkdir /opt/app/elasticsearch-7.7.0/logs
  • 配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    vim /opt/app/elasticsearch-7.7.0/config/elasticsearch.yml

    cluster.name: MyES #集群名称
    node.name: node01 #本节点名称
    path.data: /opt/app/elasticsearch-7.7.0/data #数据存储目录
    path.logs: /opt/app/elasticsearch-7.7.0/logs #日志存储目录
    network.host: 0.0.0.0 #所有机器都可监听
    http.port: 9200 #默认端口
    cluster.initial_master_nodes: ["node01"] #主节点名称,与上面配置的保持一致
  • JVM配置: 因为ES是基于Java开发的,所以依赖于JVM,有需求可以修改JVM属性

    1
    2
    -Xms4g
    -Xmx4g
  • 创建elk用户: ES不允许使用root用户启动,所以我们创建一个elk用户

    1
    2
    3
    useradd elk

    chown -R elk:elk /opt/app/elasticsearch-7.7.0
  • 配置环境变量

    1
    2
    vi /etc/profile
    export ES_HOME=/opt/app/elasticsearch-7.7.0
  • 启动:

    1
    2
    su elk
    $ES_HOME/bin/elasticsearch

注册服务

  • 创建配置文件

    1
    vim /usr/lib/systemd/system/elasticsearch.service
  • 填入以下信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    [Unit]
    Description=elasticsearch
    After=network.target

    [Service]
    Type=forking
    User=elk
    ExecStart=/opt/app/elasticsearch-7.7.0/bin/elasticsearch -d
    PrivateTmp=true
    # 指定此进程可以打开的最大文件数
    LimitNOFILE=65535
    # 指定此进程可以打开的最大进程数
    LimitNPROC=65535
    # 最大虚拟内存
    LimitAS=infinity
    # 最大文件大小
    LimitFSIZE=infinity
    # 超时设置 0-永不超时
    TimeoutStopSec=0
    # SIGTERM是停止java进程的信号
    KillSignal=SIGTERM
    # 信号只发送给给JVM
    KillMode=process
    # java进程不会被杀掉
    SendSIGKILL=no
    # 正常退出状态
    SuccessExitStatus=143

    [Install]
    WantedBy=multi-user.target

  • 使用systemctl daemon-reload命令可以刷新elasticsearch.service配置信息

  • 启动服务

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 启动服务
    systemctl start elasticsearch.service
    # 重启服务
    systemctl restart elasticsearch.service
    # 停止服务
    systemctl stop elasticsearch.service
    # 禁止开机启动
    systemctl disable elasticsearch.service
    # 启用开机启动
    systemctl enable elasticsearch.service

ES启动报错

JVM内存问题

  • es默认jvm启动内存是2g,所以我们需要配置一下es的启动内存

    1
    2
    3
    4
    5
    # 编辑es/config/jvmoptions文件,修改以下两个参数:
    #-Xms2g
    #-Xmx2g
    -Xms512m
    -Xmx512m

root 权限执行问题

  • 我们创建一个非root用户,并给它赋予目录该用户权限。

    1
    2
    3
    4
    5
    # groupadd es
    # useradd es -g es -p es
    # chown -R es:es /opt/app/elasticsearch-7.7.0
    # sudo su es

  • 再为新建的es用户配置一下环境变量,将之前root用户的内容拷贝过来(主要是java的环境变量):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # vim ~/.bash_profile

    # java environment
    export JAVA_HOME=/usr/local/java/jdk1.8.0_91
    export JRE_HOME=$JAVA_HOME/jre
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

    # source ~/.bash_profile

系统资源使用上的限制:

  • Es进程设置的最大文件描述符太小,需要增加。

    1
    [1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
  • 在Linux操作系统中,ulimit可以临时解除可以使用资源的限制。要配置ulimit需要切换到root用户。

    1
    2
    3
    4
    5
    ulimit -Sn
    ulimit -Hn

    ulimit -n 65535 #设置可打开的最大文件句柄数 只在当前会话有效
    ulimit -a # 查看所有
  • 修改限制:永久配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    vim /etc/security/limits.conf

    * soft nofile 65535
    * hard nofile 65535
    elk soft nproc 4096
    elk hard nproc 4096

    # 重新登录即可生效
    # 可使用命令查看是否生效 - 65535
    ulimit -H -n

虚拟内存空间

  • 错误

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

    # 操作系统的vm.max_map_count参数设置太小导致的
  • 临时修改

    1
    2
    3
    4
    # 请使用root用户登录系统,执行以下命令:
    sysctl -w vm.max_map_count=262144
    # 并用以下命令查看是否修改成功 如果能正常输出262144,则说明修改成功
    sysctl -a | grep "vm.max_map_count"
  • 永久有效,编辑/etc/sysctl.conf文件,在最后添加一行

    1
    2
    # sudo vim /etc/sysctl.conf
    vm.max_map_count=262144