たろさん7890のブログ

たろさん7890のブログ

PR

×

Profile

たろさん7890

たろさん7890

Calendar

Keyword Search

▼キーワード検索

Free Space




Shopping List

日本製 久留米産 はんてん メンズ 大きいサイズ おしゃれ 暖かい 大判サイズ ドビー織 アクリル生地 中綿 手詰め 男性用 袢纏 半天 半纏 どてら ちゃんちゃんこ 丹前 冬 部屋着 手づくり プレゼント ギフト
『1年保証』送料無料 累計230000個完売!レビュー投稿で10つ以上のプレゼントから選択可! USB 3.0対応 書き込み 読み込み cdドライブTYPE-Cコネクター付き ケーブル内蔵「ランキング常連1位!」1年保証 DVDドライブ 外付け dvd cd ドライブ 外付け USB 3.0対応 書き込み 読み込み dvdドライブ 外付けdvdドライブ cdドライブ TYPE-Cコネクター ケーブル内蔵 CD/DVD-RWドライブ Mac Windows11対応 敬老の日
ふっくら仕上げ★無添加★網元が作る釜揚げシラス【極上品】釜揚げシラス【1k】(250gx4P)小分けパック【千葉県産】国産 送料無料 冷凍 天然 海鮮 母の日 父の日 敬老の日 お祝い 御中元 御歳暮 ギフト やみつき 特産 やわらか ふっくら 健康 網元 漁師直送
【おかげさまで楽天ランキング1位獲得!】加工場は漁港のすぐそば。門外不出の塩加減調整で、ふわふわの釜揚げしらすを実現。小分けで便利です。化粧箱なし割引!【楽天1位獲得】【化粧箱無し割引】龍馬しらす 250g×4パック 1000g 1kg 釜揚げしらす 小分けで便利 国産 高知産 冷凍 ギフト 自宅用 お中元 お歳暮 母の日 父の日 子供 赤ちゃん うす塩 天日干し 丼 大容量 お得用
【ちりめんじゃこ・しらす干しデイリーランキング1位獲得】 【 減塩 愛知県 ちりめんじゃこ シラス 減塩 国産 愛知 お土産 お歳暮 ギフト お取り寄せグルメ お取り寄せ 海鮮 送料無料 】しらす干し1kg 小分け(200×5) 訳あり 愛知県産 ちりめん 【 シラス干し しらす 減塩 愛知県 ちりめんじゃこ シラス 減塩 国産 愛知 お土産 お歳暮 ギフト お取り寄せ 海鮮 】
2020.06.10
XML
カテゴリ: zabbix API
​​​​​​​​​zabbix APIを使ってみようと思い、curlを使って、APIをよんでみました。

使い方がわからず、もろもろ、試してみて、やっとAPIのよびかたもわかり、
なんとか実行して、たどり着いたのが、以下のエラーです。

{"jsonrpc":"2.0","error":{"code":-32700,"message":"Parse error","data":"Invalid JSON. An error occurred on the server while parsing the JSON text."},"id":null}


ここに至るまでの過程を説明します。

​​​ ​1.やりたいこと​​​

・zabbix APIを使って、zabbixに登録されているhostなどのデータを取得したい
・最終的には、仮想マシン(CentOS)からAPIを呼び出し、取得したデータをMySQLへ登録したい
・zabbix は別の仮想マシンで稼働中
・MySQLは、Auzure Database for MySQL(8.0)を利用

​2.現時点での制約​

・zabbixサーバと仮想マシンの間のF/Wで、http(80)が閉じている
・仮想マシンとは別ネットワークにせっちしている、作業用のPCから、zabbixの管理画面には接続できる
・F/Wの設定変更完了まで、時間がかかる

​​3.現時点​​

F/Wが開いたら、すぐに仮想マシンでのデータ取得を行いたいので、
まず、現時点では、作業用PCで、準備を進めることにしました。

​​(1)curl環境の準備​​

作業用PC:Window10

まず、APIをよぶ環境をつくるため、2つのことをしました。
・curlコマンドのインストール
・Postmanのインストール

仮想マシンでは、データの取得処理は自動で行う予定で、また、そこでは、curlコマンドを使う想定でいます。

したがって、PCで同じ環境を準備しておいて、あとで、仮想マシンに移行しようと考えました。

そこで、curlがあれば、とりあえずはデータ取得できるはず、と考えて、インストールして、
APIを呼んでみたわけですが、いろいろエラーがでて、よく分かりません状態に・・・・。
何しろ、curlは使ったことがない、まったくの初心者です。
何が悪いのか、さっぱりわからず。

APIからデータを持ってくるためには、APIから認証キーを取得する必要があるわけで、
つまり、APIに接続できなくてはいけない、でもその接続がうまくいかない・・・・という、ニワトリと卵、的は状況なわけで・・・。


で、問題を切り分けます。
・ブラウザから、zabbixの管理画面は表示できるので、作業用PCとzabbixの間の通信は大丈夫です。
・APIは80番ポートでアクセスするので、ブラウザの設定はOKということになります。
・curlコマンドですが、これは初心者なので、使い方を間違えている可能性があります。

