写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论坛

原文地址:https://www.timroes.de/2016/02/17/writing-kibana-4-plugins-field-formatters/

时间: 2024-12-29 21:10:58

写Kibana插件——字段格式化器的相关文章

写Kibana插件——可视化使用数据

Writing Kibana 4 Plugins – Visualizations using Data 在阅读本教程之前,您需要阅读第2部分 - 简单可视化. 在本教程系列的前一部分(这是本部分必读的一节)中,您已经学会了创建一个简单的可视化,它不需要访问Elasticsearch的数据.在这一部分,我们将编写另外一个插件,使用聚合(像极了可视化)从Elasticsearch访问数据. 我们将创建一个非常简单的标签云插件,它将桶名称显示为标签,并且根据指标聚合的结果决定了标签的字体大小.如果你

写kibana4插件——基础知识

Writing Kibana 4 Plugins – Basics 从kibana4.2.0以上,可以为kibana编写自定义插件,并未所有kibana用户提供.本教程系列将引导您完成编写第一个插件的过程,并向您展示插件提供的一些可能性,例如添加自定义可视化,编写新的"应用程序"(从4.2.0开始,就你所知,Kibana本身和你喜欢它仅仅作为框架中的一个应用程序),或者在可视化的检查窗格中添加新的选项卡. 严重警告:Kibana提供了一个关于如何从4.2.0安装插件的界面.它不提供公共

一步一步写jQuery插件

转载自:http://www.cnblogs.com/joey0210/p/3408349.html 前言 如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui 内置web项目里了.至于使用jquery好处这里就不再赘述了,用过的都知道.今天我们来讨论下jquery的插件机制,jquery有着成千上万的第三方插件,有时我们写好了一个独立的功能,也想将其与jquery结合起来,可以用jquery链式调用,这就要扩展jquery,写成插件形式了,如下

第四节:格式化器如何序列化类型实例

本节要深入讨论一下格式化器如何序列化对象的字段.掌握了这些知识后,可以更容易地理解本章后面要解释的一些更高级的序列化和反序列化技术. 为了简化格式化器的操作,FCL在System.Runtime.Serialization命名空间提供了一个FormatterServices类型.该类型只包含静态方法,而且该类型不能实例化.以下步骤描述了格式化器如何自动序列化一个应用了SerializableAttribute的对象. 格式化器调用FormatterServices的GetSerializable

写JQuery 插件 什么?你还不会写JQuery 插件

http://www.cnblogs.com/Leo_wl/p/3409083.html 前言 如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui 内置web项目里了.至于使用jquery好处这里就不再赘述了,用过的都知道.今天我们来讨论下jquery的插件机制,jquery有着成千上万的第三方插件,有时我们写好了一个独立的功能,也想将其与jquery结合起来,可以用jquery链式调用,这就要扩展jquery,写成插件形式了,如下面就是一个简

自制MVC框架的插件与拦截器基础

上篇谈到我自己写的MVC框架,接下来讲讲插件及拦截器! 在处理一些通用的逻辑最好把它封装一个插件或者拦截器,以便日后可以直接拿过来直接使用.在我的框架中可以通过继承以下抽象类来实现插件或者拦截器. 1. AspectInterceptor抽象类 处理动态织入的AOP拦截器,Stephen.View框架中的拦截器抽象类,所有需要动态拦截器必须实现该类,该拦截器原理是通过aspectsharp实现的.该拦截器适用于控制层的拦截,且要使控制器类支持动态拦截必须给控制器加上DynamicAttribut

第一次写jquery插件,来个countdown计时器吧

之前同学做个购物商城秒杀活动需要计时器的功能,在用jquery提供的countdown插件时,一直报错,貌似还需要依赖除jquery之外的其他插件,搞了半天也没搞成功,就叫我帮忙写个.然而我并没有写过插件,不过刚好趁这次端午好好地锻炼一把吧,顺便在这儿存个代码,自己的思路不好,大神们请不要见笑哈... 废话不多说,直接上代码: =======================================请叫我华丽的分割线=====================================

Asp.Net Web API 2第十二课——Media Formatters媒体格式化器

前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本教程演示如何在ASP.NET Web API中支持额外的媒体格式. Internet Media Types——Internet的媒体类型 媒体类型,也叫做MIME类型,标识了一片数据的格式.在HTTP中,媒体类型描述了消息体的格式.一个媒体类型由两个字符串组成:类型和子类型.例如: text/html image/png

什么?你还不会写JQuery 插件

前言 如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui 内置web项目里了.至于使用jquery好处这里就不再赘述了,用过的都知道.今天我们来讨论下jquery的插件机制,jquery有着成千上万的第三方插件,有时我们写好了一个独立的功能,也想将其与jquery结合起来,可以用jquery链式调用,这就要扩展jquery,写成插件形式了,如下面就是一个简单扩展Jquery对象的demo: //sample:扩展jquery对象的方法,bold