配置三台服务器组成的ELK集群(一)

这个ELK集群的搭建是在6月份做完,从单机尝试到完成集群配置,前后持续了一周时间、每天抽1~2小时完成的。完成后也写了个简单的文档存在本地了,一直没时间更新到博客园。

大名鼎鼎的ELK日志分析系统可以说是十分适合企业使用的开源工具,但是搭建这个给测试团队用的契机并不是因为ELK的功能,反而是每次要看日志里的错误信息,都要去求运维大爷们、看他们脸色行事——那算了还是我们自己来吧。

一、ELK的简介

这里就直接搬运了:

ELK由Elasticsearch、Logstash和Kibana三部分组件组成;

 - Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

 - Logstash是一个完全开源的工具,它可以对你的日志进行收集、分析,并将其存储供以后使用。

 - Kibana 是一个开源和免费的工具,它可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

本案使用了FileBeats作为日志文件收集的代理,Logstash只作为服务端使用。而且FileBeats部署极为方便,5分钟完成部署、修改配置,推荐用它。

最终使用的组件列表:

 - JDK 1.8_131 x64

 - ElasticSearch 5.4.0

 - ElasticSearch-head

 - ElasticHD

 - Logstash

 - Kibana

三台服务器:

10.113.130.116:安装ElasticSearch、ElasticSearch-head、ElasticHD

10.113.130.117:安装ElasticSearch、Logstash

10.113.130.118:安装ElasticSearch、Kibana

搭建完成后,通过10.113.130.116的地址和端口访问。

 

二、安装JDK

下载JDK 1.8.0.tar.gz文件,解压:

# mkdir /usr/local/jdk
# tar -xvf jdk-8u131-linux-x64.tar.gz -C /usr/local/jdk/

配置环境变量:

# vim /etc/profile

#增加以下配置:
#java
export JAVA_HOME=/usr/local/jdk/jdk1.8.0_131
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

执行以下语句,使环境变量生效;避免重启系统:

# source /etc/profile

验证Java安装成功:

# java -version

java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

 

三、安装ElasticSearch

首先说一下,并不是不能用Yum命令来安装,其实用Yum安装的好处在于可以用Service的方式启动、停止ES的运行,比较简单。

但是坏处是Yum安装的文件结构太松散,想改配置文件都不知道存在哪里。各位请看下图:

配置三台服务器组成的ELK集群(一)

如果各位能忍受以上的目录结构的话,建议还是用Yum安装,步骤如下:

1)导入Elasticsearch PGP Key:

# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

2)生成repo文件:

# vim /etc/yum.repos.d/elasticsearch.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

3)执行安装命令 

安装好Elasticsearch 的repo后,就可以通过yum命令安装Elasticsearch了:

# yum install -y elasticsearch

4)添加成启动服务

# chkconfig --add elasticsearch

修改配置文件的过程,将在后面有具体介绍。这里单独说一下,Yum安装后注意查看一下【/etc/sysconfig/elasticsearch】文件中Java path部分的设置,默认为空,是无法启动的,需要填写JAVA_HOME的内容:

# vim /etc/sysconfig/elasticsearch

# Elasticsearch home directory
ES_HOME=/usr/share/elasticsearch

# Elasticsearch Java path
JAVA_HOME=/usr/local/jdk/jdk1.8.0_131

 

建议通过解压tar包的方式完成部署,配置文件更集中、更可控。使用压缩包安装Elasticsearch:

下载elasticsearch-5.4.0.tar.gz,上传到/root目录;解压到/opt目录:

# tar -zxvf elasticsearch-5.4.0.tar.gz -C /opt/
...(略)
# mv /opt/elasticsearch-5.4.0/ /opt/elasticsearch/

使用压缩包安装,需要我们手动创建数据文件、日志文件的二个文件夹:

# mkdir /var/data/elasticsearch
# mkdir /var/log/elasticsearch

通过10.113.130.116上的配置来做讲解,另外2台的配置基本一样,只需要修改node.name字段的内容:

# vim /opt/elasticsearch/config/elasticsearch.yml

# Use a descriptive name for your cluster:
cluster.name: ES-Cluster-5.4.0

# Use a descriptive name for the node:
node.name: node-116

# Path to directory where to store the data (separate multiple locations by comma):
path.data: /var/data/elasticsearch

# Path to log files:
path.logs: /var/log/elasticsearch

# Lock the memory on startup:
bootstrap.memory_lock: false
bootstrap.system_call_filter: false

# Set the bind address to a specific IP (IPv4 or IPv6):
network.host: 0.0.0.0

# Set a custom port for HTTP:
http.port: 9200

# Pass an initial list of hosts to perform discovery when new node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
discovery.zen.ping.unicast.hosts: ["10.113.130.116", "10.113.130.117", "10.113.130.118"]

# Prevent the "split brain" by configuring the majority of nodes (total number of master-eligible nodes / 2 + 1):
discovery.zen.minimum_master_nodes: 3