そこで、問題の解明のために、ブラウザから利用できるPostmanをインストールしました。
APIをよぶときのパラメータ等を変更しながら、レスポンスをブラウザで確認できます。
以前、Postmanを少し使ったことがあるので、これなら、問題の切り分けができるだろう、と考えたわけです。


​(2)PostmanからのAPI実行​

確認のために想定したステップは次のとおり。

[ステップ1] apiinfo.version というAPIのmethodをつかって、まずは、接続確認。うまく、接続できれば、APIのバージョンを取得できるはずです
[ステップ2] user.login というmethodをつかって、認証キーを取得します。
[ステップ3] host.get というmethodをつかって、この取得キーを渡して、zabbixに登録されているhostデータを取得します。


それぞれのステップで、APIに渡すパラメータ(JSON形式です)は、次のとおりです。

[ステップ1]
{
"jsonrpc": "2.0",
"method": "apiinfo.version",
"id": 1,
"auth": null,
"params": {}
}

[ステップ2]
{
"auth": null,
"method": "user.login",
"id": 1,
"params": {
"password": "CGs8WE2loq",
"user": "Admin"
},
"jsonrpc": "2.0"
}

[ステップ3]
{
"auth": null,
"method": "user.login",
"id": 1,
"params": {
"password": "パスワード",
"user": "ユーザアカウント"
},
"jsonrpc": "2.0"
}


postmanをつかって、ひとつずつ実行してみます。

[ステップ1]
 バージョンの情報が、JSONデータとして、返ってきました!
[ステップ2]
 認証キーが返ってきました!
[ステップ3]
 登録されているホスト情報が、たくさん返ってきました!


(3)問題の切り分け

つまり、APIの呼び出しは、渡しているパラメータも含めて、すべて正常なようです。
ということは、問題は、curlコマンドの使いかた、ということになります。

curlコマンドで、APIを呼ぶときは、次のようにしています。(1行です)

curl -X POST -H "Content-Type: application/json-rpc" -d '{"jsonrpc": "2.0","method": "apiinfo.version","id": 1,"auth": null,"params":{}}' http://xxx.xxx.xxx.xxx/zabbix/api_jsonrpc.php

このコマンドを実行すると、表記のエラーとなるわけです。
最初のうちは、パラメータを複数行に分けていましたが、エラー原因を切り分けるために、最終的には、この1行コマンドにしています。

さて、URLが正しいことは、Postmanで実証済みです。
{(中カッコ)や、’(シングルコーテーション)や”(ダブルコーテーション)の括りも問題がないことは、Postmanで実証ずみです。
でも、エラーの内容はどうも、このあたりを差しています。
「parsing」のエラーだと言っているので、このあたりの対応関係がおかしいはずなのです。

散々、調べました。でも分からない・・・。

グーグル先生に聞くと、DNS関連の問題とするのが多いですが、私はIPアドレスで指定していて、URLが正しいことも実証済み。
やはり、行きつくところは、この”、’、{ の対応が、curlコマンドに、正しく解釈されていないだろう、ということです。

そして、そして、散々、調べた結果、たどり着いたのは、
Windowでは、’(シングルコーテーション)を文字列の括りとして、解釈してくれない、
ということでした。
グーグル先生は、Linux系の出身の方が多くて、
​Window環境でのエラーというのが、ポイントでした!​

自分のあたまの、Linux系なので、気づくのに時間がかかりました。
おそらく、Linuxであれば、そもそもエラーなっていないはず、だったわけで。


つまり
・’(シングルコーテーション)は、文字列の開始ではなく、データの一部と解釈されている
・JSONの”(ダブルコーテーション)が文字列として解釈されている
・その結果、{パラメータ}のところのパースが失敗している

そこで、’(シングルコーテーション)を”(ダブルコーテーション)に変更して、
JSONデータの”(ダブルコーテーション)をデータとして判断されるように、¥(バックスラッシュ)でエスケープさせました。


​(3)結果​

変更後のコマンドがこちら。

curl -X POST -H "Content-Type: application/json-rpc" -d "{\"jsonrpc\": \"2.0\",\"method\": \"apiinfo.version\",\"id\": 1,\"auth\": null,\"params\":{}}" http://xxx.xxx.xxx.xxx/zabbix/api_jsonrpc.php

これで、無事、APIのバージョン情報をJSONデータとして、受信することができました!!


いやー、初心者はすべてが勉強なので、時間かかります(泣)


​​
​​​​​​​​​





お気に入りの記事を「いいね!」で応援しよう

Last updated  2020.06.11 03:59:10
コメント(0) | コメントを書く


■コメント

お名前
タイトル
メッセージ
画像認証
上の画像で表示されている数字を入力して下さい。


利用規約 に同意してコメントを
※コメントに関するよくある質問は、 こちら をご確認ください。


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
Create a Mobile Website
スマートフォン版を閲覧 | PC版を閲覧
Share by: