2017-02-27 55 views
0

所以我查詢Logstash與此查詢,返回所有的事情從堆棧的頂部:如何Logstash爲「看着」標記事件

{ 
"query": { 
"match_all": { } 
}, 
"size": 7, 
"_source": { 
"includes": [ "transport", "dest", "packet_source", "id_orig_p", "id_orig_p", "id_orig_h", "conn_state", "id_resp_h", "id_resp_p", "service", "proto" ] 
} , 
"sort": [ 
    { 
    "@timestamp": { 
    "order": "desc" 
    } 
} 
] 
} 

然而,當我查詢數據然後我得到重複如果沒有新的數據進來。有沒有辦法標記每個唯一的事件ID爲「LookedAt」與整數字段或什麼?

我需要這樣做來減少我在C#中的查詢的垃圾回收,但存儲所有的ID和做字符串比較是相當沉重的,而且當我有Logstash時似乎沒有必要。

回答

1

我建議使用時間戳並將其包含在查詢中。例如,根據第一個查詢的結果,您可以獲取最新事件的時間戳(即結果中的第一個),然後當您進行第二個查詢時,請求時間戳高於該時間戳的事件。

所以,你做第一個查詢:

{ 
    "query": { 
    "match_all": {} 
    }, 
    "size": 7, 
    "_source": { 
    "includes": [ 
     "transport", 
     ... 
    ] 
    }, 
    "sort": [ 
    { 
     "@timestamp": { 
     "order": "desc" 
     } 
    } 
    ] 
} 

然後說,在結果中,最新的事件的時間戳是2017-02-28T10:02:23.000Z

下一個查詢將被:

{ 
    "query": { 
    "range": { 
     "timestamp": { 
     "gt": "2017-02-28T10:02:23.000Z" 
     } 
    } 
    }, 
    "size": 7, 
    "_source": { 
    "includes": [ 
     "transport", 
     ... 
    ] 
    }, 
    "sort": [ 
    { 
     "@timestamp": { 
     "order": "desc" 
     } 
    } 
    ] 
} 

等等,你會保證不會有重複的事件。

+0

我這樣做時,遇到下列錯誤: '{ 「錯誤」:{ 「ROOT_CAUSE」: { 「類型」: 「parsing_exception」, 「理由」:「[系列]查詢呢不支持[runtime_timestamp] 「 」線「:5, 」欄「:9 } ], 」類型「: 」parsing_exception「, 」原因「:」[範圍]查詢不支持[runtime_timestamp] 「, 」line「:5, 」col「:9 }, 」status「:400 }' – BenjaFriend

+0

'runtime_timestamp'字段的類型是什麼? – Val

+0

是這個工作 – BenjaFriend