完成配置文件的修改后,复制到另外2台服务器上,确保配置文件除了node.name字段以外的内容一致。

修改完设置以后,启动ElasticSearch:

# /opt/elasticsearch/bin/elasticsearch

 

好了,一般按照上面的步骤,操作到这一步就该出现报错信息了。别紧张,以下是解决错误:

1、错误提示:can not run elasticsearch as root

ES不能通过Root用户执行,需要我们创建一个单独的用户用来运行ElasticSearch。

先创建elasticsearch用户组及elasticsearch用户:

# groupadd elasticsearch
# useradd elasticsearch -g elasticsearch -p elasticsearch

然后更改elasticsearch文件夹及内部文件的所属用户及组为elsearch:elsearch:

# cd /opt
# chown -R elasticsearch:elasticsearch elasticsearch

别忘了修改data和log目录的所属用户:

# chown -R elasticsearch:elasticsearch /var/data/elasticsearch
# chown -R elasticsearch:elasticsearch /var/log/elasticsearch

再接下来,有两种处理方式:

a)切换到elasticsearch用户再启动elasticsearch:

# su elasticsearch
$ cd elasticsearch/bin 

#elasticsearch后端启动命令:
$ ./elasticsearch -d

b)不想切换root用户,可以编写如下启动脚本:

# vim es-start.sh

#添加如下内容:
su - elasticsearch -c "nohup /opt/elasticsearch/bin/elasticsearch > /dev/null 2>&1 &"

增加执行权限:

# chmod +x es-start.sh
# mv es-start.sh /usr/local/bin/

于是可以随意启动elasticsearch。像我这么懒的人,当然愿意选择第二种方法。

 

2、错误提示:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

# vim /etc/sysctl.conf

#添加下面配置:
vm.max_map_count=655360

 并执行命令、使修改生效:

# sysctl -p

 

3、错误提示:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

# vim /etc/security/limits.conf
#在文件末尾,添加如下内容: * soft nofile 65536 * hard nofile 131072 * soft nproc 2048 * hard nproc 4096 # vim /etc/pam.d/common-session #添加: session required pam_limits.so # vim /etc/pam.d/common-session-noninteractive #添加: session required pam_limits.so

退出SHH的Session 重新登录;

切换到elsearch用户再启动elasticsearch:

# su elsearch

$ cd /opt/elasticsearch/bin
$ ./elasticsearch -d 

通过tail日志文件,观察运行状态:

# tail -f /opt/elasticsearch/logs/ES-Cluster-5.4.0.log
#备注:日志文件名,与设定的集群名相同

请确保在三台机器上都完成ElasticSearch的安装,再继续执行后面的操作。 

 

四、安装ElasticSearch-Head插件

严格来说,ElasticSearch-Head已经不是ES的插件了,保存到/elasticsearch/plugins/目录下是无法运行的;现在的ES-Head是一个单独运行的组件,推荐保存在/opt/目录下,和ES的根目录平级。

ES-Head只安装在10.113.130.116上。首先,需要安装nodejs和npm:

# wget https://npm.taobao.org/mirrors/node/v8.1.0/node-v8.1.0-linux-x64.tar.gz
# tar --strip-components 1 -xzvf node-v* -C /usr/local

# node --version
提示:v8.1.0

# npm -v
提示:5.0.3,安装成功

安装使用Grunt NPM:

# npm install -g grunt-cli
# npm install -g grunt

#安装成功后,请确保Grunt已安装成功,并检查版本。
# grunt -version
grunt-cli v1.2.0
grunt v1.0.1

安装ES-Head: 

# mv elasticsearch-head /opt/
# cd /opt/elasticsearch-head

# npm install

修改elasticsearch-head配置文件:

# vim _site/app.js

#找到:this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200";
#修改为本机的IP地址:
"http://10.113.130.116:9200";

修改elasticsearch配置文件,否则head启动以后无法连接到es集群

# vim /opt/elasticsearch/config/elasticsearch.yml

#增加如下内容:
http.cors.enabled: true
http.cors.allow-origin: “*”

编写一个ES-Head的启动脚本,与ElasticSearch的启动脚本类似:

# vim es-head-start.sh

#输入下面的2行指令;不要试图合并在一行,我试过的、没成功:
cd /opt/elasticsearch-head
npm run start &

# chmod +x es-head-start.sh
# mv es-head-start.sh /usr/local/bin

杀掉ES的进程、重启ES、再启动ES-Head:

配置三台服务器组成的ELK集群(一)

到浏览器,输入服务器的IP和端口:http://10.113.130.116:9100/

配置三台服务器组成的ELK集群(一)

刚发现,如果整片写在一个博文的话,篇幅太长了,安装其他的组件的步骤,写在下一篇随笔里吧。觉得有帮助的话,给个赞吧。

上一篇:LINUX下C-C++类软件的诊断


下一篇:一步一步以安装包的方式,搭建API测试工具Hitchhiker