logstash grok filter 插件实战

栏目: IT技术 · 发布时间: 4年前

内容简介:最近遇到一个搜索的问题,发现文章中如果含有品牌信息,存储到数据库中,会用某种结构化的标签存储品牌信息,比如数据库表和ES索引:3FE 是一个品牌,可加上想到的解决方案就是logstash处理的时候,匹配

最近遇到一个搜索的问题,发现文章中如果含有品牌信息,存储到数据库中,会用某种结构化的标签存储品牌信息,比如数据库表和ES索引:

+----------+----------------------+
| brand_id | content              |
+----------+----------------------+
|        1 | 111,222              |
|      184 | [##BRAND$$16$$3FE##] |
+----------+----------------------+

3FE 是一个品牌,可加上 [##BRAND$$16$$##] 自定义标签后,中文索引分词英文品牌会导致搜索不到(分词为 $3FE$ ),有些同学说,那你针对英文用english分词器,但这是另外一个层面的事情。

想到的解决方案就是logstash处理的时候,匹配 [##BRAND$$16$$3FE##] 然后过滤掉结构化自定义标签,最终将3FE索引到ES中。

虽然最终因为其他原因没有采取这个方案,但对于后续实践非常重要,logstash自动化将数据索引到ES,更准确、更方便,类似于 MySQL 的Binlog机制。

看看具体如何解决的,先贴代码:

statement => "select brand_id,content  from test2 "

if [brand_id]>0 {
    grok { match => [ "content", "(##BRAND\$\$[0-9]{1,5}\$\$(?<brand_search>.*?)##)" ]  tag_on_failure => [ ]  }  
    } else {
        mutate {
            add_field => { "brand_search" => "" }
        }
    }
}
else {
    mutate {
        add_field => { "brand_search" => "" }
    }
}

结果如下:

{
    "_index" : "test3",
    "_type" : "_doc",
    "_id" : "184",
    "_score" : 1.0,
    "_source" : {
      "@version" : "1",
      "@timestamp" : "2020-03-06T11:50:00.173Z",
      "content" : "[##BRAND$$16$$3FE##]",
      "brand_id" : 184,
      "brand_search" : "3FE"
    }
}

tag_on_failure什么意思呢,默认匹配不成功,会增加一个tag,如下:

"@version" => "1",
      "tags" => [
    [0] "_grokparsefailure"
]

而这个tag也会索引到ES中,这是我们不想要的,而通过tag_on_failure可以不生成这个tag,也就是不会索引到ES中。

为实现这个功能也可以采取下面的方法:

grok { match => [ "content", "(##BRAND\$\$[0-9]{1,5}\$\$(?<brand_search>.*?)##)" ]  tag_on_failure => [ ]  }  
if "_grokparsefailure" in [tags] {
    mutate {
        remove_tag => [ "_grokparsefailure" ] #并不是删除tag这个field
        remove_field =>["tags"]
    }
}

有的时候匹配不成功,可以直接删除这个event,也就是整条记录不索引到ES,注意grok和if是并列的:

grok { match => [ "content", "(##BRAND\$\$[0-9]{1,5}\$\$(?<brand_search>.*?)##)" ]  } 
if "_grokparsefailure" in [tags] {
   drop {}
}

grok filter插件在调试的时候可以使用grokdebug工具,上面的正则也有缺陷,如果有两个品牌,只能匹配到一个品牌信息。


以上所述就是小编给大家介绍的《logstash grok filter 插件实战》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法设计与分析基础

算法设计与分析基础

Anany Levitin / 清华大学出版社 / 2007-11 / 59.00元

作者基于丰富的教学经验,开发了一套对算法进行分类的新方法。这套方法站在通用问题求解策略的高度,能对现有的大多数算法进行准确分类,从而使读者能够沿着一条清晰的、一致的、连贯的思路来探索算法设计与分析这一迷人领域。本书作为第2版,相对第1版增加了新的习题,还增加了“迭代改进”一章,使得原来的分类方法更加完善。 本书十分适合作为算法设计和分析的基础教材,也适合任何有兴趣探究算法奥秘的读者使用,只要......一起来看看 《算法设计与分析基础》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具