索引與查詢
索引 (index)
索引 (index) 主要用於表現 Riemann 的狀態 (state) 也可以用 Riemann 系統的「即時記憶」 (recent memory) 來理解。索引本身是一個表格,它記錄了所有 Riemann 監控的服務「最新一筆」的狀態。事件 (event) 只要有相同的 (host, service) 欄位, Riemann 就會建立一筆獨立的索引 。
此處要注意一個容易混淆的概念: Riemann 的事件 (event) 裡,有一個欄位叫 state,事件裡的 state 欄位是用來描述該事件的狀態,和 Riemann 整個系統的狀態是不同的概念。
查詢 (query)
查詢主要有兩種使用方式:
- Riemann 的客戶端程式,可以透過查詢來取得索引的內容。
- Riemann 內部的串流,也可以透過查詢來索引的內容。
範例:在客戶端查詢索引的內容
透過 riemann-client
這個 client 端程式,發送一個 query ,去查詢同時滿足下列兩個條件的 index
- 含有 tag 是 hostgroup_OWL
- service 是 HOSTGROUP_INFO
riemann-client query 'tagged "hostgroup_OWL" and service = "HOSTGROUP_INFO"'
範例:在 Riemann 內部的串流,查詢索引的內容
定義一個函數 event2hostgroup
,它可以接收一個 event 做為參數。收到參數之後,它會:
- 取出 event 的 host 欄位的資料,做為步驟 2 的引數。
- 呼叫
riemann.index/lookup
這個 Riemann 內建函數去查詢 index 。 - 查詢 index 會取出最新一筆的
HOSTGROUP_INFO
event ,取出這個 event 的 tags 欄位並且傳回。
(defn event2hostgroup
"find out all the hostgroups that contains the host of current event.
HOSTGROUP_INFO event describes hostgroup/host as :tags/:host field
=> { :service \"HOSTGROUP_INFO\",
:host \"owl-docker\"
:tags [\"hostgroup1\", \"hostgroup2\"]}"
[e]
(:tags (riemann.index/lookup (:index @core) (:host e) "HOSTGROUP_INFO")))