热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

kibana4插件开发1-基础篇

kibana4插件开发1-基础篇本文为译文,译者英文较渣,看不下去的请看原文,链接如下:https:www.timroes.de20151202writing-kibana-

kibana4 插件开发1-基础篇

本文为译文,译者英文较渣,看不下去的请看原文,链接如下:
https://www.timroes.de/2015/12/02/writing-kibana-4-plugins-basics/
原文作者:tim rose

译者tip:
想二次开发,先看官方文档:
https://github.com/elastic/kibana/blob/master/CONTRIBUTING.md#setting-up-your-development-environment
再看这篇文章可以更好的理解

  从kibana 4.2.0以后kibana可以自定义不同类型插件并提供给其他kibana用户使用。本教程系列将指导您编写您的第一个插件,并告诉你插件可以做哪些事情,例如添加自定义可视化,编写新的“app”(从4.2.0开始,kibana本身就是一个在框架中的app),或者添加新的选项卡到可视化的标签栏。

提示:kibana
4.2.0提供了一个插件安装的功能。它没有提供公共的API进行开发。然而他们的宣传中说道了插件开发,因此我决定写一个公开的教程。由于私有和公共API之间没有分离,您的插件可能会在下一个补丁版本更新后不能使用,因为它们可能会更改您插件中使用的服务。所以,如果你想开发插件,你要为一个非常具体的Kibana版本开发一个插件,你必须测试你的插件与每个Kibana版本。有关公共API的讨论可以在这个GitHub中找到。本教程版本为Kibana 4.3.0,我不会为kibana新版本更改和重新测试这个教程。

  本教程(编写Kibana插件)要求您拥有Web开发经验。以下技能是必备条件,在本教程中对这些技能不再进行讲解:
- Javascript development (npm modules; ..)
- AngularJS
- RequireJS(译者:新的版本好像改成了webpack和grunt)

  本教程系列的第一部分介绍了如何构建系统、开发插件和所有插件的基本结构。你应该阅读这部分,然后可以跳转到任何其他部分,看看不同类型的插件。


安装插件构建系统

