[toc]

ELKstack部署及配置

环境准备

公网IP 内网IP 主机名 部署服务 用途
10.0.0.81 172.16.1.81 elk01 elasticsearch、JDK 存储日志的数据库(2G内存)
10.0.0.82 172.16.1.82 elk02 elasticsearch、JDK 存储日志的数据库(2G内存)
10.0.0.83 172.16.1.83 elk03 Logstash、JDK 收集日志、过滤日志
10.0.0.84 172.16.1.84 elk04 Redis、Kibana 消息队列、日志展示
10.0.0.85 172.16.1.85 nginx01 nginx、filebeat 修改nginx日志格式为json收集
10.0.0.86 172.16.1.86 tomcat01 tomcat、JDK、filebeat 修改tomcat日志格式为json收集

安装包准备

安装包名 用途
elasticsearch-5.3.0.rpm 存储日志的数据库
elasticsearch-head.tar.gz elasticsearch的web界面插件
logstash-5.3.0.rpm 日志收集、日志分析工具
kibana-5.3.0-x86_64.rpm 日志展示、日志查询工具
filebeat-5.3.2-x86_64.rpm 日志收集工具(比Logstash轻量)
jdk-8u121-linux-x64.tar.gz JAVA容器(es、Logstash、tomcat需要)
nginx-1.10.3.tar.gz 测试收集nginx日志
apache-tomcat-8.0.38.tar.gz 测试收集tomcat日志
redis-3.2.8.tar.gz 消息队列工具

Elasticsearch环境准备

关闭防火墙

1
2
3
4
# CentOS6 关闭防火墙
/etc/init.d/iptables stop
# CentOS7 关闭防火墙
systemctl stop firewalld

关闭SELINUX

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 临时关闭
setenforce 0

# 永久关闭
vim /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled ==> //原来是enforcing 改成disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted

设置epel源

1
2
3
4
5
# CentOS6 下载epel源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

# CentOS7 下载epel源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

修改时区

1
2
# 将时区修改为上海时区
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

设置时间同步

1
2
# 同步服务器时间(切记保证集群之间时间一致非常重要)
ntpdate time1.aliyun.com

部署Elasticsearch

在elk01 和 elk02两台机器分别安装elasticsearch,因为elasticsearch服务运行需要JAVA环境,所以两台服务器都需要安装JAVA环境。

安装JDK环境

下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 解压JDK安装包
tar xf jdk-8u121-linux-x64.tar.gz

# 将JDK安装包移动到安装目录下
mv jdk1.8.0_121 /usr/local/

# 做软链接(方便日后升级)
ln -s /usr/local/jdk1.8.0_121 /usr/local/jdk1.8

# 添加环境变量
vim /etc/profile.d/jdk1.8.sh
export JAVA_HOME=/usr/local/jdk1.8
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

# 加载环境变量
source /etc/profile

# 检查是否加载成功
java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

安装elasticsearch

  • 手动下载rpm包

  • ES官方源安装

    • 更换官方源

      1
      2
      3
      4
      5
      6
      7
      8
      9
      vim /etc/yum.repos.d/es.repo
      [elasticsearch-5.x]
      name=Elasticsearch repository for 5.x packages
      baseurl=https://artifacts.elastic.co/packages/5.x/yum
      gpgcheck=1
      gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
      enabled=1
      autorefresh=1
      type=rpm-md
    • 安装es并解决依赖

      1
      yum install -y elasticsearch

