如何解析所需字段-ELK应用
常说的ELK是指包括 elasticsearch、logstash 和 kibana 的一套技术栈,常用来处理日志等数据。
其部署架构多种多样。常见的一种分离式的部署方式为:应用->kafka->logstash->elasticsearch->kibana。采用这种部署架构,需要解决的问题就是从kafka中获取的message字段是一个单独的完整json串,如何将它解析成不同的字段以供之后做聚合等数据分析操作。
目前的解决方法是:
在logstash配置文件中添加filter项。
filter {
dissect {
mapping => {
“message” => “{%{?arg1}:%{&arg1},%{?arg2}:%{&arg2}}”
}
}
}
dissect适合对具有简单模式的字段进行解析切分。
而采用cjson生成的json串中会带有\n\t,\n和\t字符,dissect不支持对此类字符的匹配,所以有了以下修改,现将这些字符去掉。
filter {
mutate {
gsub => [“message”,”\n”,””]
gsub => [“message”,”\t”,””]
}
dissect {
mapping => {
“message” => “{%{?arg1}:%{&arg1},%{?arg2}:%{&arg2}}”
}
}
}
至此,kibana中会出现json中各个字段。
该解决方法仍有不足之处:
1. 如果字段本身含有:,等分割符,则会被误匹配截断。
2. 无法动态调整json串中的字段个数。
仍待解决。