在 Kibana 中显示图片及 Binary 字段类型介绍

原创
06/17 08:00
阅读数 5

导语



在今天的文章中,我将向大家展示如何在 Kibana 中进行图片显示。我的同事在他自己的博客中写了一篇文章 “用 Elasticsearch 存储图片并在 Kibana 中显示”。在今天的文章里,我的许多内容来自这篇文章,只是我想在动手时更加详细一点,以便我们自己能够按照这些步骤能看到想要的结果。在之前我还有一篇文章是关于在 Kibana 中进行展示多媒体的。你可以参考文章 “Kibana:如何在 Discover 中显示图片及播放音乐”。


Binary 字段类型


我们知道图片通常比较大,而且不便于搜索,除非我们使用向量搜索。如果你对向量搜索感兴趣,请参阅我的另外一篇文章 “Elasticsearch:如何使用 Elasticsearch 和 Python 构建面部识别系统”。在 Elasticsearch 中,我们可以使用 binary 字段类型来进行存储。Binary 类型接受二进制值作为 Base64 编码字符串。该字段默认不存储且不可搜索,比如:

PUT my-index-000001{  "mappings": {    "properties": {      "name": {        "type": "text"      },      "blob": {        "type": "binary"      }    }  }} PUT my-index-000001/_doc/1{  "name": "Some binary blob",  "blob": "U29tZSBiaW5hcnkgYmxvYg==" }


二进制字段接受以下参数。

  • doc_values 字段是否应该以列存的方式存储在磁盘上,以便以后可以用于排序、汇总或脚本,可配置为 "true "或 “false”(默认)

  • store 字段值是否应与 _source 字段分开存储和检索。可配置为 true 或 false(默认)


动手实践

PUT images

{

  "mappings": {

    "properties": {

      "message": {

        "type": "binary"

      }

    }

  }  

}


在上面,我们把字段 message 设置为 binary 类型的数据,这样它可以存储图片。


我们接下来在自己的电脑上创建一个如下地址的目录:

mkdir -p /Users/liuxg/elastic3/images


你可以根据自己的电脑创建不同的路径。在这个目录中,我们添加我们喜欢的图像,暂且都是以 png 为扩展名的文件:

$ pwd/Users/liuxg/elastic3/images$ lselastic.png       elasticsearch.png logstash.png




接下来,我们在这个目录下,使用 python 来创建一个文件服务器:

$ pwd/Users/liuxg/elastic3/images$ lselastic.png       elasticsearch.png logstash.png$ python3 -m http.serverServing HTTP on :: port 8000 (http://[::]:8000/) ...


这样在我们的本地电脑中就架起来一个服务器。我们可以使用浏览器来进行访问:


我们接下来使用 Filebeat 来对这个目录进行采集,并把图像文件收集到 Elasticsearch 中:

filebeat.yml

filebeat.inputs:- type: log  paths:  - /Users/liuxg/elastic3/images/*.png  harvester_buffer_size: 16384000  fields:    format: "png"  multiline:    pattern: '^?PNG'    match: after    negate: true    max_lines: 100000 processors:   - dissect:        tokenizer: "%{key0}/images/%{filename}.png"        field: "log.file.path"        target_prefix: ""   - drop_fields:        when:            has_fields: ['key0']        fields: ["key0"]   - drop_fields:        fields: ["agent","ecs"] output.elasticsearch:  hosts: ["http://localhost:9200"]  username: "elastic"  password: "changeme"   indices:  - index: "images"   bulk_max_size: 1500  worker: 3 setup:  template.enabled: false  ilm.enabled: false


如上所示,我们的文件都被放置于路径 /Users/liuxg/elastic3/images/*.png 中,在下面的 dissect processor 中,我们需要注意的一点是:

%{key0}/images/%{filename}.png


它必须匹配我们的路径 /Users/liuxg/elastic3/images/*.png 这样它才可以提取 filename。这对下面的配置起到关键的作用。如果你想调试 Filebeat,请阅读我之前的文章 “Beats:如何测试 Beats processors”。如果你想对 Beats 的 dissect processor 有更多的认识,请阅读另外一篇文章 “Beats:Beats processors”。


我们在 Filebeat 的安装根目录下打入如下的命令:

./filebeat -e


我们可以看到如下的信息:


这样我们就完成了图像数据的导入。

GET images/_count


我们看到有三个图片的文档被导入。我们可以进一步来检查这个 images 索引的 mapping:

GET images/_mapping


从上面我们可以看到一个叫做 filename 的字段。它在文档中的内容如下:


显然,它是提取了图片的文件名形成的内容。在上面的 message 字段中,我们可以看到它包含图片的具体的内容。


在 Kibana 中显示图片


我们接下来描述如何在 Kibana 中进行图片的展示。就像我在之前的文章 “Kibana:如何在 Discover 中显示图片及播放音乐” 中所描述的那样。只要有文件的名字,加上一个可以访问的文件服务器,我们就可以在 Kibana 中进行图片的展示。确切地j讲,我们展示的图片的内容不是来自 message 字段,而是来自在上面我们介绍的文件服务器。首先,我们为 images 创建一个 index pattern。


在上面,我们为 images 索引创建一个 Scripted field:


点击上面的 Create field:


这样我们就生成了一个叫做 preview 的 script field。


我们回到 Discover 的界面:


这样我们就看到了三个被导入的文档,并且我们可以清晰地看到它们的图片尽管是被放大或缩小为 80x60 的大小。


参考:

【1】用Elasticsearch存储图片并在Kibana中显示 - 

https://blog.csdn.net/u013613428/article/details/113841075?spm=1001.2014.3001.5501


正文完



 作者:刘晓国

本文编辑:喝咖啡的猫



嗨,互动起来吧!

喜欢这篇文章么?

欢迎留下你想说的,留言 100% 精选哦!

Elastic 社区公众号长期征稿,如果您有 Elastic  技术的相关文章,也欢迎投稿至本公众号,一起进步! 投稿请添加微信:medcl123



招聘信息

Job board


社区招聘栏目是一个新的尝试,帮助社区的小伙伴找到心仪的职位,也帮助企业找到所需的人才,为伯乐和千里马牵线搭桥。有招聘需求的企业和正在求职的社区小伙伴,可以联系微信 medcl123 提交招聘需求和发布个人简历信息。


Elastic中文社区公众号 (elastic-cn)

为您汇集 Elastic 社区的最新动态、精选干货文章、精华讨论、文档资料、翻译与版本发布等。

喜欢本篇内容就请给我们点个[在看]吧




本文分享自微信公众号 - Elastic中文社区(elastic-cn)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部