? ? ? ?最近在測試ELK5.0,因為當前環境需求,只部署了接收來自Windows AD server的日志,并且做了篩選,只接收一些重要的日志信息。因為是測試,也只部署了單點環境,運行了一個多月很穩定。
? ? ? 當時為了測試X-Pack組件,所以下載了該組件,并參考了:http://www.lxweimin.com/p/76abe4419465#comment-11172306,感謝分享!所以嘗試對x-pack進行反編譯,可以延長有效期并且升級到白金版,當然這只是用于測試,如果正式用于商業還是請購買License。
本例是基于先安裝好免費版x-pack插件的情況下,對原來包文件進行反編譯,修改免費許可文件,再重新編譯,更新許可。
步驟概要:
1). 反編譯x-pack-5.3.0.jar
下載Java反編譯工具Windows 版?JD-GUI,地址:http://jd.benow.ca/。
打開jd-gui并添加x-pack-5.3.0.jar,找到org.elasticsearch/license/LicenseVerifier.class 對其進行反編譯并保存為LicenseVerifier.java文件。
打開LicenseVerifier.java,將內容替換為:
package org.elasticsearch.license;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.Signature;
import java.security.SignatureException;
import java.util.Arrays;
import java.util.Base64;
import java.util.Base64.Decoder;
import java.util.Base64.Encoder;
import java.util.Collections;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.BytesRefIterator;
import org.elasticsearch.common.bytes.BytesReference;
import org.elasticsearch.common.io.Streams;
import org.elasticsearch.common.xcontent.ToXContent.MapParams;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentType;
public class LicenseVerifier
{
public static boolean verifyLicense(final License license, final byte[] encryptedPublicKeyData) {
return true;
}
public static boolean verifyLicense(final License license) {
return true;
}
}
2). 將LicenseVerifier.java上傳到ELK服務器/opt并重新編譯成LicenseVerifier.class
# javac -cp "/usr/share/elasticsearch/lib/elasticsearch-5.3.0.jar:/usr/share/elasticsearch/lib/lucene-core-6.4.1.jar:/usr/share/elasticsearch/plugins/x-pack/x-pack-5.3.0.jar” LicenseVerifier.java
3). 將 /usr/share/elasticsearch/plugins/x-pack-5.3.0.jar 拷貝出到一個單獨目錄并解壓縮,然后將剛生成的LicenseVerifier.class替換,然后重新生成x-pack-5.3.0.jar:
# cp /usr/share/elasticsearch/plugins/x-pack/x-pack-5.3.0.jar ./
# unzip x-pack-5.3.0.jar
# cp /opt/LicenseVerifier.class ./org/elasticsearch/license/
cp: overwrite ‘./org/elasticsearch/license/LicenseVerifier.class’? y
4). 重新將文件打包成x-pack-5.3.0.jar
# jar cf x-pack-5.3.0.jar *
5). 將新生成的x-pack-5.3.0.jar 拷貝到原來文件存放位置并覆蓋舊文件
# cp x-pack-5.3.0.jar /usr/share/elasticsearch/plugins/x-pack/
cp: overwrite ‘/usr/share/elasticsearch/plugins/x-pack/x-pack-5.3.0.jar’? y
6). 到官網免費申請一個月有效期的license,地址為:https://license.elastic.co/registration, 申請License文件后下載到本地后修改字段:type后面的basic為platinum,即白金版,有所有功能,然后修改有效期expiry_date_in_millis后面的數字為:1811254440000,即2027年到期,可以通過命令 #date -d '2027-5-25 22:14' +%s 生成想要的日期,也可根據需要修改節點數max_nodes。
# date -d '2027-5-25 22:14' +%s
1811254440
此處生成的1811254440后面需要再加000,因為ELK官網生成的License時間格式有毫秒,否則License更新后無效!
7).更新 License:
# curl -XPUT -u elastic 'http://localhost:9200/_xpack/license' -H "Content-Type: application/json" -d @fly-fish-27156872a-a62d-416545-9e53-8ee6d542daas-v5.json
Enter host password for user 'elastic':
{"acknowledged":true,"license_status":"expired"}[root@elk-hz opt]#
“fly-fish-2756872a-a62d-4145-9e53-8eecd6d542da-v5.json”為License文件
8). 重新啟動Elasticsearch服務,打開Kibana查看即可。
日期切換:
# date -d @2526601599999
Thu Oct 26 09:46:39 CST 82034
[root@elk-xx ~]# date -d @5526601599999
Sun Jan 13 15:06:39 CST 177101
[root@elk-xx ~]# date -d '2027-5-25 22:14' +%s
1811254440
[root@elk-xx ~]# date -d @1811254440
Tue May 25 22:14:00 CST 2027
注意官方的License文件日期后面有000,即精確到毫秒,所以文件里面所有日期都要這樣,否則生成的license無效。
默認免費許可為1個月,延長10年后效果: