kiabana访问自定义html页面,【翻译】Kibana 字段的自定义展示格式开发

Kibana 4.1 引入了一个新特性叫字段展示格式(field formatters),让我们可以实时转换字段内容成更形象的样式。这个特性帮助我们不修改数据的存储方式,而用另一种方式显示它。有关 field formatters 的介绍,可以阅读之前一篇博客。

本文的目的,则是带大家过一遍 field formatters 的开发流程。从 field formatter 接口开始,自己实现一个基础的 formatter,可以字段给 error 单词加高亮效果,最后完成整个解决方案。

起步

Kibana 开发环境的搭建介绍可以在 Kibana repository 看到。

从 Kibana 根目录触发,field formatters 相关代码存在 /src/ui/public/stringify 目录下。目录结构如下所示:

/stringify |–type //包括各种 formatter |–icons |–editors //formatter 用来请求和显示附加信息的 HTML 页面 |–tests |–register.js //每个 formatter 都要在这里面注册

Kibana 4.1 里,formatters 位置则在 /src/kibana/components/stringify。如果你是看的 4.1 版,可能跟本文讲的路径稍有区别,请自动对应查找一下,本文以 git master 为准。

现在,让我们在 type 目录 下创建一个文件叫 Highlight.js,下面是初始代码:

define(function (require) {

return function HighlightFormatProvider(Private) {

var _ = require('lodash');

var FieldFormat = Private(require('ui/index_patterns/_field_format/FieldFormat'));

_.class(Highlight).inherits(FieldFormat);

function Highlight(params) {

Highlight.Super.call(this, params);

}

Highlight.id = 'highlight';

Highlight.title = 'Highlight';

Highlight.fieldType = ['string'];

Highlight.prototype._convert = {

text: _.escape,

html: _.escape

};

return Highlight;

};

});

每种字段格式,都实现为扩展 FieldFormat 的类。Highlight.id 用在 Kibana 内部跟踪 formatter,每个 formatter 必须采用不同的 id。Highlight.title 显示在 formatter 下拉选择框里,Highlight.fieldType 则描述自己适用于哪种类型的字段内容。

Highlight.prototype._convert 是实际进行格式化的地方。包括有 text 和 html 两种方法。text 方法用于 tooltips, filters, legends, 和 axis markers。html 方法用于搜索表格内。两者都接收字段内容为输入,输出我们希望的展示内容。如果两个方法是一样的,可以直接赋值 Highlight.prototype._convert 为一个函数。给 error 单词加高亮的代码如下:

Highlight.prototype._highlight = function (val, replace) {

return _.escape(val).replace(/(error)/g, replace);

};

Highlight.prototype._convert = {

text: function(val) {

return this._highlight(val, function convertToUpperCase(match) {

return match.toUpperCase();

});

},

html: function(val) {

return this._highlight(val, '$&');

}

};

只要字段内容中有 error 文本字样,我们就会根据 HTML 或者 text 场景选择包含进 mark 元素或者是转换成大写形式。注意这里使用的 _.escape(val) 语句,这句可以用来放置 HTML 注入和跨站脚本攻击。

然后需要注册这个新的 field formatter。在 register.js 里添加:

fieldFormats.register(require('ui/stringify/types/Highlight'));

未来,我们(Kibana 开发组)可能会把这个功能以插件形式提供,届时注册方法会更加简单。

现在我们可以对 string 类型的字段选择 Highlight 作为 field formatter 了!

imgpxy.php?url=gnp.tceles%2F308606a8fcdc04b3tlb%2Fstessa%2Foc.citsale.www%2F%2F%3Asptth

在 Discover 页测试效果:

imgpxy.php?url=gnp.rorre-thgilhgih%2F84649295ae48a8dbtlb%2Fstessa%2Foc.citsale.www%2F%2F%3Asptth

更通用化

插件已经可以运行了,但是我们如果想更通用化一点,不单单可以用来高亮 error 字眼呢?当然不用给每个单词开发一种 formatter,我们可以提供一个输入正则表达式的方式。

在 editor 目录,添加一个叫 highlight.html 的文件,内容如下:

Pattern

然后回到 Highlight.js 里,我们需要定义 highlight.html 作为我们的编辑页面,然后更新我们的 _highlight 方法,使用输入文本作为匹配时的正则表达式。

Highlight.editor = require('ui/stringify/editors/highlight.html');

Highlight.prototype._highlight = function (val, replace) {

var escapedVal = _.escape(val);

var highlightPattern;

try {

var inputRegex = this.param('pattern').split('/');

var pattern = inputRegex[0] || inputRegex[1];

var flags = inputRegex[2];

highlightPattern = new RegExp(pattern, flags);

} catch(e) {

return escapedVal;

}

return escapedVal.replace(highlightPattern, replace);

};

示例

如果在应用 formatter 之前,就能看到输入的正则表达式的效果就更好了。Kibana 里提供了一个 directive 指令让我们可以在修改表达式时观察示例变化。

我们可以增加一些输入字段,并且在模板中加入这个指令。也就是在 highlight.html 后面追加下面这段:

对应的,在 Highlight.js 里添加下面这段:

Highlight.sampleInputs = [

'Hello world',

'The quick brown fox jumps over the lazy dog',

'112345'

];

最终结果如下:

imgpxy.php?url=gnp.elpmas%2F0a191408d181dbb8tlb%2Fstessa%2Foc.citsale.www%2F%2F%3Asptth

结论

field formatter 接口提供了非常简便的办法让我们定制字段内容的展示方式。Kibana 自带了好几种 formatter,不过如果你没发现比较合适的,你可以随时自己开发添加一个。如果你已经开始计划添加了,也请注意在 Kibana 4.2 发版的时候,回来看看,有没有新的接口变更。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。开源实时日志分析ELK平台能够完美的解决日志收集和日志检索、分析的问题,ELK就是指ElasticSearch、Logstash和Kiabana三个开源工具。 因为ELK是可以跨平台部署,因此非常适用于多平台部署的应用。 二 环境准备 1. 安装JDK1.8环境 2. 下载ELK软件包 logstash: https://artifacts.elastic.co/downloads/logstash/logstash-5.5.0.zip elasticsearch:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.0.zip kibana: https://artifacts.elastic.co/downloads/kibana/kibana-5.5.0-windows-x86.zip 分别解压下载的软件,elasticsearch,logstash,kibana 可以放在一个统一文件夹下 三 部署 1.配置logstash 在logstash文件夹的下bin目录创建配置文件logstash.conf ,内容如下: input { # 以文件作为来源 file { # 日志文件路径 path => "F:\test\dp.log" } } filter { #定义数据的格式,正则解析日志(根据实际需要对日志日志过滤、收集) grok { match => { "message" => "%{IPV4:clientIP}|%{GREEDYDATA:request}|%{NUMBER:duration}"} } #根据需要对数据的类型转换 mutate { convert => { "duration" => "integer" }} } # 定义输出 output { elasticsearch { hosts => ["localhost:9200"] #Elasticsearch 默认端口 } }   在bin目录下创建run.bat,写入一下脚本: logstash.bat -f logstash.conf 执行run.bat启动logstash。 2. 配置Elasticsearch elasticsearch.bat即可启动。 启动后浏览器访问 127.0.0.1:9200 ,出现以下的json表示成功。 3.配置kibana Kibana启动时从文件kibana.yml读取属性。默认设置配置Kibana运行localhost:5601。要更改主机或端口号,或者连接到在其他机器上运行的Elasticsearch,需要更新kibana.yml文件。 kibana.bat启动Kibana

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值