前言:

在前面通过两篇博文介绍ELK的基础概念、组件的构成、部署过程中遇到的问题及其解决方法,但是在前面的博文中仍然是在单一主机上部署运行ELK组件的。

在实际使用的时候,ELK一定是分别部署在不同的节点的,例如logstash是需

要部署在需要采集日志的节点,比如需要采集nginx的日志的话,logstash就需要部署在nginx的节点;如果集群中有多个nginx的话,那么每个nginx节点上都需要安装logstash。在logstash采集到日志后,需要将日志发送给ES,最终通过kibana展示出来。

本篇博文,就来实现将ELK分开部署的实现方法。

一、ELK平台架构

1)架构规划如下

ELK/EFK实战系列之三:部署ELK实战_centos

  • 本案例中,采用两个节点的模式

  • 一个节点安装logstash,另一个节点安装es和kibana

  • 注意:es和kibana也可以分开部署,配置方式与后文中做法一致,读者可自行配置

2)两个节点配置参数如下

节点1节点2
主机名称ser1主机名ser2
ip地址192.168.31.62ip地址192.168.31.63
安装的组件es、kibana安装的组件logstash

3)注意事项

集群的各个节点在配置之前,需要首先做一些基础配置工作:

  • 关闭防火墙

  • 配置时间同步

  • 配置主机名解析

二、配置节点1

1、kibana

# 解压安装kibana
[root@ser1 ~]# tar xvf kibana-6.6.0-linux-x86_64.tar.gz -C /usr/local/ 
[root@ser1 ~]# cd /usr/local/
[root@ser1 local]# mv kibana-6.6.0-linux-x86_64/ kibana-6.6.0

# 修改配置文件
[root@ser1 local]# vim /usr/local/kibana-6.6.0/config/kibana.yml
server.port: 5601      # 监听端口
server.host: "127.0.0.1"    # 监听的地址

# 启动kibana
[root@ser1 ~]# ohup /usr/local/kibana-6.6.0/bin/kibana >/tmp/kibana.log 2>/tmp/kibana.log &
[root@ser1 ~]# ss -tnl | grep 5601
LISTEN     0      128    127.0.0.1:5601                *:*

# 下载repo文件,安装nginx
[root@ser1 ~]# wget http://mirrors.aliyun.com/repo/epel-7.repo
[root@ser1 ~]# yum install nginx -y

# 配置nginx的转发
[root@ser1 ~]# vim /etc/nginx/nginx.conf
location / {
   allow 192.168.31.100;
   deny all;
   proxy_pass http://127.0.0.1:5601;
}
[root@ser1 ~]# systemctl restart nginx


2、配置ES

1)配置java环境

# 安装jdk
[root@ser1 ~]# tar xvf jdk-8u201-linux-x64.tar.gz -C /usr/local/
[root@ser1 ~]# /usr/local/jdk1.8.0_201/bin/java -version

# 配置环境变量
[root@ser1 ~]# vim /etc/profile
#添加
export JAVA_HOME=/usr/local/jdk1.8.0_201/
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH

# 刷新环境变量
[root@ser1 ~]# source /etc/profile
[root@ser1 ~]# java -version


2)安装配置ES

[root@ser1 ~]# tar xvf elasticsearch-6.6.0.tar.gz -C /usr/local/

# 修改es的配置文件
[root@ser1 ~]# vim /usr/local/elasticsearch-6.6.0/config/elasticsearch.yml
# ----------------------------------- Paths ------------------------------------
path.data: /usr/local/elasticsearch-6.6.0/data     # 指定数据目录位置
path.logs: /usr/local/elasticsearch-6.6.0/logs

# ---------------------------------- Network -----------------------------------
network.host: 0.0.0.0                     # 指定监听地址是任意地址
http.port: 9200

# 修改jvm,因为jvm默认占用1g内存
[root@ser1 ~]# vim /usr/local/elasticsearch-6.6.0/config/jvm.options
#-Xms1g
#-Xmx1g
-Xms256m
-Xmx256m

# 最大文件打开数调整
[root@ser1 ~]# vim /etc/security/limits.conf
*                -             nofile              65536

# 调整最大打开进程数
[root@ser1 ~]# vim /etc/security/limits.d/20-nproc.conf
*        -     nproc      10240
#*       soft   nproc      4096
#root     soft   nproc      unlimite

# 内核参数调整
[root@ser1 ~]# vim /etc/sysctl.conf
vm.max_map_count = 262144

# 刷新显示内核参数
[root@ser1 ~]# sysctl -p
vm.max_map_count = 262144

# 创建elk用户,并以elk用户身份启动es
[root@ser1 ~]# useradd -s /sbin/nologin elk
[root@ser1 ~]# chown -R elk:elk /usr/local/elasticsearch-6.6.0/
[root@ser1 ~]# su - elk -s /bin/bash
[elk@ser1 ~]$ /usr/local/elasticsearch-6.6.0/bin/elasticsearch -d
[elk@ser1 ~]$ tail -f /usr/local/elasticsearch-6.6.0/logs/elasticsearch.log
[elk@ser1 ~]$ ss -tnl | grep 9200
LISTEN          0        128      [::]:9200          [::]:*