修改配置文件

  • CentOS6

    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
    # 查看配置文件修改部分内容
    grep "^[a-Z]" /etc/elasticsearch/elasticsearch.yml

    # 设置集群名称(想要其他节点加入同一个集群必须集群名称相同)
    cluster.name: elk-cluster

    # 节点名称(通过此配置项来区分集群中的所有节点)
    node.name: es01

    # elasticsearch数据存放目录
    path.data: /data/elk/data

    # elasticsearch日志存放目录
    path.logs: /data/elk/logs

    # CentOS6不支持内存锁功能,所以要关闭内存锁
    bootstrap.memory_lock: false
    bootstrap.system_call_filter: false

    # elasticsearch监听地址
    network.host: 0.0.0.0

    # elasticsearch服务端口
    http.port: 9200

    # 配置所有集群节点IP
    discovery.zen.ping.unicast.hosts: ["10.0.0.81", "10.0.0.82"]
  • CentOS7

    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
    # 编辑配置文件
    vim /etc/elasticsearch/elasticsearch.yml

    cluster.name: elk-cluster
    ## 设置集群名称(想要其他节点加入同一个集群必须集群名称相同)
    node.name: es01
    ## 节点名称(通过此配置项来区分集群中的所有节点)
    path.data: /data/elk/data
    ## elasticsearch数据存放目录
    path.logs: /data/elk/logs
    ## elasticsearch日志存放目录
    bootstrap.memory_lock: true/false
    ## 内存锁设置(在CentOS7中支持内存锁并且要修改启动脚本,不使用:false)
    network.host: 0.0.0.0
    ## elasticsearch监听地址
    http.port: 9200
    ## elasticsearch服务端口
    discovery.zen.ping.unicast.hosts: ["10.0.0.81", "10.0.0.82"]
    ## 配置所有集群节点IP

    # 查看配置文件修改部分内容(CentOS7中配置)
    grep "^[a-Z]" /etc/elasticsearch/elasticsearch.yml

    # 修改内存限制(如果有则去掉此行注释)
    LimitMEMLOCK=infinity

    # 修改启动脚本
    vim /usr/lib/systemd/system/elasticsearch.service

    # 重新加载启动脚本
    systemctl reload-daemon

创建目录并授权

1
2
3
4
5
# 创建数据目录
mkdir -p /data/es/{data,log}

# 授权
chown -R elasticsearch.elasticsearch /data/

优化文件描述符

  • CentOS7

    1
    2
    3
    4
    5
    6
    # 编辑limit文件
    vim /etc/security/limits.conf
    * soft memlock unlimited
    * hard memlock unlimited
    * soft nofile 131072
    * hard nofile 131072
  • CentOS6

    1
    2
    3
    4
    # 编辑子配置文件
    vim /etc/security/limits.d/90-nproc.conf
    * soft nproc 2048
    root soft nproc unlimited

优化文件描述符

1
2
3
4
5
6
# 在配置文件最后一行后添加
vim /etc/security/limits.conf
* soft memlock unlimited
* hard memlock unlimited
* soft nofile 131072
* hard nofile 131072

设置JVM最大最小内存限制

1
2
3
4
# 编辑配置文件
vim /etc/elasticsearch/jvm.options
-Xms1g
-Xmx1g

启停elasticsearch

  • CentOS6

    1
    2
    3
    # 启动、停止elasticsearch
    /etc/init.d/elasticsearch start
    /etc/init.d/elasticsearch stop
  • CentOS7

    1
    2
    3
    # 启动、停止elasticsearch
    systemctl start elasticsearch
    systemctl stop elasticsearch
  • 查看进程和端口

    1
    2
    3
    4
    5
    6
    7
    # 查看启动进程
    ps -ef|grep java

    # 查看端口
    netstat -lntup
    tcp 0 0 :::9200 :::* LISTEN 10872/java
    tcp 0 0 :::9300 :::* LISTEN 10872/java
  • PS:如果服务没有启动就修改 内存所true改为false

    1
    2
    vim /etc/elasticsearch/elasticsearch.yml
    bootstrap.memory_lock: true ---> false

验证启动elasticsearch后的页面

打开浏览器访问地址:http://10.0.0.81:9200/

QQ图片20230427200104

其他节点安装并加入集群

安装其他节点,步骤和上面一样,修改配置文件时,直接将elk01节点的配置文件scp(拷贝)过去,然后在配置文件中讲节点名称修改后启动即可。

发送修改好的配置文件

1
2
3
4
5
6
7
8
9
10
# 发送配置文件到其他节点
scp /etc/elasticsearch/elasticsearch.yml 172.16.1.82:/etc/elasticsearch/
scp /etc/elasticsearch/jvm.options 172.16.1.82:/etc/elasticsearch/
scp /etc/security/limits.conf 172.16.1.82:/etc/security/

# 修改其他节点配置文件
vim /etc/elasticsearch/elasticsearch.yml

#此行节点名称唯一即可
node.name: es02

创建目录并授权

1
2
3
4
5
# 创建数据目录
mkdir -p /data/es/{data,log}

# 授权
chown -R elasticsearch.elasticsearch /data/

