写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/

posted @ 2017-08-10 08:41 流浪三毛 阅读(...) 评论(...) 编辑 收藏