gpt4 book ai didi

elasticsearch - Logstash 根据现有字段创建新字段

转载 作者:行者123 更新时间:2023-11-29 02:57:27 25 4
gpt4 key购买 nike

我有来自使用 jdbc 输入插件的数据库查询的数据,查询结果包含 url 字段,我想从中提取一些属性。

示例网址:

  • /incident.do?sys_id=0dc18b246faa17007a64cbe64f3ee4e1&sysparm_view
  • /navpage_form_default.do
  • /u_pm_prov_project_list.do?sysparm_userpref_module=fa547ce26f661
  • JOB: email read events process
  • JOB: System - reduce resources

我在 grok 模式文件中添加了正则表达式模式:

webpage_category .*
job_type .*

我有两种类型的 url,所以我在过滤器 block 中使用 if 来区分它们

到目前为止我试过的配置:

filter {
if [url] =~ /JOB: .*/ {
grok {
patterns_dir => ["/etc/logstash/patterns"]
match => {
"url" => "JOB: %{job_type:job_type}"
}
}
} else
if [url] =~ /\/.*\.do\?.*/ {
grok {
patterns_dir => ["/etc/logstash/patterns"]
match => {
"url" => "/{webpage_category:webpage_category}\.do\?.*"
}
}
}
}

为以 JOB: 开头的 url 创建新字段工作正常,但 webpage_category 根本不起作用。是不是因为正则表达式不能在匹配内部使用?

最佳答案

问题是您正试图在 mutate 过滤器中使用 grok 模式,这是行不通的。 mutategrok 是两个独立的过滤器插件。

如果你想使用 grok 模式创建一个字段,你需要在 grok 过滤器中使用 add_field。请记住add_field is supported by all filter plugins.

请看下面的例子,

filter {
grok {
add_field => { "foo_%{somefield}" => "Hello world, from %{host}" }
}
}

在你的情况下,它将是,

filter{
grok {
add_field => {
"webpage_category" => "%{webpage_category:url}"
"job_type" => "%{job_type:url}"
}
}
}

请确保 patterns_dir 已导入,

patterns_dir => ["./patterns"] => ["./patterns"]

请结帐grok filter documentation

关于elasticsearch - Logstash 根据现有字段创建新字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50394289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com