Collectd

將kapacitor與influxdb和collectd一起使用

  • June 3, 2016

我正在嘗試將 Kapacitor 與我們的 influxdb 和 collectd 設置集成。但是,它似乎不起作用,我不明白為什麼。

Collectd 和 Influxdb 執行正常,我認為 Kapacitor 能夠連接到 influxdb。在 kapacitor 日誌中,我看到了這個:

[influxdb] 2016/04/22 09:46:42 I! started UDP listener for collectd_db default

這是 collectd 記錄指標的 influxdb 數據庫的名稱。

我創建了以下刻度文件,並將其上傳到 kapacitor 並啟用它:

stream
   .from().measurement('cpu_value')
   .where(lambda: "type" == "percent")
   .where(lambda: "type_instance" == "idle")
   .alert()
       .crit(lambda: "value" <  100)
       // Whenever we get an alert write it to a file.
       .log('/tmp/alerts.log')

這只是一個測試腳本,希望能產生一些輸出。

腳本已啟用:

Name                          Type      Enabled   Executing Databases and Retention Policies
cpu_tick                      stream    true      true      ["collectd_db"."default"]

但是,我沒有看到任何錄音:

[centos@ip-xx-xx-xx-xx tmp]$ kapacitor list recordings
ID                                      Type    Size      Created      

“cpu_value”是我數據庫中的有效度量。

這是我在錯誤日誌中得到的:

[cpu_alert:stream1] 2016/04/28 13:00:51 E! error while evaluating WHERE expression: name "percent" is undefined. Names in scope: time,value,host,instance,type,type_instance

Kapacitor的作者在這裡…

在 Kapacitor lambda 表達式中,單引號和雙引號具有不同的含義。

  • 單引號表示字元串文字
  • 雙引號是對數據中的欄位或標籤的引用。

這個表達式.where(lambda: "type" == "percent")是說只保留type欄位或標籤值等於欄位或標籤值的數據點percent。根據錯誤

$$ cpu_alert:stream1 $$2016/04/28 13:00:51 東!評估 WHERE 表達式時出錯:名稱“百分比”未定義。範圍內的名稱:時間、值、主機、實例、類型、類型實例

percent欄位或標籤不存在。

如果要過濾類型值等於percent文字的點,則需要使用單引號。

.where(lambda: "type" == 'percent')

您的下一個表達式可能也是如此。

.where(lambda: "type_instance" == 'idle')

AND如果你願意,你也可以一起表達

.where(lambda: "type" == 'percent' AND "type_instance" == 'idle')

當 Kapacitor 發現where相鄰的多個語句時,它會將它們轉換為引擎蓋下的 And’ed 表達式。

這是解釋引號差異的相關文件https://docs.influxdata.com/kapacitor/v0.12/introduction/getting_started/#keep-the-quotes-in-mind

至於為什麼沒有錄音,如果沒有更多關於您如何嘗試創建錄音的上下文,我無法回答。

引用自:https://serverfault.com/questions/773565