2017-08-31 82 views
-2

因此,我試圖在NagiosXI中設置check_json.pl來監視一些統計信息。 https://github.com/c-kr/check_jsoncheck_json.pl中JSON查詢的屬性語法

我使用的是code with the modification I submitted in pull request #32,所以行號反映了該代碼。

JSON的查詢返回這樣的事:

[ 
    { 
     "total_bytes": 123456, 
     "customer_name": "customer1", 
     "customer_id": "1", 
     "indices": [ 
      { 
       "total_bytes": 12345, 
       "index": "filename1" 
      }, 
      { 
       "total_bytes": 45678, 
       "index": "filename2" 
      }, 

     ], 
     "total": "765.43gb" 
    }, 
    { 
     "total_bytes": 123456, 
     "customer_name": "customer2", 
     "customer_id": "2", 
     "indices": [ 
      { 
       "total_bytes": 12345, 
       "index": "filename1" 
      }, 
      { 
       "total_bytes": 45678, 
       "index": "filename2" 
      }, 

     ], 
     "total": "765.43gb" 
    } 
] 

我試圖監視大小的特定文件。所以檢查應該是這個樣子:

/path/to/check_json.pl -u https://path/to/my/json -a "SOMETHING" -p "SOMETHING" 

...這裏我試圖找出出頭,這樣我可以監視的customer2文件名1的TOTAL_BYTES那裏,我認識了CUSTOMER_ID和指標,但不是他們的位置在相應的陣列中。

我可以通過使用字符串「[0]->{'total_bytes'}」來監控customer1的總字節數,但我需要能夠指定哪個客戶並深入挖掘文件名(已知)和文件大小(監控的stat),而工作查詢只給出我的狀態(OK,WARNING或CRITICAL)。添加-p我得到的是錯誤....

與-p錯誤無論怎樣我已經能夠句話總是:

Not a HASH reference at ./check_json.pl line 235. 

即使我能得到一個有效的OK從示例「[0]->{'total_bytes'}」中,使用-p仍然會給出相同的錯誤。

鏈接指向要使用的格式的文檔將是非常有用的。 README中的腳本或-h輸出中的示例在這裏失敗。有任何想法嗎?

+0

如果你要向下紀念這個崗位,我將不勝感激,如果你至少有禮節線索我,爲什麼。 –

+0

看起來,你和原始check_json之間的巨大斷開是原始的期望返回的JSON是一個單一的對象,而你的JSON是一個對象數組。你的$ json_response是一個ARRAY ref:第235行(和第229,259,265行)期望它是一個HASH文件。 –

回答

0

我真的不知道你的問題是什麼。我敢肯定,我並不孤單,因此是降價。

一旦你解碼JSON,如果你有一個CUSTOMER_ID搜索,你可以這樣做:

my ($customer_info) = grep {$_->{customer_id} eq $customer_id} @$json_response; 

關於上線235錯誤,這看起來很奇怪:

foreach my $key ($np->opts->perfvars eq '*' ? map { "{$_}"} sort keys %$json_response : split(',', $np->opts->perfvars)) { 
    # ....................................... ^^^^^^^^^^^^^ 
    $perf_value = $json_response->{$key}; 

如果perfvars eq「*」,例如,您似乎在尋找$json_reponse->{"{total}"}。您可能需要驗證用戶輸入:

die "no such key in json data: '$key'\n" unless exists $json_response->{$key}; 

這整個字符串化的哈希查找裁判的業務只是味道不好。

更好的問題應該是這樣的:

我有這樣的JSON數據。如何獲得ID爲1的客戶的total_bytes總和?

https://stackoverflow.com/help/mcve