日志文件数据
I0902 05:56:12.855851 1 trace.go:76] Trace[540753199]: "GuaranteedUpdate etcd3: *core.Node" (started: 2018-09-02 05:56:11.933514274 +0000
UTC m=+171.998961960) (total time: 922.28044ms):
Trace[540753199]: [922.15204ms] [920.458996ms] Transaction committed
I0902 05:56:12.855507 1 wrap.go:42] GET /api/v1/nodes/192.168.10.224/status?timeout=10s: (465.699309ms) 200 [[kubelet/v1.10.2 (linux/amd64) kubernetes/81753b1] 192.168.10.186:42050]
grok解析
filter{
#masternode
if[fields][module]=="k8s" {
if[fields][name]=="apiserver" {
grok{
id => "k8s-apiserver"
match => {
"message" => ["^%{LOCALLEVLE:[k8s][apiserver][level]}%{K8STIME:[k8s][apiserver][timestamp]}\s*%{DATA:[k8s][apiserver][thread]}\s%{DATA:[k8s][apiserver][class]}\] %{DATA:[k8s][apiserver][method]} %{DATA:[k8s][apiserver][url]}\s\(%{DATA:[k8s][apiserver][usetime]}\) %{DATA:[k8s][apiserver][status]}\s%{GREEDYDATA:[k8s][apiserver][message]}",
"^%{LOCALLEVLE:[k8s][apiserver][level]}%{K8STIME:[k8s][apiserver][timestamp]}\s*%{DATA:[k8s][apiserver][thread]}\s%{DATA:[k8s][apiserver][class]}\] %{GREEDYDATA:[k8s][apiserver][message]}"]
}
pattern_definitions => {
"LOCALLEVLE" => "\w"
"K8STIME" => "[0-9]+ ([0-9]|\s)?[0-9]:[0-9][0-9]:[0-9][0-9](\.[0-9]+)?"
}
remove_field => "message"
}
date {
match => [ "[k8s][apiserver][timestamp]", "MMdd HH:mm:ss.SSSSSS" ]
timezone => "+00:00"
}
}
由于这个匹配条件是多个正则表达式,解析时第一个不正确,解析第二个正确。
grok对一个event耗时处理在70ms/e,花费时间比较长了。
修改如下:
filter{
#masternode
if[fields][module]=="k8s" {
if[fields][name]=="apiserver" {
grok{
id => "k8s-apiserver"
match => {
"message" => "^%{LOCALLEVLE:[k8s][apiserver][level]}%{K8STIME:[k8s][apiserver][timestamp]}\s*%{DATA:[k8s][apiserver][thread]}\s%{DATA:[k8s][apiserver][class]}\] (%{K8sMETHOD:[k8s][apiserver][method]} %{DATA:[k8s][apiserver][url]}\s\(%{DATA:[k8s][apiserver][usetime]}\) %{DATA:[k8s][apiserver][status]}\s)?%{GREEDYDATA:[k8s][apiserver][message]}"
}
pattern_definitions => {
"LOCALLEVLE" => "\w"
"K8STIME" => "[0-9]+ ([0-9]|\s)?[0-9]:[0-9][0-9]:[0-9][0-9](\.[0-9]+)?"
"K8sMETHOD" => "PATCH|GET|PUT|POST|DELETE"
}
remove_field => "message"
}
date {
match => [ "[k8s][apiserver][timestamp]", "MMdd HH:mm:ss.SSSSSS" ]
timezone => "+00:00"
}
}
在kibana上进行grok debugger调试
结果在kibana的x-pack显示,只有0.02ms/s。
总结:在grok解析错误时会影响时间会延长,把2个匹配条件合并成一个条件,重点是添加K8sMETHOD 这个匹配规则。兼容上面出现的两种日志数据格式。