0x01 前言

在前些天我配置了ELK5这个技术栈(安装配置Elastic Stack 5),在使用过程中发现x-pack这个插件是需要收费的。当然也有免费授权,但是免费授权只能用于监控。对于热衷于免费开源软件的我决定另找出路。

我使用x-pack主要是因为我为Elasticsearch配置了集群模式,所以需要使用一款软件来监控集群。在深入了解过后,发现一款名为Elasticsearch-head的插件正合适我的需要。

0x02 安装

自从Elasticsearch5.0开始就不再支持site plugins,所以我们要另找出路。

首先要获取这个插件,在下载的过程中正好能仔细阅读说明文档,因为源码存放在GitHub,电信连接GitHub的速度真的是惨不忍睹。以下是Elasticsearch-head的地址:

elasticsearch-head

里面有一段安装说明:

由此可知,我们需要将Elasticsearch-head以独立服务的形式安装使用。

首先安装nodejs和npm:

然后下载源码,我直接在root目录下clone源码:

进入目录并安装:

要注意的是,我们的网络访问nodejs的服务器确实太慢了,这里需要等上几杯茶的时间。我们可以先去喝几桶水再回来,估计就好了。

完成之后的目录里有以下文件:

最后需要在elasticsearch.yml文件中添加以下内容:

这是用于控制访问的域名,因为我的所有服务只能通过局域网访问并且做了防火墙规则,所以我直接设置http.cors.allow-origin值为通配符*,然后重启elasticsearch。

0x03 启动

在elasticsearch-head目录里通过以下命令即可启动:

1479877613

随后即可通过http://[ip or domain]:9100进行访问了。

如果关闭了shell,那么elasticsearch-head服务也会随之关闭。另外就是,你会发现,在非elasticsearch-head目录中启动server会失败!原因是grunt需要读取Gruntfile.js这个文件。

为了能开机启动并在后台运行,我建立了一个shell 脚本:

然后使用nohup放在后台运行:

将上面这个命令放到/etc/rc.local即可实现开机启动:

0x04 结语

如果你已经配置好了集群,那么通过指定地址,你将看到以下内容:

1479877614-1

每个索引都有5个分片,粗线宽的分片是主分片,细线宽的是副本。这样kibana在搜索的时候就可以从多个elasticsearch服务器上读取,压力也按比例分布在各个集群节点中。

如果你还没有建立集群,那么只能看到一个节点,而且elasticsearch集群健康值是黄色的(yellow)

最后,当数据不多的时候通过一台elasticsearch服务器也能完成任务。但是数据随着时间的推移而增多,尤其需要查询6个月、一年甚至更长时间跨度的数据时,你会发现集群有多么重要。

12 条评论 / comments

  1. elasticsearch-head是走访客IP去连接ES的,这要求你的电脑也有172.26网段的IP,并且可以连通ES内网IP才行。

  2. 你好:
    es有两个IP,一个公网一个内网。es-head 和es安装在一台机器上。遇到的问题是,es-head 怎么通过内网IP连接es。我现在只能通过es的公网IP才能连接到es的节点信息。

  3. 你好:
    elasticsearch 和elasticsearch-head 都可以正常访问,都开在了公网。我遇到的问题是:elasticsearch-head 怎么连接elasticsearch的内网地址来访问es的节点呢。es公网地址47.0.0.0 内网地址:172.26.0.0 elasticsearch-head 访问172.26.0.0 来处理es节点。

  4. 谢谢帮助~
    我已经收到的你的文件并替换了,,早就想跟你道谢,
    但是我今天才发现发的两封邮件都被网易邮箱退回来了,
    真得非常感谢帮助

  5. 我将我现在用的head放在百度盘里,你可以下载下来测试。下载的相关信息我通过邮件给你发过去了。

  6. 我试了一下,还是不行。。。。
    9200端口监听的是所有IP。我在想既然head这边没问题是不是我的elasticsearch有问题,,诶,冥思苦想不得其解。

  7. 我在测试机上测试了一下我文章中所写的内容。发现最新的head插件默认是监听0.0.0.0:9100这个IP的,你的第一和第二步是不需要的。第三步是正确的。

    然后使用:netstat -anp | grep 9200 这个命令检查elasticsearch是不是监听所有IP地址,然后在head插件页面中的连接输入框中输入你的elasticsearch的IP地址或域名,例如我的是:http://web.t.com:9200/

  8. 可是我的head还是和elasticsearch连不上,9100端口可以打开但是一直显示未连接,确定
    ****************************************************************************************************
    1、修改head源码:目录:head/Gruntfile.js,connect下增加hostname属性,设置为*
    2、修改连接地址:目录:head/_site/app.js,修改head的连接地址:this.base_uri = this.config.base_uri || this.prefs.get(“app-base_uri”) || “http://localhost:9200";把localhost修改成你es的服务器地址
    3、修改elasticsearch的参数:编辑config/elasticsearch.yml:增加新的参数,这样head插件可以访问es 注意,设置参数的时候:后面要有空格!
    http.cors.enabled: true
    http.cors.allow-origin: “*”
    ******************************************************************************************************
    这三步已经做了,这问题两三天了,心好痛!!!!
    环境:vmware+centos7用的root用户登录,浏览器访问是在主机win7上

  9. 哈哈,确实。如果你在国外有可用的服务器,可以在国外的服务器上进行npm install,然后将整个文件夹复制到国内的服务器上。也可以使用的。

Comments are closed.