Turn unstructured log lines into named fields with a bounded grok-style pattern engine.
中文一句话:把非结构化日志行按 grok 风格模式拆成命名字段,纯计算、无 IO、多目标可用。
%{IP:client} %{WORD:method} %{NUMBER:status}
moon add qqq66668/grokliteimport {
"qqq66668/groklite/src" @groklite,
}fn main {
let pattern = "%{IP:client} %{WORD:method} %{STATUS:status}"
match @groklite.compile_builtin(pattern) {
Err(error) => println(@groklite.describe_compile_error(error))
Ok(program) => {
match @groklite.match_line(program, "10.0.0.7 GET 404") {
Err(error) => println(@groklite.describe_match_error(error))
Ok(fields) => {
match @groklite.field_value(fields, "status") {
Some(value) => println(value)
None => println("no status field")
}
}
}
}
}
}moon run examples/nginx_to_jsonclient=10.0.0.7
method=GET
status=404moon run examples/syslog_to_jsonpattern=0
ts=Jan 5 14:22:01
host=web-01
prog=sshd
msg=panicmoon check --deny-warn
moon test
moon run examples/nginx_to_json
moon run examples/syslog_to_json
bash tools/check_no_pii.shInstall
Download zipTurn unstructured log lines into named fields with a bounded grok-style pattern engine.