在前面通过两篇博文介绍ELK的基础概念、组件的构成、部署过程中遇到的问题及其解决方法,但是在前面的博文中仍然是在单一主机上部署运行ELK组件的。
在实际使用的时候,ELK一定是分别部署在不同的节点的,例如logstash是需
要部署在需要采集日志的节点,比如需要采集nginx的日志的话,logstash就需要部署在nginx的节点;如果集群中有多个nginx的话,那么每个nginx节点上都需要安装logstash。在logstash采集到日志后,需要将日志发送给ES,最终通过kibana展示出来。
本篇博文,就来实现将ELK分开部署的实现方法。
一、ELK平台架构
1)架构规划如下
本案例中,采用两个节点的模式
一个节点安装logstash,另一个节点安装es和kibana
注意:es和kibana也可以分开部署,配置方式与后文中做法一致,读者可自行配置
2)两个节点配置参数如下
节点1 | 节点2 | ||
主机名称 | ser1 | 主机名 | ser2 |
ip地址 | 192.168.31.62 | ip地址 | 192.168.31.63 |
安装的组件 | es、kibana | 安装的组件 | logstash |
3)注意事项
集群的各个节点在配置之前,需要首先做一些基础配置工作:
关闭防火墙
配置时间同步
配置主机名解析
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接口,所有可以通过网页访问
此时也已访问kibana的页面了
三、配置节点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
测试一下,从标准输入来输入数据,结果会打印到标准输出
在测试没问题以后,也可以让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中,可以看到此时还没有数据产生
我们可以自己访问nginx,在产生了访问日志以后,会在es中产生信息
说明
其实到这里,整条链路已经通了,也就是通过logstash去采集日志,然后见日志保存到es中,同时借助于kibana进行展示
在采集到了日志以后,可以看一看es中日志的详情
在上图中,可以看到这个日志的 index 是 logstash-2019-09-29
通过这个index,就可以看到这个日志详细信息
这样来查看日志的内容是非常不方便的,我们可以在kibana中创建索引来看
在实际使用的时候,数据量可能比较大,那么这个时候,可以针对日志中的某个字段进行过滤显示,比如过滤host字段的值是ser2,