0x01 前言
最近elasticstack技术栈发布了6.0,目前最新版本是6.1.0。而我也在最近2周看了新版的文档,发现有好多东西都发生了变化。在最近的一周里,我将我家里的elasticstack从5.6升级到6.0.1。
在5.0的时候我试用过x-pack,功能非常强大,尤其是监控和告警的功能。可这个是收费的,而且费用非常昂贵,所以在这里我需要对一些文件进行修改。
在6.0的时代我也想尝试使用,最主要是想开发告警插件,接入微信。
0x02 安装
在安装x-pack之前要先安装好elasticsearch、kibana和logstash。简单的安装过程可以参考以下文章:
然后要安装x-pack,在这里要先为elasticsearch安装,然后是kibana,最后是logstash。
因为x-pack的安全要求,需要对各个组件间的传输数据使用TLS加密,同时需要为各个内置配置密码。在这里我不对这部分内容进行说明,在elasticsearch.yml文件中使用以下参数禁用x-pack的安全配置:
xpack.security.enabled: false
添加好以上参数后先不要重启服务,先安装x-pack。
x-pack的安装包是通用的,如果网络情况不理想的话,建议下载安装包进行安装,以下是下载地址:
https://artifacts.elastic.co/downloads/packs/x-pack/x-pack-6.0.1.zip
下载好文件后使用以下命令为elasticsearch安装x-pack:
#使用以下命令安装 bin/elasticsearch-plugin intall file:///[your file path] #例如我的: [root@es6-t1 ~]# /usr/share/elasticsearch/bin/elasticsearch-plugin install file:///root/x-pack-6.0.1.zip -> Downloading file:///root/x-pack-6.0.1.zip [=================================================] 100% @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: plugin requires additional permissions @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * java.io.FilePermission \\.\pipe\* read,write * java.lang.RuntimePermission accessClassInPackage.com.sun.activation.registries * java.lang.RuntimePermission getClassLoader * java.lang.RuntimePermission setContextClassLoader * java.lang.RuntimePermission setFactory * java.net.SocketPermission * connect,accept,resolve * java.security.SecurityPermission createPolicy.JavaPolicy * java.security.SecurityPermission getPolicy * java.security.SecurityPermission putProviderProperty.BC * java.security.SecurityPermission setPolicy * java.util.PropertyPermission * read,write * java.util.PropertyPermission sun.nio.ch.bugLevel write See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html for descriptions of what these permissions allow and the associated risks. Continue with installation? [y/N]y @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: plugin forks a native controller @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ This plugin launches a native controller that is not subject to the Java security manager nor to system call filters. Continue with installation? [y/N]y -> Installed x-pack
如果不想下载安装包,还可以通过以下命令直接安装,其实还是会下载安装包,只不过不会保存到本地而已:
[root@es6-t1 ~]# /usr/share/elasticsearch/bin/elasticsearch-plugin install x-pack
安装过程需要点时间,完成后重启elasticsearch服务,然后需要使用以下命令设置各个内置账号的密码:
/usr/share/elasticsearch/bin/x-pack/setup-passwords interactive
这时候在kibana里是看不到任何变化的,因为还需要为kibana安装x-pack。用同样的安装包为kibana安装:
[root@es6-t1 ~]# /usr/share/kibana/bin/kibana-plugin install file://root/x-pack-6.0.1.zip
还可以直接安装:
[root@es6-t1 ~]# /usr/share/kibana/bin/kibana-plugin install x-pack
完成后重启kibana,然后登入kibana即可看到机器学习、图形工作台与监控按钮:
因为在一开始就禁用了x-pack的安全功能,所以用户控制的按钮被隐藏了。如果需要用户控制功能,请参考官方网站的文档完成安全配置之后再将以下配置从elasticsearch.yml移除即可:
xpack.security.enabled: false
0x03 激活
在继续之前需要提醒大家请不要将修改过的文件应用在生产环境,这可能会导致不可挽回的错误。同时请大家支持正版软件,以下是x-pack授权的购买地址:
从上面的地址可以看到授权分为开源版、基础版、黄金版、铂金版与企业版。企业版比铂金版多ELASTIC CLOUD的管理功能,可管理多个群集,因为我用不上,所以选择铂金版。
先通过以下地址申请一个基础版的授权:
提交申请后,稍等片刻即可收到官方发送的邮件,从邮件中的地址下载授权文件,文件中的内容如下:
[root@es6-node1 ~]# cat license.json { "license": { "expiry_date_in_millis": 2513296000000, "issue_date_in_millis": 1513296000000, "issued_to": "[your name and company name]", "issuer": "Web Form", "max_nodes": 1000, "signature": "[your signature key]", "start_date_in_millis": 1513296000000, "type": "platinum", "uid": "[your uid]" } }
相关字段如下:
- issue_date_in_millis:授权启用时间,无需修改
- expiry_date_in_millis:授权到期时间,将时间戳的第一位加1即可
- type:授权级别,platinum为铂金
其余内容请勿修改,保存名为license.json的文件即可。
然后在系统中新建以下文件:
[root@es6-node1 ~]# cat codex/LicenseVerifier.java package org.elasticsearch.license; import java.nio.*; import java.util.*; import java.security.*; import org.elasticsearch.common.xcontent.*; import org.apache.lucene.util.*; import org.elasticsearch.common.io.*; import java.io.*; public class LicenseVerifier { public static boolean verifyLicense(final License license, final byte[] encryptedPublicKeyData) { return true; } public static boolean verifyLicense(final License license) { return true; } }
然后使用openjdk进行编译,如果你也是用官方的安装包,那么以下文件的路径应该和我一致,为了安全起见,请再次确认。然后使用以下命令进行编译:
[root@es6-t1 ~]# javac -cp "/root/codex/elasticsearch-6.1.0/lib/elasticsearch-6.1.0.jar:/root/codex/elasticsearch-6.1.0/lib/lucene-core-7.1.0.jar:/usr/share/elasticsearch/plugins/x-pack/x-pack-6.0.1.jar" LicenseVerifier.java
如果提示找不到javac的命令,请使用以下命令安装:
[root@es6-t1 ~]# yum install java-1.8.0-openjdk-devel
编译过程非常快,但不会输出内容,完成后会在当前目录生成一个LicenseVerifier.class的二进制文件。
这个LicenseVerifier.class文件是判断授权是否有效的文件,若有效则返还true。因此需要手动将其判断逻辑删除,直接返还true。
然后需要将编译好的文件替换到x-pack的jar包中:
#进入相关文件夹 [root@es6-t1 ~]# cd /usr/share/elasticsearch/plugins/x-pack/ #新建临时文件夹 [root@es6-t1 x-pack]# mkdir temp #将jar文件复制到临时文件夹中 [root@es6-t1 x-pack]# cp x-pack-6.0.1.jar temp/ #进入临时文件夹 [root@es6-t1 x-pack]# cd temp/ #解压jar包 [root@es6-t1 temp]# jar xvf x-pack-6.0.1.jar #替换文件 [root@es6-t1 temp]# cp /root/LicenseVerifier.class ./org/elasticsearch/license/ #重新打包 [root@es6-t1 temp]# jar cvf x-pack-6.0.1.jar . #将打包好的jar包复制到原来的位置并覆盖原来的文件 [root@es6-t1 temp]# cp x-pack-6.0.1.jar ../
完成后重启elasticsearch服务,然后将修改好的授权文件使用以下命令导入到elasticsearch中:
[root@es6-node1 ~]# curl -XPUT -u elastic 'http://127.0.0.1:9200/_xpack/license?acknowledge=true' -H "Content-Type: application/json" -d @license.json
在此过程中需要输入elastic的密码,改密码就是安装完x-pack后手动设置的那个。
最终回到kibana的monitoring窗口即可看到授权有效期:
点击进入可以看到更详细的信息:
0x04 其他
因为x-pack的授权信息是保存在elasticsearch,授权内容则是根据授权级别的不同来确定的,因此只需要导入一次即可。
不过需要将每一个组件的x-pack的jar包进行替换,如果不升级是一直有效的。
如果各个组件都安装在不同服务器中,则需要指定elasticsearch的服务器地址,如:
xpack.monitoring.elasticsearch.url: ["http://es6-node1.t.com:9200", "http://es6-node2.t.com:9200", "http://es6-node3.t.com:9200"]
将以上配置文件添加到组件的yml配置文件中即可。
最后,x-pack的监控功能确实比elasticsearch-head要棒!毕竟是是收费的软件。
0x05 结语
最后还是要提醒大家请不要将修改过的文件应用在生产环境,这可能会导致不可挽回的错误。同时请大家支持正版软件,以下是x-pack授权的购买地址: