2015-10-22 141 views
1

我在我的Nagios服務器上安裝check_http_json.py(URL:https://github.com/drewkerrigan/nagios-http-json)來解析JSON輸出&基於特定鍵的設置規則。「check_http_json.py」NAGIOS插件無法正常工作

JSON輸出如下所示:

[{"key":"Key","value":"Value"},{"key":"Receipt count in last 24 hours with status [Disallowed], OCR status [Complete] and Matching status [N/A]","value":"8"},{"key":"Receipt count in last 24 hours with status [Pending], OCR status [Complete] and Matching status [N/A]","value":"2"},{"key":"Last Execution for Notification Service ended","value":"10/21/2015 22:23:44PM"},{"key":"Last Execution for Payment Processor ended","value":"10/21/2015 22:23:45PM"},{"key":"Last Execution for Intelligent Offers ended","value":"10/21/2015 21:55:19PM"}] 

在Nagios的側上,當我運行下面的命令,檢查JSON輸出的可用性;它的工作原理,並返回結果:

命令:

/usr/bin/python /usr/local/nagios/libexec/check_http_json.py -H datamgrqa.example.local -p api/NOC/ValidateBackend 

輸出:

OK: Status OK 

但是當我運行下面的命令,它會檢查,如果下面的鍵「上次執行的通知服務無止境」是否存在或沒有,

usr/bin/python /usr/local/nagios/libexec/check_http_json.py -H datamgrqa.example.local -p api/NOC/ValidateBackend -e "Last Execution for Notification Service ended" 

我得到了下面的結果,儘管關鍵是堅持如你在上面的JSON輸出看到:

WARNING: Status check failed, reason: Key Last Execution for Notification Service ended did not exist 

當我運行下面的命令,驗證是否鍵「發行張數在過去24小時內的地位[待定],OCR狀態[完成]和匹配狀態[ N/A]」具有小於或等於50的值:

/usr/bin/python /usr/local/nagios/libexec/check_http_json.py -H datamgrqa.example.local:80 -p api/NOC/ValidateBackend -l "Receipt count in last 24 hours with status [Pending], OCR status [Complete] and Matching status [N/A]",50 

我得到下面的錯誤:

File "/usr/local/nagios/libexec/check_http_json.py", line 263, in <module> 
is_alive, reason = processor.isAlive() 
File "/usr/local/nagios/libexec/check_http_json.py", line 136, in isAlive 
k, v = kv.split(',') 
ValueError: too many values to unpack 

任何想法請?

非常感謝您的幫助!

回答

0

由於執行check_http_json.py,這是一個限制。

您傳入-l的值有2個逗號。

"Receipt count in last 24 hours with status [Pending], OCR status [Complete] and Matching status [N/A]",50 

check_http_json.py

137線這是分裂,關於逗號(,)和它的期待找回只有2個令牌整個字符串:鍵(k),和值(v)。

if self.rules.key_lte_list != None: 
    for kv in self.rules.key_lte_list: 
     k, v = kv.split(',') 
     if (self.helper.lte(k, v) == False): 
      reason += " Value %s was not less than or equal to value for key %s." % (v, k) 

但是,因爲你的 「鑰匙」 有逗號中有一個逗號,分割整個字符串(包括,50價值部分)將返回3個令牌:

  • TOKEN1:"Receipt count in last 24 hours with status [Pending]
  • token2:OCR status [Complete] and Matching status [N/A]"
  • token3:50

這就是爲什麼你會收到錯誤ValueError: too many values to unpack。 它分裂後期待2個標記,但它變得越來越3.

底線是,如果你想使用這個check_http_json.py插件原樣,你的密鑰不能有任何逗號。

編輯:(變通)

如果你需要一個解決,您可以修改check_http_json.py 使用不會出現在你的鑰匙不同的分隔符的東西替換的k, v = kv.split(',')每個實例。例如: k, v = kv.split('@')

然後修改您將參數傳遞給腳本的方式。而不是使用逗號分隔您的密鑰和值,請改爲使用類似@的內容。

/usr/bin/python /usr/local/nagios/libexec/check_http_json.py -H datamgrqa.example.local:80 -p api/NOC/ValidateBackend -l "Receipt count in last 24 hours with status [Pending], OCR status [Complete] and Matching status [N/A]@50" 

注:我感動的結束雙引號"圍住@50,因爲我認爲你會得到意想不到的結果,而它。嘗試兩種方法來確保。

+0

我已經更新了python文件並運行了你的命令,但是我得到了下面警告: 警告:狀態檢查失敗,原因:值3不小於或等於過去24小時內的密鑰收據計數值,狀態爲[不允許],OCR狀態[完成]和匹配狀態[N/A]。而當我運行命令(未返回正確答案)時,鍵「在過去24小時內收到狀態爲[不允許],OCR狀態[完成]和匹配狀態[N/A]」的鍵的值爲11。 – ASPR

+0

其實我懷疑,關鍵應該是一個字不一樣的空間: 「Receiptcountinlast24hourswithstatus [不允許],OCRstatus [CompleteandMatchingstatus [N/A]」 這個插件無法讀取特定鍵和確認其有效性正如我前面提到在我的問題描述中。 – ASPR