kibana7.0.1插件开发说明
kibana7.0.1插件开发说明
项目中需要用到kibana来进行服务器集群性能监控,以及服务状态的监控,尝试使用sentinl来实现,发现sentinl最新版本只支持6.6.0,而kibana最新版本为7.1,sentinl无法在kibana7.1中安装,kibana自带的告警功能因为协议是BASE,也无法使用,只好尝试自己开发插件来满足项目需要,现记录下插件开发过程的关键点和遇到的坑,希望能帮助到开发插件的童鞋。
本文将以windows7做为目标操作系统,描述插件开发流程和相关知识。
1、搭建kibana插件开发环境
kibana插件开发首先必须搭建开发环境,开发环境搭建步骤如下:
- 通过git克隆kibana源码,在命令行下执行:
git clone https://github.com/elastic/kibana.git kibana
- 获取源码成功后,进入源码目录kibana,根据版本需要,切换并创建本地分支,我这里使用的版本是v7.0.1;
- 查看kibana目录中.node-version文件中node.js版本,确保系统安装对应版本的node.js,kibana的7.0.1分支对应node.js版本为10.15.2;
- 安装最近版yarn,用于nodejs的模块管理和编译,yarn官网地址,当前最新版本为yarn-1.16.0;
- 在kibana目录中,执行命令,获取插件开发需要依赖项;
yarn kbn bootstrap
- 插件开发需要的elasticsearch,可以使用开发环境自带的快照创建,也可以直接使用正式的elasticsearch实例,请自行选择,如果使用快照模式,执行如下命令:
yarn es snapshot
创建快照,在快照中创建测试用logstash数据,执行如下命令:
node scripts/makelogs
使用快照模式时这里有个坑,需要注意下,每次快照的elasticsearch实例重启后,需要重新创建logstash数据。
- 检查测试开发环境是否搭建成功,执行如下命令:
yarn start
等待开发服务器启动完成,打开浏览器访问 http://localhost:5601,可以正常访问,恭喜你,开发环境搭建成功。
2、插件开发预备知识
- 插件支持界面,需要了解kibana提供的UI界面库,界面库参考地址:https://elastic.github.io/eui/#/
- kibana插件使用了node.js的hapi框架进行组织,hapi框架说明参考地址:https://hapijs.com/api#serverrouteoptions
- kibana插件处kibana自身的模块外,支持使用node.js的其他模块扩展功能,可以通过”npm install XXX”安装,安装新模块后,必须在插件目录执行命令“yarn kbn bootstrap”更新信息。
3、开发说明
- 创建插件,进入kibana目录,执行如下命令:
node scripts/generate_plugin my_plugin_name
my_plugin_name为将要创建的插件名称,回答一些问题后(问题直接默认),将在kibana的同级中自动创建kibana-extra\my_plugin_name目录,插件目录中已创建好基本的代码结构,这里有个坑需要注意,kibana源码所在目录名必须为"kibana",如果是其他名字,创建插件将失败。
- 插件目录结构说明:
– /node_modules # 插件依赖包
– /public # 插件web客户端代码
– /public/hack.js # 插件全局事件定义,例如:键盘事件
– /public/components\main\main.js # 插件客户端代码,包括UI呈现方式(需要kibanaUI界面库),客户端逻辑
– /server # 插件服务端代码
– /server/routes/example.js # 插件服务端处理逻辑
– /translations # 插件国际化
– /package.json # node.js模块配置文件,创建插件时自动生成
– /index.js # node.js初始化文件
-
/my_plugin_name/index.js文件
用于插件初始化,该文件中有3处比较重要:
第1个位置,定义了插件服务端需要的插件项,如果需要访问elasticsearch必须定义;
第2个位置,服务端可以通过server.app.xxx保存对象,在服务器内部模块之间共享;
第3个位置,获取的kibana服务端用于连接elasticsearch实例的连接器对象,通过该对象我们可以调用kibana的JavascriptAPI访问elasticsearch实例,kibana的JavascriptAPI参考:https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html; -
/my_plugin_name/server/routers/example.js文件
定义了插件服务端处理逻辑,插件客户端通过Ajax提交信息到服务端对应路由处理,服务端路由可以再通过(3)中定义的连接器对象访问elasticsearch,处理结果再返回给客户端;
-
/my_plugin_name/public/components/main/main.js文件
定义了插件客户端界面和逻辑,处理时需要注意一下几点:
第1点:状态的定义,文件中this.state对象统一管理UI元素状态,通过this.setState方法调用,在改变状态后框架将自动调用render方法重画客户端UI;
第2点:UI组件第一次将调用componentDidMount方法,这个方法中可以做一些初始工作。
第3点:客户端访问服务端,通过http处理,支持GET、PUT、POST、DELETE标准操作。
4、调试插件
- 进入插架所在目录,执行命令:
yarn start
启动插件调试服务器,启动正常通过浏览器访问本地http://localhost:5601,开始调试。
- 任何客户端还是服务端代码修改,框架都将自动重新装载,实时查看修改结果。
- 采用日志输出跟踪中间结果,日志语句:console.log();
5、插件编译打包
在插件所在目录,执行命令:
yarn build
框架将自动创建build目录,并在目录中创建打包文件my_plugin_name-7.0.1.zip。
6、插件安装
在kibana的生成环境目录中,执行命令:
bin/kibana-plugin install file:///yourpath/kibana-extra/mycol/build/my_plugin_name-7.0.1.zip
安装创建的插件。
具体可参考,我的mycol项目:https://github.com/cqoyq/mycol