启停elasticsearch

  • CentOS6

    1
    2
    3
    # 启动、停止elasticsearch
    /etc/init.d/elasticsearch start
    /etc/init.d/elasticsearch stop
  • CentOS7

    1
    2
    3
    # 启动、停止elasticsearch
    systemctl start elasticsearch
    systemctl stop elasticsearch
  • 查看进程和端口

    1
    2
    3
    4
    5
    6
    7
    # 查看启动进程
    ps -ef|grep java

    # 查看端口
    netstat -lntup
    tcp 0 0 :::9200 :::* LISTEN 10872/java
    tcp 0 0 :::9300 :::* LISTEN 10872/java
  • PS:如果服务没有启动就修改 内存所true改为false

    1
    2
    vim /etc/elasticsearch/elasticsearch.yml
    bootstrap.memory_lock: true ---> false

验证启动elasticsearch后的页面

打开浏览器访问地址:http://10.0.0.82:9200/

QQ图片20230427210915

Elasticsearch的head插件

安装elasticsearch插件

插件是为了完成不同的功能,官方提供了一些插件但大部分是收费的,另外也有一些开发爱好者提供的插件,可以实现对elasticsearch集群的状态监控与管理配置等功能,我们现在要安装的是Elasticsearch的head插件,此插件提供elasticsearch的web界面功能。

安装Elasticsearch的head插件时,要安装npm,npm的全称是Node Package Manager,是随同NodeJS一起安装的包管理和分发工具,它很方便让JavaScript开发者下载、安装、上传以及管理已经安装的包。

在Elasticsearch 5.x版本以后不再支持直接安装head插件,而是需要通过启动一个服务方式。

Github地址:https://github.com/mobz/elasticsearch-head

安装执行流程

安装npm

1
2
3
4
5
6
# 安装npm(只需要在一个节点安装即可,如果前端还有nginx做反向代理可以每个节点都装)
yum install -y npm

# 查看版本
npm --version
8.1.0

安装git

1
2
# 安装git命令
yum install -y git

安装nodejs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 下载nodejs
wget https://nodejs.org/dist/v16.13.0/node-v16.13.0-linuxx64.tar.xz

# 解压node
tar xf node-v16.13.0-linux-x64.tar.xz

# 创建安装目录
mkdir /app

# 移动到安装目录
mv node-v16.13.0-linux-x64 /app/

# 做软连接
ln -s /app/node-v16.13.0-linux-x64/ /app/node

# 添加环境变量
vim /etc/profile.d/node.sh
export PATH="/app/node/bin:$PATH"

#生效环境变量
source /etc/profile

安装elasticsearch-head插件

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#进入下载head插件代码目录
cd /usr/local/

# 从GitHub上克隆代码到本地
clone git://github.com/mobz/elasticsearch-head.git

# 克隆完成后,进入elasticsearch插件目录
cd elasticsearch-head/

# 更换npm源
npm config set registry=https://registry.npmmirror.com/

# 查看当前的npm镜像源
npm config get registry

# 清除缓存
npm cache clean -f

# 使用npm安装n模块(不同的项目js脚本所需的node版本可能不同,所以就需要node版本管理工具)
npm install -g n

# 安装最新版本n模块
n stable

# 安装n模块遇到报错SSL认证问题
npm config set strict-ssl false # 取消npm的ssl验证

# 安装grunt
npm install grunt -save --no-fund
## PS:报错原因缺少bzip2
## 解决方法:yum install -y bzip2

# 后台启动head插件(切记,必须在插件目录下执行启动命令)
npm run start &

# 验证端口是否启动成功
netstat -lntup
tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 11293/grunt

# 在elasticsearch配置文件最后一行后添加,开启跨域访问支持
vim /etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"

# 重启elasticsearch
/etc/init.d/elasticsearch restart

# 浏览器访问
10.0.0.51:9100

image-20230427215339229

image-20230427215350342

故障解析

  • 故障:连接不上

    • 原因是没有打开跨域访问
  • 解决方法:

    • /etc/elasticsearch/elasticsearch.yml在最后一行下面追加

      • http.cors.enabled: true
      • http.cors.allow-origin: “*”
    • 重启服务

      1
      systemctl restart elasticsearch.service

image-20230427215421518

模拟提交数据

image-20230427215436856

image-20230427215440425

image-20230427215737441

image-20230427215746771