1,打开filebeat配置文件:vim filebeat.yml (一般在/etc/filebeat)
2,找到processors: 设置块,注意yml配置文件,如果配置项在一行冒号后面有空格;
在processors: 下设置js脚本
要加工整理的数据格式是:
"{mid:201,time:0,datas:[{addr:0,level:0,mes:44}],valve:1,changed:0,power:0,product:0,version:7}"
注意这不是json格式字符串,前后有双引号,是一个普通字符串,如果去掉前后双引号就是一个js可以解开的对象格式,但我试了一下不行,原因是去掉双引号并不能改变这个数据的类型,还是一个字符串,而不是对象,如果原始数据本身就没有双引号那肯定就是一个js对象,很方便解开,没有办法,我只能正则给key加上双引号,让他变成一个js可以转的标准json字符串;
- script:
lang: javascript
id: emq_2g_filter
source: >
function process(event) {
var msg = event.Get("message");
var json = {};
msg = msg.replace(/(\w+):/g,'"$1":');//只能补全双引号,让它成为一个标准的可以转化的json字符串
json = JSON.parse(msg);//转对象
for(var key in json){
if(json[key] instanceof Object){
//for(var i=0;i<json[key].length;i++){
// for(var j in json[key][i]){
// var keyname = key+"."+j;
// event.AppendTo("datas."+j,json[key][i][j]);
// }
//}
event.Put("datas",json[key]);
}else{
event.Put(key,json[key]);
}
}
event.AppendTo("dataType","deviceReport");
event.Tag("from-filebeat");
}
还有一种情况就是不做遍历对象,直接存json对象到一个自定义到key中:
event.Put(‘ddd’,json);