首页 > 代码库 > 写Kibana插件——字段格式化器
写Kibana插件——字段格式化器
Writing Kibana 4 Plugins – Field Formatters
在阅读本教程之前,您需要阅读第1部分 - 基础知识。
在本教程的前面部分,我们主要关注如何编写自定义可视化类型。除了自定义可视化功能,Kibana还有一些扩展点。其中一个扩展点是字段格式化程序。可以为特定索引模式设置中的任何字段选择字段格式化程序。然后在显示此字段的值时使用它,并且可以以其他方式转换或显示它,然后是普通数据。
有一些字段格式化程序构建在Kibana上(例如,将数字字段解释为颜色)。本部分教程系列介绍了如何编写自己的字段格式化程序。我们将创建一个Trend字段格式化程序。它将在一个数字或百分比字段值后面显示向上或向下箭头,取决于数字是正还是负。然后,该格式化器可用于内容代表任何形式趋势的字段。
Github地址:https://github.com/timroes/tr-k4p-fieldformatters
Registering a new field formatter
注册新的字段格式化器类似于注册新的可视化类型(如第2部分所示)。您只需在插件的index.js文件中的uiExports中添加一个新数组:
// Rest of file stripped (see GitHub for full file) uiExports: { fieldFormats: [‘plugins/tr-k4p-fieldformatters/trend‘] }
这将在您的插件公共文件夹中的trend.js文件注册到字段格式。
注意bug:在所有当前的Kibana版本中(从Kibana 4.4.1开始),fieldFormats数组不正确使用。作为此Kibana版本的解决方法,请将您的字段格式添加到visTypes数组。它将工作,因为trend.js文件无论如何需要注册到适当的注册表,所以它在index.js中出现的数组无关紧要。有关此问题的进展,请参阅GitHub上的#6040。
Creating your field formatter
为了创建trend字段格式化器,我们现在将在我们插件的公共目录中创建trend.js文件(如本系列前面部分的可视化)。该文件的内容将如下所示:
function TrendProvider(Private) { var _ = require(‘lodash‘); var FieldFormat = Private(require(‘ui/index_patterns/_field_format/FieldFormat‘)); _.class(Trend).inherits(FieldFormat); function Trend(params) { Trend.Super.call(this, params); } Trend.id = ‘tr-trend‘; Trend.title = ‘Trend‘; Trend.fieldType = [ ‘number‘, ‘percentage‘ ]; Trend.prototype._convert = function(value) { // TO BE DONE }; return Trend; } require(‘ui/registry/field_formats‘).register(TrendProvider);
该文件将包含一个简单的提供程序函数,它将创建格式化程序类。在我们的例子中,我们将它命名为TrendProvider。此功能将在最后一行注册到字段格式注册表。
在提供程序功能中,我们必须遵循以下步骤:
从ui / index_patterns / _field_format / FieldFormat继承FieldFormat类,它通过使用lodash在前几行完成。
之后,我们必须设置新的Trend类的一些属性,这将配置我们的字段格式:
id是该字段格式的唯一标识符,该格式应尽可能唯一,因为Kibana使用它来引用该字段格式。使用前缀的id(与您的个人/公司的ID)不会有任何伤害。
字段格式的title是当用户想要在Kibana的设置页面中选择适当的字段格式时显示给用户的字符串。
fieldType数组包含所有字段类型,对于该格式化程序,即在Kibana设置中编辑适当字段时将显示的所有类型。此数组中的有效类型为:number,boolean,date,ip,attachment,geo_point,geo_shape,string,murmur3(Murmur3插件散列),未知(未知字段类型)。
实际的转换是在你的类的_convert函数中完成的,我们稍后会来。
最后但并非最不重要的是,您的提供者必须返回刚刚创建的字段格式类。
Formatting values
实际的格式化逻辑是在您的格式化程序的_convert方法中完成的。该函数将该字段的值作为第一个参数。你只需要从函数返回任何你想要表示的字段。对于我们的trend格式化程序,可以使用以下函数:
Trend.prototype._convert = function(value) { return (value > 0) ? value + ‘ ↑‘ : value + ‘ ↓‘; };
为了方便起见,我们不会在这里检查0值,只需在值后面添加一个向上或向下箭头,取决于它是正还是负。
如果您的插件现在被正确加载,您可以转到Kibana中的任何索引设置,编辑一个数字或百分比字段,则你可以在格式化程序的选择框中看到您的trend格式化程序。如果将其用于字段,则箭头将附加到该字段值显示的位置。
无论函数返回什么都将被渲染为纯文本,即不允许HTML。但是可能有几种情况,您要将HTML代替纯文本作为格式化程序(例如,图像格式化程序,使用输出中的颜色等)要使用HTML渲染,您可以使用一个对象而不是一个函数,它们有两个键:html和text:
Trend.prototype._convert = { text: function(value) { // Return a textual representation of the value }, html: function(value) { // The return value of this function can contain HTML, which will be rendered. } };
如果你如上所示直接指定函数为_convert
,则文本功能完全一样。html函数的返回值可以包含将被呈现的HTML标记。
只要Kibana能够在需要显示值的地方(例如,Discover选项,可视化等等)几乎到处都可以使用HTML函数,并且文本功能将在某些HTML不适合的地方使用(例如,在仪表板上应用过滤器过滤值时,过滤条中显示的值将呈现为纯文本)。
对于HTML函数,Kibana还将该字段本身作为函数的第二个参数。这可以用来检索关于正在格式化实际字段的一些信息,例如field.type以获取其实际类型(例如,如果您支持多个字段类型)。但请注意,在Kibana无法成功确定字段类型的情况下,该值(完整字段值)可能为null或undefined
,例如当显示聚合结果的值时。第二个参数不适用于文本方法。
完整的例子,看看GitHub上的trend.js文件。
What‘s next?
字段格式化器可以更复杂,例如,携带自身的设置让用户自定义格式化。如果要创建一个更复杂的字段格式化程序,我建议您查看Kibana中现有的格式化程序。其中几个包含更多复杂的设置实现(例如Color或Date格式化程序)。
如果您有任何问题可以随意发表评论,请与我联系,或使用官方的Elasticsearch论坛。
写Kibana插件——字段格式化器