0x01 前言
在前些天我配置了ELK5这个技术栈(安装配置Elastic Stack 5),在使用过程中发现x-pack这个插件是需要收费的。当然也有免费授权,但是免费授权只能用于监控。对于热衷于免费开源软件的我决定另找出路。
我使用x-pack主要是因为我为Elasticsearch配置了集群模式,所以需要使用一款软件来监控集群。在深入了解过后,发现一款名为Elasticsearch-head的插件正合适我的需要。
0x02 安装
自从Elasticsearch5.0开始就不再支持site plugins,所以我们要另找出路。
首先要获取这个插件,在下载的过程中正好能仔细阅读说明文档,因为源码存放在GitHub,电信连接GitHub的速度真的是惨不忍睹。以下是Elasticsearch-head的地址:
里面有一段安装说明:
Running as a plugin of Elasticsearch Install elasticsearch-head: – for Elasticsearch 5.x: site plugins are not supported. Run elasticsearch-head as a standalone server
由此可知,我们需要将Elasticsearch-head以独立服务的形式安装使用。
首先安装nodejs和npm:
[root@web ~]# yum install nodejs npm -y
然后下载源码,我直接在root目录下clone源码:
[root@web ~]# git clone https://github.com/mobz/elasticsearch-head.git
进入目录并安装:
#进入目录 [root@web ~]# cd elasticsearch-head/ #安装 [root@web elasticsearch-head]# npm install
要注意的是,我们的网络访问nodejs的服务器确实太慢了,这里需要等上几杯茶的时间。我们可以先去喝几桶水再回来,估计就好了。
完成之后的目录里有以下文件:
[root@web elasticsearch-head]# ll -h 总用量 48K -rw-r--r-- 1 root root 104 11月 10 21:08 elasticsearch-head.sublime-project -rw-r--r-- 1 root root 2.2K 11月 20 19:59 Gruntfile.js -rw-r--r-- 1 root root 3.5K 11月 10 21:08 grunt_fileSets.js -rw-r--r-- 1 root root 1.1K 11月 10 21:08 index.html -rw-r--r-- 1 root root 559 11月 10 21:08 LICENCE drwxr-xr-x 325 root root 8.0K 11月 20 22:18 node_modules -rw-r--r-- 1 root root 793 11月 10 21:08 package.json -rw-r--r-- 1 root root 100 11月 10 21:08 plugin-descriptor.properties -rw-r--r-- 1 root root 5.1K 11月 10 21:08 README.textile drwxr-xr-x 5 root root 131 11月 20 20:00 _site drwxr-xr-x 4 root root 29 11月 10 21:08 src drwxr-xr-x 4 root root 66 11月 10 21:08 test
最后需要在elasticsearch.yml文件中添加以下内容:
http.cors.enabled: true http.cors.allow-origin: "*"
这是用于控制访问的域名,因为我的所有服务只能通过局域网访问并且做了防火墙规则,所以我直接设置http.cors.allow-origin值为通配符*,然后重启elasticsearch。
[root@web ~]# systemctl restart elasticsearch.service
0x03 启动
在elasticsearch-head目录里通过以下命令即可启动:
[root@web elasticsearch-head]# ./node_modules/grunt/bin/grunt server
随后即可通过http://[ip or domain]:9100进行访问了。
如果关闭了shell,那么elasticsearch-head服务也会随之关闭。另外就是,你会发现,在非elasticsearch-head目录中启动server会失败!原因是grunt需要读取Gruntfile.js这个文件。
为了能开机启动并在后台运行,我建立了一个shell 脚本:
cd /root/elasticsearch-head ./node_modules/grunt/bin/grunt server
然后使用nohup放在后台运行:
[root@web elasticsearch-head]# nohup /usr/local/shell/elasticsearch-head.sh > /dev/null 2>&1 &
将上面这个命令放到/etc/rc.local即可实现开机启动:
[root@web elasticsearch-head]# cat /etc/rc.local #!/bin/bash # THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES # # It is highly advisable to create own systemd services or udev rules # to run scripts during boot instead of using this file. # # In contrast to previous versions due to parallel execution during boot # this script will NOT be run after all other services. # # Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure # that this script will be executed during boot. touch /var/lock/subsys/local nohup /usr/local/shell/elasticsearch-head.sh > /dev/null 2>&1 &
0x04 结语
如果你已经配置好了集群,那么通过指定地址,你将看到以下内容:
每个索引都有5个分片,粗线宽的分片是主分片,细线宽的是副本。这样kibana在搜索的时候就可以从多个elasticsearch服务器上读取,压力也按比例分布在各个集群节点中。
如果你还没有建立集群,那么只能看到一个节点,而且elasticsearch集群健康值是黄色的(yellow)
最后,当数据不多的时候通过一台elasticsearch服务器也能完成任务。但是数据随着时间的推移而增多,尤其需要查询6个月、一年甚至更长时间跨度的数据时,你会发现集群有多么重要。