首页 > 代码库 > 写kibana4插件——基础知识
写kibana4插件——基础知识
Writing Kibana 4 Plugins – Basics
从kibana4.2.0以上,可以为kibana编写自定义插件,并未所有kibana用户提供。本教程系列将引导您完成编写第一个插件的过程,并向您展示插件提供的一些可能性,例如添加自定义可视化,编写新的“应用程序”(从4.2.0开始,就你所知,Kibana本身和你喜欢它仅仅作为框架中的一个应用程序),或者在可视化的检查窗格中添加新的选项卡。
严重警告:Kibana提供了一个关于如何从4.2.0安装插件的界面。它不提供公共API来开发。然而,他们宣扬编写插件,所以我决定发布这个教程。由于私有和公共API之间没有分隔,因此您的插件可能会随着下一个修补程序版本更新而中断,因为它们可能会更改您使用的服务。所以请记住,如果你想开发插件,你开发一个非常具体的Kibana版本的插件,你必须使用每个Kibana版本测试你的插件。有关公共API话题的全面讨论可以在这个GitHub issue中找到。本教程也是针对Kibana 4.3.0编写的(并进行了测试),我很可能不会更改并重新测试每个新的Kibana版本的教程。但请随时评论您在评论部分找到的任何更改!
本教程(并且一般编写Kibana插件)要求您具有Web开发经验。以下技能是先决条件,本教程中不会解释:
- JavaScript 开发(npm模块;…)
- AngularJS
- RequireJS
本教程系列的第一部分介绍了如何设置构建系统以开发您的插件以及任何类型的插件的基本结构的基础知识。您应该阅读本部分,然后跳转到查看不同类型插件的其他任何部分。
Setup build system
更新:Kibana背后的家伙有一个关于如何在YouTube上设置构建系统的视频:The Contrubutor‘s Guide to the Kibana Galaxy(Kibana Galaxy贡献者指南)
开始开发之前,您将需要通常的Web开发设置,即安装NodeJS和npm。
1。Download Kibana 要开发插件,您将需要一个本地的Kibana实例进行开发。由于我们需要插件重新加载功能,这在生产代码中不可用,因此您需要下载Kibana版本的源代码,以便开发插件。通过git或者在GitHub上选择适当的标签,然后从https://github.com/elastic/kibana下载源代码作为zip文件。在本教程中,我们将使用Kibana 4.3.0。
2。Install dependencies in Kibana 一旦下载了Kibana源码,您需要在源代码中执行npm install来安装所有必需的依赖项。
3。Start up an appropriate Elasticsearch 除了运行的Kibana,您还需要一个Elasticsearch实例,Kibana应连接到该实例。一个选项是使用任何正在运行的Elasticsearch实例(您可以在其中配置config / kibana.yml文件中的URL)。另一个选择是从Kibana开发环境启动一个Elasticsearch实例。这具有的优点是,Kibana知道Elasticsearch版本的要求,并将启动一个适当的版本。要启动Elasticsearch实例,请在Kibana文件夹中键入以下内容:
> npm run elasticsearch
可能需要一些时间才能下载适当的版本并启动它。一旦完成,您将看到一个带有端口和集群名称的表。
4。Start up Kibana 一旦完成,您可以通过在Kibana源代码文件夹中执行以下命令来启动kibana:
> npm start
这将在开发模式下启动Kibana,这意味着如果您对其进行更改,它将自动重新加载所有插件。启动可能需要几分钟,一旦您看到有关“Lazy optimization success”的消息,就表示完成。
您应该将插件的源代码放在installedPlugins文件夹中。Kibana将自动检测此文件夹进行的更改。注意:由于一些依赖解决问题,将插件文件夹符号链接到此文件夹还不够。您的插件源代码实际上必须放在该文件夹中。
在文件夹installedPlugins下创建一个新的文件夹以创建一个新的插件。该文件夹的名称必须是插件的名称,这将在下一章中介绍。
每次你只要更换插件中的文件时,Kibana都会重新打包并优化源码。这可能需要一些时间(为本教程创建的简单示例插件大约10秒)。在启动Kibana的地方,您将在控制台上看以下信息:
restarting server due to changes in - "installedPlugins/tr-k4p-clock/index.js" server log [21:49:59.323] [info][status][plugin:tr-k4p-clock] Status changed from uninitialized to green - Ready [...] server log [21:49:59.421] [info][listening] Server running at http://0.0.0.0:5601 optmzr log [21:50:07.177] [info][optimize] Lazy optimization started optmzr log [21:50:13.834] [info][optimize] Lazy optimization success in 6.66 seconds
一旦懒惰优化成功,更改就会应用。一旦成功,您可以刷新浏览器以查看您的更改。有时Kibana无法正确地重新加载更改。在这种情况下,只需将其杀掉并重新启动(可能需要一两分钟),看看是否可以解决您的问题。
Plugin Basics
每个插件都是一个npm模块。所以它需要至少两个文件。
您需要将package.json放入插件的根文件夹中。它是常规的npm包文件。您至少需要指定插件名称,但也可以指定一个版本。我们的第一个插件的包文件可能如下所示:
{ "name": "tr-k4p-myplugin", "version": "0.1.0" }
package.json中的名称必须等于您的插件所在文件夹的名称。(实际上这并不完全正确,但是稍后您可能会在使用文件夹名称和pacakage名称不一样的时候感到困惑。另外安装不遵循这些规则的已发布的插件可能会变得复杂和混乱。所以我强烈建议使用相同的包名称和文件夹名称!)
第二个必需的文件是主模块文件,它必须被命名为index.js,除非你在你的package.json中指定了其他的东西。它是npm模块,并设置您的插件需要的一切。您可以引用传递给您的模块的kibana对象。您的模块必须实例化一个新的kibana插件实例,如下所示:
module.exports = function(kibana) { return new kibana.Plugin({ // Your plugin configuration }); };
这两个文件构成了最简单的插件,Kibana可以加载它,并且令人惊讶的是 - 迄今为止没有其它内容。在本教程的以下部分中,我们将介绍可以插入到index.js(和更多文件)中的所有代码,以填充您的插件的生活。
除了这两个文件,大多数插件都将在其根目录中有一个名为public的文件夹。所有不会运行在服务器端但将被传输到客户端浏览器的文件都进入该文件夹。
Package/Plugin Name
您选择的包ID /名称应该是全局唯一的。它将被Kibana用于解析插件中的文件,不应与任何其他插件相冲突。这就是为什么我推荐使用一些自定义字符串来标识你的组织。例如。在本教程系列的大部分部分,我使用tr-k4p(Tim Roes,Kibana 4 Plugin)作为前缀。
Yeoman Generator
有一个yeoman生成器来帮助你引导一个Kibana插件。你可以在npm package generator-kibana-plugin中找到它。强烈推荐实际使用该发生器。第一部分我们将不会使用它,因为它创建了大量的示例代码,我们将会详细地查看所有需要的文件。但是在教程之后你应该使用生成器。
要了解如何使用发生器的说明,请参阅它的npm页面。
从最新版本开始,使用生成器也将创建构建任务,这将自动启动您的Kibana实例。所以如果你使用发生器跳过上面的步骤4,不要启动你自己的Kibana。
How to publish and install plugins
即使你的插件还没有做任何事情,它有最少的代码被加载到Kibana。
在开发过程中,您不需要安装插件,因为我们正在使用installedPlugins目录。但是一旦你完成了你的插件,你可能需要将它安装到一些真正的Kibana实例。
要发布您的插件,您基本上需要压缩目录的内容。
关于node_modules的提示:如果您需要来自package.json的运行时依赖关系,则需要将这些依赖项(即适当的node_modules子文件夹)捆绑到zip中。如果您使用如上所述的生成器,则可以执行npm run build构建以创建捆绑的zip文件。
您必须将此zip压缩在某处,并将其安装在您的Kibana实例中,如下所示:
bin/kibana plugin --install plugin-name -u https://url.to/plugin
您还可以使用文件架构指定要从本地文件夹进行安装的URL。
有关安装插件的更多文档可以在Kibana Plugin文档中找到
Different plugin types
插件可以以几种方式扩展Kibana。一个插件可以连接到一个或多个扩展点,以提供新的功能。最常见的扩展点很可能是:
- visTypes - 向Kibana添加新的可视化类型。
- apps - Kibana有可能添加完全分离的应用程序,可以提供新的功能。一个著名的例子可能是Timelion,一个Kibana的时间序列作曲家,这是Kibana的一个应用程序。
- filedFormats - 添加新字段格式化到Kibana
- 和其他几个
本教程系列将主要关注向Kibana添加新的可视化。如果你想为其他扩展点创建插件,我会建议您查看一些其他插件的源代码(还有一些在Kibana的核心),这与您想要做的类似。
What’s next?
在以下部分中,我们将展示不同类型的插件,并创建更有意义的插件。对于您在以下章节中看到的所有内容,您将需要创建上述的package.json并按照所述进行加载。在这一章中不再赘述。准备写你的第一个简单的可视化?跳转到本教程系列的第二部分。如果您对其他类型的插件感兴趣,请查看此页面顶部的相关帖子框
写kibana4插件——基础知识