因为es有http接口,所有可以通过网页访问

ELK/EFK实战系列之三:部署ELK实战_ELK_02

此时也已访问kibana的页面了

ELK/EFK实战系列之三:部署ELK实战_云计算_03

三、配置节点2

1、logstash

1)安装jdk

# 安装
[root@ser2 ~]# tar xvf jdk-8u201-linux-x64.tar.gz -C /usr/local/
[root@ser2 ~]# /usr/local/jdk1.8.0_201/bin/java -version

# 配置环境变量
[root@ser2 ~]# vim /etc/profile
#添加
export JAVA_HOME=/usr/local/jdk1.8.0_201/
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH

# 刷新环境变量
[root@ser2 ~]# source /etc/profile
[root@ser2 ~]# java -version


2)安装logstash

[root@web2 ~]# tar xvf logstash-6.6.0.tar.gz -C /usr/local/

# 修改Logstash的JVM配置文件更新
[root@web2 ~]# vim /usr/local/logstash-6.6.0/config/jvm.options 
-Xms200m
-Xmx200m

# 配置logstash,从标准输入接收数据,结果输出到标准输出
# 这样做的目的是测试,正常的做法是的从日志读,结果保存到es
[root@web2 ~]# vim /usr/local/logstash-6.6.0/config/logstash.conf
input{
    stdin{}
}

output{
    stdout{
        codec=>rubydebug
    }
}

# 安装haveged,解决启动缓慢问题
[root@web2 ~]# yum install wget -t
[root@web2 ~]# wget http://mirrors.aliyun.com/repo/epel-7.repo
[root@web2 ~]# yum install haveged -y
[root@web2 ~]# systemctl enable haveged
[root@web2 ~]# systemctl start haveged

# 启动logstash
[root@web2 ~]# /usr/local/logstash-6.6.0/bin/logstash -f /usr/local/logstash-6.6.0/config/logstash.conf


测试一下,从标准输入来输入数据,结果会打印到标准输出

ELK/EFK实战系列之三:部署ELK实战_linux_04

在测试没问题以后,也可以让logstash的配置,让其从日志文件读取内容,再打印到终端

[root@web2 ~]# vim /usr/local/logstash-6.6.0/config/logstash.conf
input {
    file {
        path => "/var/log/secure"    <<< 指定从/var/log/secure读取日志信息
    }
}

output{
    stdout{
        codec=>rubydebug         <<< 设置输出时候的编码
    }
}


2、配置logstash将日志发给es

  • 这里我们将nginx的日志读取出来发送给es

1)在es节点安装nginx

[root@ser2 ~]# yum install nginx -y
[root@ser2 ~]# systemctl start nginx
[root@ser2 ~]# systemctl stop firewalldd
[root@ser2 ~]# ls /var/log/nginx/access.log
/var/log/nginx/access.log


2)配置logstash

  • 而es的端口是9200,此时的logstash的配置就是

[root@web2 ~]# vim /usr/local/logstash-6.6.0/config/logstash.conf
input {
    file {
       path => "/var/log/nginx/access.log"
    }
}

output{
    elasticsearch{
       hosts => ["http://192.168.31.62:9200"]     <<< 指定es的地址和端口
    }
}

重新启动logstash

[root@web2 ~]# /usr/local/logstash-6.6.0/bin/logstash -f /usr/local/logstash-6.6.0/config/logstash.conf

进入到es中,可以看到此时还没有数据产生

ELK/EFK实战系列之三:部署ELK实战_云计算_05我们可以自己访问nginx,在产生了访问日志以后,会在es中产生信息

ELK/EFK实战系列之三:部署ELK实战_云计算_06

说明

  • 其实到这里,整条链路已经通了,也就是通过logstash去采集日志,然后见日志保存到es中,同时借助于kibana进行展示

在采集到了日志以后,可以看一看es中日志的详情

  • 在上图中,可以看到这个日志的 index 是 logstash-2019-09-29

  • 通过这个index,就可以看到这个日志详细信息

ELK/EFK实战系列之三:部署ELK实战_linux_07

这样来查看日志的内容是非常不方便的,我们可以在kibana中创建索引来看

ELK/EFK实战系列之三:部署ELK实战_centos_08

ELK/EFK实战系列之三:部署ELK实战_ELK_09

ELK/EFK实战系列之三:部署ELK实战_linux_10

在实际使用的时候,数据量可能比较大,那么这个时候,可以针对日志中的某个字段进行过滤显示,比如过滤host字段的值是ser2,

ELK/EFK实战系列之三:部署ELK实战_云计算_11