1:elasticsearch插件分类简述
2:Java插件开发要点
3:如何针对不同版本elasticsearch提供多版本的插件
4:插件具有外部依赖时遇到的一些问题(2016-09-07更新)
elasticsearch插件分类简述
elasticsearch插件分为Site插件及Java插件,前者比如使用最广泛的head插件,而后者比如elastic官方提供的商业插件shield。
需要注意的是Site插件从elasticsearch2.3.0版本开始已被标记为Deprecated,并将从5.0.0版本开始被正式移除,相关的Site插件将被整合到kibana中,或者单独部署web server。具体如何整合我还不太清楚。
下文主要记录Java插件的开发要点,以maven管理为例。
Java插件开发要点
以下一一个简单功能为例来说明开发流程,该插件记录所有对部署elasticsearch节点的请求,并且根据指定的配置参数,过滤掉敏感操作(DELETE)
1:Java插件入口
继承org.elasticsearch.plugins.Plugin类的入口类,并实现onModule方法。该类中可以通过settings访问elasticsearch配置文件,获取配置信息,并加载下一步的handler,具体实现代码如下所示:
1 package org.elasticsearch.es.plugin; 2 3 import org.elasticsearch.common.settings.Settings; 4 import org.elasticsearch.rest.RestModule; 5 import org.elasticsearch.plugins.Plugin; 6 7 @SuppressWarnings("static-method") 8 public class MyRestPlugin extends Plugin { 9 10 private final Settings settings; 11 12 public MyRestPlugin(Settings settings){ 13 this.settings = settings; 14 } 15 16 @Override 17 public String name(){ 18 return "MyRest"; 19 } 20 21 @Override 22 public String description(){ 23 return "ElasticSearch Plugin"; 24 } 25 26 public void onModule(RestModule module){ 27 String isPluginEnabled = settings.get("ld.enabled"); 28 MethodAuthenticator.setEnabledStr(isPluginEnabled); 29 if(isPluginEnabled != null && isPluginEnabled.toLowerCase().equals("true")){ 30 MethodAuthenticator.setIsPluginEnabled(true); 31 String[] denyMethods = settings.getAsArray("ld.deny", new String[]{}); 32 if(denyMethods != null){ 33 MethodAuthenticator.setDenyMethods(denyMethods); 34 } 35 } else { 36 MethodAuthenticator.setIsPluginEnabled(false); 37 } 38 39 module.addRestAction(MyRestHandler.class); 40 } 41 42 }