出于安全原因,我需要解析 /etc/passwd 文件以查找过期或虚假帐户。使用以下过滤器解析一个示例文件后:
filter {
grok {
match => {"message" => [ "%{WORD:username}:%{WORD:password}:%{NUMBER:userid}:%{NUMBER:groupid}:%{DATA:useridinfo}:%{DATA:homedir}:%{GREEDYDATA:command-shell}" ]
}
}
mutate {
remove_field => [ "@version", "log", "host", "@timestamp", "event", "message" ]
}
mutate {
gsub => [ "command-shell", "\\r", "" ]
}
}
输出是正确的,除了“command-shell”字段,它有一个' ' 在每一行中,尽管 mutate 过滤器插件中有 gsub。
例子:
{"useridinfo":"guest","userid":"405","groupid":"100","homedir":"/dev/null","username":"guest","password":" x","command-shell":"/sbin/nologin "}
{"useridinfo":"nobody","userid":"65534","groupid":"65534","homedir":"/","username":"nobody","password":"x", “命令外壳”:“/sbin/nologin "}
原来的例子是:
来宾:x:405:100:来宾:/dev/null:/sbin/nologin
没人:x:65534:65534:没人:/:/sbin/nologin
我想删除那个 似乎没有任何效果,尽管 Logstash 中没有错误并且结束正常。
你能帮我把那个去掉吗?我是 Logstash 的新手,我尝试使用 DATA 而不是 GREEDYDATA,但它在 Grok Debugger 中不起作用,所以我离开了 GREEDYDATA,也许这就是问题所在?
谢谢。
如果您的字段包含字符串“ “你会删除它使用
mutate { gsub => [ "message", "\\r", "" ] }
如果像您的情况一样,您的字段包含回车符 (Ctrl/M),那么您可以使用删除它
mutate { gsub => [ "message", "\r", "" ] }
谢谢你回答我的问题
第一个离开 不变:
{"homedir":"/","userid":"65534","username":"nobody","password":"x","command-shell":"/sbin/nologin ","groupid":"65534","useridinfo":"nobody"}
第二个选项给了我(总是遵循相同的例子)这个:
{“命令外壳”:“/sbin/nologin ","useridinfo":"nobody","groupid":"65534","userid":"65534","password":"x","username":"nobody","homedir":"/"}
可悲的是,根本没有变化。
如果您需要更多信息,请告诉我,我需要解决它,但我没有找到解决方案。
谢谢!