核心觀念

設置檔 (configuration)

Riemann 的設置檔,本身就是 clojure programm。 Riemann 透過了這種「設置檔即為程式原始碼」(configuration-as-code) 的設計,極小化了所有模板架構程式碼 (bolierplate) ,同時也提供了極高的彈性。

事件 (event)

事件 (event) 在 Riemann 中是用 clojure 語言的 immutable map 來表現。

基本欄位 意義
host 主機名稱。 e.g. "api1", "foo.com"
service 服務名稱。e.g. "API port 8000 reqs/sec"
state 任何少於 255bytes 的字串。e.g. "ok", "warning", "critical"
time 時間。使用 unix epoch seconds
description 自由形式的字串
tags 字串的 list 。例如:["rate", "fooproduct", "transient"]
metric 事件的數值。e.g. the number of reqs/sec
ttl 單位為秒。這個事件「有效」的期間。逾時的話,事件可能會被從索引移除。

串流 (streams)

串流 (stream) 在 Riemann 中是用 clojure 語言的 function 來表現。你可以利用 Riemann 內建的各式各樣的「串流函數」(streams ...),或是寫你自己需要的「串流函數」

值得注意的一點是:如果你去看 Riemann 的 API 文件,去看各種串流函數的實作,這些串流函數(streams ...) 往往都會傳回一個 lambda function,而這個 lambda function 的定義通常是如下的形式:

(fn stream [event]
   (call-rescue event (cons child children)))

在本文中,理解 stream 時,讀者需要去分清楚,此時所講的 stream 是哪一種語意?一種語意是 API 文件中的「串流函數」,本身常常可以接收其它串流函數,會傳回一個 lambda 。另一種語意則是如上述的 lambda 。

你可以想象 (streams) 是最高層次的「串流」,所有的事件 (event) 都會從它流過。在後續的文件中,我們常常省去「串流」不寫,視它為理所當然。

streams 比對條件、寄信範例

這邊有一個簡單的串流範例,它會對任何service"riak"開頭的事件,送出「狀態(state)」為critical的事件,到 "[email protected]" 這個電子郵件信箱。

(streams
  (where (and (service #"^riak")
              (state "critical"))
         (email "[email protected]")))

streams 分流範例

(by [:host :service])

streams 偵測狀態改變範例

(by [:host :service]
    (changed :state))

streams 避免過多告警範例

(by [:host :service]
    (changed :state
             (rollup 5 3600
                     (email "[email protected]"))))

results matching ""

    No results matching ""