服务器端的入口为src\server\kbn_server.js,这也是系统启动的核心,这里采用了mixin方式,代码结构虽然清晰,但是代码分布在各处,配置信息的传递十分复杂,其关键代码如下:
this.ready = constant(this.mixin(
configSetupMixin,
httpMixin,
loggingMixin,
warningsMixin,
statusMixin
// 还有很多项,在此不一一列举
));
追溯上面的mixin,我们可以看出,Kibana采用的WEB框架为hapi.js,其相关的配置信息尽在src\server\http\index.js中。
1. 进入调试模式
直接运行kibana,会进入生产模式,要进入调试模式,可采用–dev参数,如下:
# 请务必加上--no-base-path配置,能减少很多出错信息
.\bin\kibana.bat --dev --no-base-path
2 静态文件路由配置
在这里,同样可以添加自己需要的静态资源,可参照如下的代码格式。
// ui/public的绝对位置为src\ui\public
server.exposeStaticDir('/ui/fonts/{path*}', resolve(__dirname, '../../ui/public/assets/fonts'));
server.exposeStaticDir('/ui/favicons/{path*}', resolve(__dirname, '../../ui/public/assets/favicons'));
3 插件扫描范围
默认的插件扫描地址有两个,分别为:
1. 系统根目录下plugins文件夹,从外部安装的插件都放入此目录下,比如官方强烈推荐sense;
2. src/core_plugins目录,系统内置的插件尽放入此处,自己定制开发的插件推荐放于此处。
4 插件注册机制
这是Kibana的核心机制,所有的视图与功能都是基于插件模式,kibnana也是其中的一个插件,包含了dashboard、discover、visualize等五个模块,其中links信息用于左侧菜单信息,uiExports属性用于注册插件信息,如下:
// 以下源代码引用至src\core_plugins\kibana\index.js
uiExports: {
hacks: ['plugins/kibana/dev_tools/hacks/hide_empty_tools'],
// 用于初始化UiApp
app: {
id: 'kibana',
title: 'Kibana',
listed: false,
description: 'the kibana you know and love',
main: 'plugins/kibana/kibana',
uses: [
'visTypes',
'spyModes',
'fieldFormats',
'navbarExtensions',
'managementSections',
'devTools',
'docViews'
]
}
结论
只有理解了Kibana的插件机制,才能理解Kibana源代码的层次结构。