更新:在youtube上有一个如何安装插件构建系统的视频:The Contributor’s Guide to the Kibana Galaxy(链接:https://www.youtube.com/watch?v=FZEKhPz7SPQ)
在开始开发之前,您将需要基本的Web开发环境,即安装NodeJS和npm。

1.下载Kibana:要开发插件,您需要一个本地的Kibana实例进行开发。由于我们需要插件的重新加载功能,您需要下Kibana的源代码。通过git检出或在GitHub上选择,从https://github.com/elastic/kibana下载源代码为zip文件。在本教程中,我们将使用Kibana 4.3.0。

2.在Kibana中安装依赖关系:下载了Kibana源代码,您需要npm install 在源代码中执行以安装所有必需的依赖关系。

3.启动一个可用的Elasticsearch:除了运行Kibana,你还需要一个Elasticsearch实例,Kibana连接到该实例。您可以在其中config/kibana.yml配置的elasticsearch的URL 。也可以从Kibana开发环境启动Elasticsearch实例。这样有一个优点,Kibana知道它需要什么Elasticsearch版本,并将启动一个适当的版本。要启动Elasticsearch实例,请在Kibana文件夹中启动命令行输入以下内容:

> npm run elasticsearch

可能需要一些时间,下载相应的版本并启动它。完成后,您将看到一个包含端口和集群名称的表。
4.启动 Kibana完成后,您可以通过在Kibana源代码文件夹中执行以下命令来启动kibana:

> npm start

这将在开发模式下启动Kibana,这意味着如果您对其进行更改,它将自动重新加载所有插件。启动可能需要几分钟,完成后,您看到一些关于“Lazy optimization success”的消息。
您应该将插件的源代码放在installedPlugins文件夹中。Kibana将自动扫描此文件夹以进行更改。注意:你不能链接你的插件文件夹到这个文件夹,由于一些依赖解析问题。您的插件源代码实际上必须放在该文件夹中。(这段installedplugins存疑!!!!)
要创建新插件,请在installedPlugins文件夹中创建一个新文件夹。文件夹的名称必须是您的插件的名称,这将在下一章中介绍。
每次你在插件中改变一个文件,Kibana将重新进行打包和优化。这可能需要一些时间。您将在控制台上看到这一点,您在其中启动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

当Lazy optimization success,这些更改就会应用到kibana。成功后,你可以刷新浏览器查看。有时Kibana无法正确重新加载更改。在这种情况下,关闭再重新启动看看是否修复了这个问题。


插件基础

每个插件是一个npm模块。所以它至少需要两个文件。

你需要把一个package.json放入你的插件的根文件夹。它是常规的npm包管理文件。您至少需要指定插件名称、版本。对于我们的第一个插件,包文件可能类似于以下内容:

{
"name": "tr-k4p-myplugin",
"version": "0.1.0"
}

package.json的name一定要与插件名和文件夹名相一致。
第二个必须的文件是主模块文件:index.js,除非你在package.json中指定了其他文件名。它是npm模块,并设置你的插件需要的一切。您的模块必须有一个kibana插件的新实例,如下所示:

module.exports = function(kibana) {
return new kibana.Plugin({
// Your plugin configuration
});
};

这两个文件组成了一个最简单的插件,Kibana可以加载,它确实,很令人惊讶,但还远远不够。在本教程的以下部分中,我们将看到您可以插入到index.js(和更多文件)中的所有代码,以便用使插件来
功能更加强大。

除了这两个文件,大多数插件将在其根目录中有一个名为public的文件夹。所有不会运行服务器端但会被传输到客户端浏览器的文件都会进入这个文件夹。(应该指的静态文件)

包和插件名称

您用的包ID和名称应该是全局唯一的。它将被Kibana用来解析你的插件中的文件,不应该与任何其他插件混淆。这就是为什么我建议加上一些自定义字符串来标识你的插件的原因。例如我在本教程系列的大多数部分使用tr-k4p(Tim Roes,Kibana 4 Plugin)作为前缀。

Yeoman Generator

Yeoman Generator,帮助你引导Kibana插件。你可以在npm package generator-kibana-plugin(链接:https://www.npmjs.com/package/generator-kibana-plugin )中找到它。强烈建议实际使用这个Yeoman Generator。我们将不会在第一部分使用它,因为它创建了很多示例代码,我们将反复详细地查看所有必需的文件。但在教程后,你应该使用Yeoman Generator。

要获取有关如何使用Yeoman Generator的说明,请参阅相应npm页面(上段中的链接)。

在最新版本中,使用Yeoman Generator还将创建构建任务,自动启动您的Kibana实例。所以如果你使用Yeoman Generator,跳过上面的步骤4,不要启动自己的Kibana。

如何发布和安装插件

即使你的插件还没有什么功能,它有最少的代码要加载到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插件文件。( https://www.elastic.co/guide/en/kibana/master/kibana-plugins.html )

插件类型

插件可以通过几种方式扩展Kibana。一个插件可以有到一个或多个扩展功能,以提供新的功能。最常见的扩展功能很可能是:

  • visTypes: 向Kibana添加新的可视化类型。
  • apps : Kibana有可能添加完全独立的应用程序,可以提供新的功能。一个着名的例子可能是timelion,这是Kibana内的一个应用程序。
  • fieldFormats : 将新字段格式化程序添加到Kibana
  • 其他
    本教程系列将主要关注向Kibana添加新的可视化。如果你想为其他扩展点创建插件,我建议查看一些其他插件的来源(也有一些在Kibana的核心),这是类似于你想做的。

推荐阅读
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • uniapp开发H5解决跨域问题的两种代理方法
    本文介绍了uniapp开发H5解决跨域问题的两种代理方法,分别是在manifest.json文件和vue.config.js文件中设置代理。通过设置代理根域名和配置路径别名,可以实现H5页面的跨域访问。同时还介绍了如何开启内网穿透,让外网的人可以访问到本地调试的H5页面。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • node.jsrequire和ES6导入导出的区别原 ... [详细]
author-avatar
liunian007
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有