1

语境

我们在弹性搜索中有关于恶意软件的数据。我们必须用 kibana 来分析它。对于每个样本(恶意软件),我们都有一些 SSL 证书。这些是嵌套字段。我是 elasticsearch 新手,很难在官方文档中找到我想要的内容。

我想要的是

我希望能够创建一个遵守这些规则的图表(即:折线图):

  • Y轴上的简单计数
  • X 轴上的证书文件名
  • 仅显示主题 == 发行者

简化的映射

{
    "mappings":{  
        "sample":{
            "properties":{
                "static":{
                        "x509Certificates":{
                            "type":"nested",
                            "properties":{
                                "Status":{
                                    "type":"long"
                                },
                                "FileName":{
                                    "type":"keyword"
                                },
                                "Serial":{
                                    "type":"long"
                                },
                                "Signature":{
                                    "type":"keyword"
                                },
                                "PublicKey":{
                                    "type":"keyword"
                                },
                                "NotValidBefore":{
                                    "type":"date",
                                    "format":"epoch_millis"
                                },
                                "NotValidAfter":{
                                    "type":"date",
                                    "format":"epoch_millis"
                                },
                                "Subject":{
                                    "type":"keyword"
                                },
                                "Issuer":{
                                    "type":"keyword"
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

我已经尝试过的事情

不使用嵌套对象

它不起作用,因为没有“加入”。图表已创建,但信息一文不值。

使用 kibana 嵌套分叉

https://github.com/homeaway/kibana/tree/nestedSupport-5.2 实际上很有帮助。至少我们可以生成一个带有嵌套字段的图表。但它并没有完全解决问题。

在图表顶部的搜索栏中使用脚本查询

查询类似于:

 {
   "bool": {
     "must": {
        "script": {
           "script": {
              "inline": "doc['Subject'].value == doc['Issuer'].value",
              "lang": "painless"
              }
           }
        }
     }
 }

我完全不确定,但这就像它在所有证书之间搜索两个值中的至少一个一样。

使用脚本字段

我创建了一个简单的布尔脚本字段,类似于:

doc['Subject'].value == doc['Issuer'].value

并为布尔值是否为真创建了一个查询。它部分工作。

嵌套查询

它真的看起来像我想要的但是,我不知道如何用这种方法说 Issuer==Subject。

我的问题

知道这不是我们唯一需要嵌套脚本过滤器的用例,解决我的问题的最简单方法是什么?

不要犹豫,要求澄清!

4

1 回答 1

2

如果您有这样的脚本字段怎么办,因为SubjectIssuer都是 类型keyword

def newfield = "";

if((doc['Subject'].value).equals(doc['Issuer'].value)){
   newfield= "matched";
}else{
   newfield= "not matched";
}

然后也许您可以通过在图表中应用过滤器来使用上述脚本字段,如下所示:

scriptedFieldName:"matched"

希望这可以帮助!

于 2017-03-02T10:18:42.087 回答