1.根据条件删除当前消息
if "caoke" not in [docker]{
drop {}
}
if "caoke" != [className]{
drop {}
}
- 删除字段
remove_field => ["message"]
- 添加字段
mutate{ add_field => { "timestamp" => "%{[message]}" } }
- 转换字段类型
mutate{ convert => { "ip" => "string" } }
- 重命名字段
mutate{ convert => { "ip" => "string" } rename => { "ip"=>"IP" } }
- 字段取值
%{message}
7.logstash 条件判断语句
使用条件来决定filter和output处理特定的事件。logstash条件类似于编程语言。条件支持if、else if、else语句,可以嵌套。
比较操作有:
相等: ==, !=, <, >, <=, >=
正则: =~(匹配正则), !~(不匹配正则)
包含: in(包含), not in(不包含)
布尔操作:
and(与), or(或), nand(非与), xor(非或)
一元运算符:
!(取反)
()(复合表达式), !()(对复合表达式结果取反)
if[foo] in "String"在执行这样的语句是出现错误原因是没有找到叫做foo的field,无法把该字段值转化成String类型。所以最好要加field if exist判断。
判断字段是否存在,代码如下:
if ["foo"] {
mutate {
add_field => { "bar" => "%{foo}"}
}
}
example:
filter{
if "start" in [message]{
grok{
match => xxxxxxxxx
}
}else if "complete" in [message]{
grok{
xxxxxxxxxx
}
}else{
grok{
xxxxxxx
}
}
}
- 创建模板
PUT _template/temp_jiagou
{
"order": 0,
"index_patterns": [
"jiagou-*"
],
"settings": {
"index": {
"number_of_shards": "1",
"number_of_replicas": "1",
"refresh_interval": "5s"
}
},
"mappings": {
"_default_": {
"properties": {
"logTimestamp": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd HH:mm:ss.SSS||epoch_millis"
},
"partition": {
"type": "integer"
},
"offset": {
"type": "long"
},
"lineNum": {
"type": "integer"
}
}
}
}
}