scripted fields 是kibana提供动态的从指定列中提取指定字符串的功能,提取的数据可用于discover展示甚至可以用在visualize和Dashboard用于图标展示,功能极其强大。但是使用需要小心及慎重,它也是比较棘手的。
使用kibana过程中有时需要提取某个字段的部分值用于统计,例如提取message中的部分值,比如提取以下日志中的ip,可以使用script filed实现
remoteClientRealIp=192.168.168.30, remote.addr=192.168.168.10:56288, Accept-Encoding=gzip, X-Forwarded-For=
1、登入kibana管理界面(Management)
2、找到需要操作的索引
3、点击右侧菜单 scrpted fields列
4、add scripted filed
5、填写基本信息
我这次需要提取ip也就是字符串,type列我选择String
添加如下脚本到script文本框保存
painless 语法: https://www.elastic.co/guide/en/elasticsearch/painless/6.4/index.htm
String left = "remote.addr=";
String left2 = "host=";
String left3 = "remote.addr\":\"";
int leftln = left.length();
String right = ",";
def str = doc['message.keyword'].value;
if(str == null){
return "-"
}
def leftIndex = str.indexOf(left);
if(leftIndex <=0){
leftIndex = str.indexOf(left2);
if(leftIndex <=0){
leftIndex = str.indexOf(left3);
if(leftIndex <=0){
return "-";
}else{
leftln = left3.length();
}
}else{
leftln = left2.length();
}
}
def tmp = str.substring(leftIndex + leftln);
def rightIndex = tmp.indexOf(right);
if(rightIndex <=0){
return "-";
}
def result = tmp.substring(0,rightIndex).trim();
result = result.substring(0,result.indexOf(":"));
return result;
6、点击Discover页面选择指定的index 然后会看到添加的字段
7、visualize