2017-08-31 11 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を使用していますので、行番号にそのコードが反映されています。私は特定のファイルのサイズを監視しようとしている

[ 
    { 
     "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" 
    } 
] 

JSONクエリは、このような何かを返します。私は私がいないCUSTOMER_IDとインデックスが、その位置を知るcustomer2でファイル名1のTOTAL_BYTESを監視できるように代を把握しようとしている

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

...:そうチェックは次のようになりますそれぞれのアレイにおいて。

文字列「[0]->{'total_bytes'}」を使用してcustomer1の合計バイト数を監視できますが、どの顧客を指定し、ファイル名(既知)とファイルサイズ(監視する統計情報)を詳しく調べることができ、ステータス(OK、WARNING、またはCRITICAL)を確認します。私が得るすべての-p追加すると、私はそれが常にあるフレーズにできましたか-pどんなにでエラー....

エラーです:

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

私はOK有効を得ることができた場合でも"[0]->{'total_bytes'}"の例では、-pのそれを使用しても同じエラーが返されます。

使用する書式のドキュメントを指すリンクは非常に役立ちます。スクリプトのREADMEや-h出力の例は、ここでは失敗しています。何か案は?

+0

https://stackoverflow.com/help/mcveを参照してください。 –

+0

あなたと元のcheck_jsonとの間に大きな隔たりがあるのは、JSONが返されるJSONが単一のオブジェクトであると予想しているのに対し、JSONはオブジェクトの配列です。あなたの$ json_responseはARRAY ref:行235(そして229行目、259行目、265行目)はHASH refであると予想しています。 –

答えて

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の合計を取得するにはどうすればよいですか?あなたがダウンしてこのポストをマークするつもりなら

あなたは、少なくとも理由を手掛かり私の中に礼儀を持っている場合、私はそれを感謝し、

関連する問題