这个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安装的文件结构太松散,想改配置文件都不知道存在哪里。各位请看下图:
如果各位能忍受以上的目录结构的话,建议还是用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:
到浏览器,输入服务器的IP和端口:http://10.113.130.116:9100/
刚发现,如果整片写在一个博文的话,篇幅太长了,安装其他的组件的步骤,写在下一篇随笔里吧。觉得有帮助的话,给个赞吧。