我使用Elasticsearch以下列格式存储HTTP日志数据:
{
"domain": "www.vg.no",
"protocol": "HTTP/1.1",
"timestamp": "2014-03-19T15:58:18",
"destination_ip": "195.88.54.16",
"referer": "http://www.vg.no/path/example.exe",
"destination_port": "80",
"response_length": "4808",
"response_code": "200",
"source_ip": "192.1.1.1",
"uri": "/bil-og-motor/css/topp_artikkel2_bilogmotor.jpg",
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36",
"source_port": "63894",
"method": "GET"
}
我正在尝试构建一个查询,我可以使用以下选项获取与用户制定的标准匹配的数据: 域,搜索字符串可以匹配任何字段,uri包括文件扩展名,时间戳在定义的时间范围内。
示例:
我试图多次进行此查询但没有成功。如果有人可以帮助我,我会变得非常高兴:)
更新 这是我使用python:
插入记录的方法es.index(
index="test",
doc_type="http_log",
body={
'timestamp' : self.request.timestamp,
'domain' : self.request.domain,
'uri' : self.request.uri,
'user_agent' : self.request.user_agent,
'referer' : self.request.referer,
'method' : self.request.method,
'protocol' : self.request.protocol,
'response_code' : self.response.code,
'response_length' : self.response.length,
'source_ip' : self.request.source_ip,
'source_port' : self.request.source_port,
'destination_ip' : self.request.destination_ip,
'destination_port' : self.request.destination_port
}
)
答案 0 :(得分:0)
您必须确保时间戳的映射是date_time字段。对于elaticsearch中的不同日期时间格式,请单击here
现在首先在所有字段中搜索搜索文本,然后根据域和日期过滤掉结果。
curl -XPOST 'http://localhost:9200/test/http_log/_search' -d '
{
"query": {
"query_string": {
"query": "search text"
}
},
"filter": {
"and": {
"filters": [
{
"query": {
"wildcard": {
"uri": {
"value": "*.exe"
}
}
}
},
{
"query": {
"match_phrase": {
"domain": "www.vg.no"
}
}
},
{
"range": {
"timestamp": {
"from":"2014-03-19T00:00",
"to": "2014-03-19T23:59"
}
}
}
]
}
}'