目录
1.1.1.字段参考文字(Field Reference Literal)
1.字段参考深入分析
能够通过名称引用字段或字段集合通常很有用。为此,您可以使用Logstash字段引用语法。
访问字段的语法指定了字段的完整路径,每个片段都包含在方括号中。
字段引用可以在管道配置中的条件语句中逐字表示,作为管道插件的字符串参数,或者管道插件将使用的sprintf语句中:
filter {
# +----literal----+ +----literal----+
# | | | |
if [@metadata][date] and [@metadata][time] {
mutate {
add_field {
"[@metadata][timestamp]" => "%{[@metadata][date]} %{[@metadata][time]}"
# | | | | | | | |
# +----string-argument---+ | +--field-ref----+ +--field-ref----+ |
# +-------- sprintf format string ----------+
}
}
}
}
1.1.正式语法
下面是Field Reference的正式语法,附有注释和示例。
1.1.1.字段参考文字(Field Reference Literal)
字段参考文字是一个或多个的序列路径片段,可以直接在Logstash管道使用条件语句而没有任何附加的引用(例如[request]
,[response][status]
)。
fieldReferenceLiteral
: ( pathFragment )+
;
1.1.2.字段参考(Event APIs)
Event API用于操作事件字段或使用sprintf语法的方法比它们作为字段引用所接受的管道语法更灵活。顶级字段可以通过其字段名称直接引用,而不使用方括号,并且对复合字段引用有一些支持,简化了以编程方式生成的字段引用的使用。
因此,与事件API一起使用的字段引用是以下之一:
- 单个Field Reference Literal ;
- 单个字段名称(引用顶级字段);
- 单个复合(Composite)字段参考。
eventApiFieldReference
: fieldReferenceLiteral
| fieldName
| compositeFieldReference
;
1.1.3.路径片段(Path Fragment)
路径片段是用方括号括起来的字段名(例如,[request]
)。
pathFragment
: '[' fieldName ']'
;
1.1.4.字段名称(Field Name)
字段名: 不是方括号的字符序列([
or ]
)
fieldName
: ( ~( '[' | ']' ) )+
;
1.1.5.复合字段参考
在某些情况下,可能需要以编程方式从一个或多个字段引用组成字段引用,例如在操作插件中的字段时或使用Ruby Filter插件和Event API时。
fieldReference = "[path][to][deep nested field]"
compositeFieldReference = "[@metadata][#{fieldReference}][size]"
# => "[@metadata][[path][to][deep nested field]][size]"
1.1.6.复合场参考的规范表示
可接受的复合场参考 | 典型场参考表示 |
---|---|
|
|
|
|
|
|
复合字段参考是一个或多个的序列路径片段或嵌入式字段参考。
compositeFieldReference
: ( pathFragment | embeddedFieldReference )+
;
事件API支持复合字段引用,但管道配置中不支持复合字段引用。
1.1.7.嵌入式字段参考
embeddedFieldReference
: '[' fieldReference ']'
;
一个嵌入式字段参考是一个字段参考,其本身包在方括号([
和]
),并且可以是一个的部件复合字段参考。