索引與查詢

索引 (index)

索引 (index) 主要用於表現 Riemann 的狀態 (state) 也可以用 Riemann 系統的「即時記憶」 (recent memory) 來理解。索引本身是一個表格,它記錄了所有 Riemann 監控的服務「最新一筆」的狀態。事件 (event) 只要有相同的 (host, service) 欄位, Riemann 就會建立一筆獨立的索引 。

此處要注意一個容易混淆的概念: Riemann 的事件 (event) 裡,有一個欄位叫 state,事件裡的 state 欄位是用來描述該事件的狀態,和 Riemann 整個系統的狀態是不同的概念。

查詢 (query)

查詢主要有兩種使用方式:

  1. Riemann 的客戶端程式,可以透過查詢來取得索引的內容。
  2. Riemann 內部的串流,也可以透過查詢來索引的內容。

範例:在客戶端查詢索引的內容

透過 riemann-client 這個 client 端程式,發送一個 query ,去查詢同時滿足下列兩個條件的 index

  1. 含有 tag 是 hostgroup_OWL
  2. service 是 HOSTGROUP_INFO
riemann-client query 'tagged "hostgroup_OWL" and service = "HOSTGROUP_INFO"'

範例:在 Riemann 內部的串流,查詢索引的內容

定義一個函數 event2hostgroup ,它可以接收一個 event 做為參數。收到參數之後,它會:

  1. 取出 event 的 host 欄位的資料,做為步驟 2 的引數。
  2. 呼叫 riemann.index/lookup 這個 Riemann 內建函數去查詢 index 。
  3. 查詢 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")))

results matching ""

    No results matching ""