我使用jdbc输入插件来自数据库查询的数据和来自查询的结果包含url
字段,我想从中提取一些属性。
网址示例:
- /incident.do?sys_id=0dc18b246faa17007a64cbe64f3ee4e1&sysparm_view
- /navpage_form_default.do
- /u_pm_prov_project_list.do?sysparm_userpref_module=fa547ce26f661
- JOB:电子邮件阅读活动流程
- JOB:系统 - 减少资源
我在grok模式文件中添加了正则表达式模式:
webpage_category .*
job_type .*
我有两种类型的网址,所以我在过滤块中使用它来区分它们
Config我到目前为止尝试过:
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:
开头的网址创建新字段的工作正常,但webpage_category
根本不起作用。是因为正则表达式不能在匹配中使用吗?
答案 0 :(得分:0)
问题是您尝试在grok
过滤器中使用mutate
模式,这样做不会起作用。 mutate
和grok
是两个独立的过滤插件。
如果要使用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"]