質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

3898閲覧

pythonによるzabbixのAPI方法について

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/12/17 12:59

pythonでzabbixのAPIを使用し、データーの取得を行いたいのですが、
APIを利用するにあたり、認証トークンを取得、設定など

実際に具体的に何をどのようにすればいいのか、自分なりに以下のサイトなどで
調べても全く分からない状態です。

認証トークンの取得は、SSHでzabbixサーバーに接続して取得するものなのでしょうか?
(最初の段階で、本当に何をどうしたらよいのか分からない状態です。)

https://www.sraoss.co.jp/technology/zabbix/introduction/03-3rdstep/

https://www.zabbix.com/documentation/current/en/manual/api

https://devlog.arksystems.co.jp/2020/07/28/13168/

認証トークンの取得し、pythonでzabbixに接続する方法を教えてください。
(APIは、色々サイトを調べ情報を取得してくるためのURLというようなことは理解できております。)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

「zabbix 認証トークン」で調べるといくつか解説サイトがでてきますが、それを参照されていますか?

こことか

こことか

取得方法については両方同じことが書いてありますが、これらでやりかたがわからなければ、また問い合わせください。

投稿2021/12/17 13:10

TakaiY

総合スコア13790

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/12/18 02:33 編集

回答ありがとうございます。 VScodeで以下のコードを書いて実行してみたのですが、 これでよろしいのでしょうか? まず、何をすればよいのか、どの様なコードを書けば良いのかもわからない状態です。 ご紹介いただきましたサイト以外にも調べたのですが、user.loginメソッドを利用するということは どこでも記載されているのですが、その前段階(zabbixサーバーに接続するコードなど、そもそもcurl -s -dのコマンドは、SSHでzabbixに接続、ログインし、zabbixサーバーで実行するのかなど)が分からない状態です。 ``` # zabbixサーバーのIP:192.168.1.1 import json import requests url = "http://192.168.1.1/zabbix" res = requests.get(url) print(res) # 200 OK取得 curl -s -d '{ "jsonrpc": "2.0", "method": "user.login", "params": { "user": "Admin", "password": "testpw" }, "id": 1, "auth": null }' -H "Content-Type: application/json-rpc" http://192.168.1.1/zabbix/api_jsonrpc.php ```
退会済みユーザー

退会済みユーザー

2021/12/18 06:38

すいません。 本当にどなたか教えてください。
TakaiY

2021/12/18 06:44

(あら、コメント投稿したはずなのに消えている) 基本的に間違えています。 curl以下のコマンドは、pythonのコードではなく、コマンドプロンプトから実行するものです。 curlコマンドで検索すれば、それが何をするものなのかわかると思います。WebAPIやサイトとコマンドラインでやりとりするためのコマンドです。
退会済みユーザー

退会済みユーザー

2021/12/18 10:21

コマンドプロンプトで以下コマンドを実行しました。 curl -s -d '{ "jsonrpc": "2.0","method": "user.login","params": { "user": "admin","testpw": "mgrnissuic0n"},"id": 1,"auth": null}' -H "Content-Type: application/json-rpc" http://192.168.1.1/zabbix/api_jsonrpc.php レスポンスとして以下が返ってきました。書式が間違っていると、エラーです。 {"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} 一体、どこがちがうのでしょう??
退会済みユーザー

退会済みユーザー

2021/12/18 10:41 編集

以下の様に変更したらエラーが解消しました。 curl -X POST -H "Content-Type: application/json-rpc" -d "{\"jsonrpc\": \"2.0\",\"method\": \"apiinfo.version\",\"id\": 1,\"auth\": null,\"params\":{}}" http://192.168.1.1/zabbix/api_jsonrpc.php 実行結果メッセージ↓ {"jsonrpc":"2.0","result":"5.0.18","id":1} ’(シングルコーテーション)を”(ダブルコーテーション)に変更して、 JSONデータの”(ダブルコーテーション)をデータとして判断されるように、¥(バックスラッシュ)でエスケープさせました。 その結果、以下のメッセージが表示されました。これでトークンは取得できているのでしょうか? {"jsonrpc":"2.0","result":"5.0.18","id":1} ここから、どうしたら良いのでしょうか?
TakaiY

2021/12/18 13:50 編集

直前のコメントのコマンドはどこから取ってきたものですか? \"method\": \"apiinfo.version\" となっているので、バージョンの問い合わせですね。 で、答えが、 "result":"5.0.18" ですから、ちゃんと通信できてますね。 でもこれはトークンではありません。 2つまえのコメントの内容であれば、トークンが返ってくると思うので、そちらで試してみてください。
退会済みユーザー

退会済みユーザー

2021/12/19 02:11 編集

zabbix_server -V zabbix_server (Zabbix) 5.0.18 \"method\": \"user.login にして こちらのコマンドを試したのですが、どうしてもエラーになってしまいます。 ''' curl -X POST -d '{\"jsonrpc\": \"2.0\",\"method\": \"user.login\",\"params\": { \"user\": \"admin\",\"password\": \"testpw\"},\"id\": 1,\"auth\": null}' -H "Content-Type: application/json-rpc" http://192.168.1.1/zabbix/api_jsonrpc.php ''' ''' curl: (6) Could not resolve host: "2.0","method" curl: (6) Could not resolve host: "user.login","params" curl: (3) [globbing] unmatched brace in column 1 curl: (6) Could not resolve host: "user" curl: (6) Could not resolve host: "root","password" curl: (3) [globbing] unmatched close brace/bracket in column 15 curl: (6) Could not resolve host: 1,"auth" curl: (3) [globbing] unmatched close brace/bracket in column 5 {"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} '''
TakaiY

2021/12/19 03:20

エラーを見ると、 ・ -dオプションの引数である文字列がかたまりとして認識されておらず、途中から引数として認識されてしまっていて、「そんなホストはない(Could not resolve host)」とされている ・「{}」の対応がおかしい([globbing] unmatched brace)と出ている ・最後にJSONデータが壊れていると出てくる なので、コマンドの文字列がちゃんと認識されていませんね。 2つまえのコメントに「(シングルコーテーション)を”(ダブルコーテーション)に変更し」たらうまくいったのであれば、これについても同様にしてみたらどうでしょうか。
退会済みユーザー

退会済みユーザー

2021/12/19 03:43

{}やエスケープ処理を修正しましたが、ダメです。 curl -X POST -d '{\"jsonrpc\": \"2.0\",\"method\": \"user.login\",\"params\": {{ \"user\": \"admin\",\"password\": \"testpw\"},\"id\": 1,\"auth\": null}' -H \"Content-Type: application/json-rpc\" http://192.168.1.1/zabbix/api_jsonrpc.php curl: (6) Could not resolve host: "2.0","method" curl: (6) Could not resolve host: "user.login","params" curl: (3) [globbing] nested brace in column 2 curl: (6) Could not resolve host: "user" curl: (6) Could not resolve host: "root","password" curl: (3) [globbing] unmatched close brace/bracket in column 15 curl: (6) Could not resolve host: 1,"auth" curl: (3) [globbing] unmatched close brace/bracket in column 5 curl: (6) Could not resolve host: application
TakaiY

2021/12/19 04:22

もういちど書きますね。 「(シングルコーテーション)を”(ダブルコーテーション)に変更し」たらうまくいったのであれば、これについても同様にしてみたらどうでしょうか。
退会済みユーザー

退会済みユーザー

2021/12/19 07:40 編集

「(シングルコーテーション)を”(ダブルコーテーション)に変更してもダメなようです・ 実行コマンド↓ curl -X POST -d "{\"jsonrpc\": \"2.0\",\"method\": \"user.login\",\"params\": {{ \"user\": \"admin\",\"password\": \"testpw\"},\"id\": 1,\"auth\": null}" -H \"Content-Type: application/json-rpc\" http://192.168.1.1/zabbix/api_jsonrpc.php 結果↓ curl: (6) Could not resolve host: application
退会済みユーザー

退会済みユーザー

2021/12/19 10:56 編集

コピペではなく、コマンドプロンプトに手で入力し、全てダブルコーテーションにし、エスケープしてみましたがダメです。 curl -X POST -d \"\{\"jsonrpc\":\"2.0\",\"method\":\"user.login\",\"params\":\{\{\"user\":\"admin\",\"password\":\"testpw\"\}\",\"id\":1,\"auth\":null\} -H Content-Type:application/json-rpc http://192.168.1.1/zabbix/api_jsonrpc.php 実行結果 {"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}
TakaiY

2021/12/19 12:48

「H \"Content-Type: application/json-rpc\"」 ここの、ダブルクオーテーションをエスケープしてはいけません。 H "Content-Type: application/json-rpc" エスケープするのは、文字列の中にあるダブル/シングルクオーテーションを文字列に含めるためですから。
退会済みユーザー

退会済みユーザー

2021/12/20 08:42 編集

H "Content-Type: application/json-rpc" として実行しましたが、エラーとなってしまいます。 ``` curl -X POST -d \"\{\"jsonrpc\":\"2.0\",\"method\":\"user.login\",\"params\":\{\{\"user\":\"admin\",\"password\":\"testpw\"\}\",\"id\":1,\"auth\":null\}\" -H "Content-Type:application/json-rpc" http://192.168.1.1/zabbix/api_jsonrpc.php ``` ``` {"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} ```
退会済みユーザー

退会済みユーザー

2021/12/20 08:19

こちらの記事も確認しましたが、今まで試してきたことが書かれているだけで 他に手がかりになりそうな情報が無いです。とにかく、調べまくっていますが、 どうしてもエラーが解消できない状況が続いております。 https://plaza.rakuten.co.jp/taro3chidayo/diary/202006100000/
TakaiY

2021/12/20 08:56

エラーを見ると、JSONとして間違えているとありますね。 ちょっと見たところでは、 params の後 「{ 」が 2つありますが、ここは 1つでしょう。 他は見てませんが、あらためて確認するか、作りなおしてみては。
退会済みユーザー

退会済みユーザー

2021/12/21 00:26 編集

params の後 「{ 」が 2つありますが、ここは 1つでしょう。を修正しましたが、やはりエラーとなってしまいます。 ' curl -X POST -d \"\{\"jsonrpc\":\"2.0\",\"method\":\"user.login\",\"params\":\{\"user\":\"admin\",\"password\":\"testpw\"\}\",\"id\":1,\"auth\":null\}\" -H "Content-Type:application/json-rpc" http://192.168.1.1/zabbix/api_jsonrpc.php ' ``` {"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} ```
TakaiY

2021/12/21 00:58

「あらためて確認」してるのでしょうか。 testpw\"\}\", 少なくともこの最後にある \" は不要です。 あと、以前メソッドは間違えていたけれども通信はできたもの "{\"jsonrpc\": \"2.0\",\"method\": \"apiinfo.version\",\"id\": 1,\"auth\": null,\"params\":{}}" 今回のもの \"\{\"jsonrpc\":\"2.0\",\"method\":\"user.login\",\"params\":\{\"user\":\"admin\",\"password\":\"testpw\"\}\",\"id\":1,\"auth\":null\}\" くらべてみると、いつからついているのかわかりませんが、 {}の前に\が入っています。 取り除いてみては?
退会済みユーザー

退会済みユーザー

2021/12/21 02:22 編集

ご指摘ありがとうございます。 以下2点を対応しましたが、やはりエラーとなってしまいます。。。 testpw\"\}\", → \" は不要です {}の前に\が入っています。 → 取り除いてみては? ''' curl -X POST -d '{\"jsonrpc\":\"2.0\",\"method\":\"user.login\",\"params\":{\"user\":\"admin\",\"password\":\"testpw\"},\"id\":1,\"auth\":null}' -H "Content-Type:application/json-rpc" http://192.168.1.1/zabbix/api_jsonrpc.php ''' ''' {"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} '''
TakaiY

2021/12/21 02:32

-d のオプションを「'」で囲っているとはじかれるということで「"」に変更したのではなかったでしょうか? -d '{\"js ":null}' -H 「'」になってます。 「'」でうまくいくのであれば、"の前の\は不要です。 「"」でやるなら\は必要です。
退会済みユーザー

退会済みユーザー

2021/12/21 02:52 編集

何度も申し訳ありません。 -d \"{ }\" の形に戻しました。 実行してみると、今度は、違うエラーが表示されました。 ‘‘‘ curl -X POST -d "\{\"jsonrpc\":\"2.0\",\"method\":\"user.login\",\"params\":\{\"user\":\"admin\",\"password\":\"testpw\"\}\}",\"id\":1,\"auth\":null\}" -H "Content-Type:application/json-rpc" http://192.168.1.1/zabbix/api_jsonrpc.php ’’’ ’’’ curl: no URL specified! curl: try 'curl --help' for more information ’’’
TakaiY

2021/12/21 02:58

{}の前の\が復活してますね。 他のところもちゃんと確認ください。 途中の文字列がおかしくなっていて最後のURLが判別できなくなっているために起きているエラーです。
TakaiY

2021/12/21 03:00

・元のコマンドを用意する ・-dオプション引数の中にある「"」の前に\を付ける ・-dオプションの引数を囲む「'」を「"」に変更する。\は付けない だけだと思いますが。
退会済みユーザー

退会済みユーザー

2021/12/21 05:12 編集

ご指摘いただきました下記3つを確認し、実行しましたが、どうしてもエラーとなってしまいます。 ・元のコマンドを用意する ・-dオプション引数の中にある「"」の前に\を付ける ・-dオプションの引数を囲む「'」を「"」に変更する。\は付けない ''' curl -X POST -d "{\"jsonrpc\":\"2.0\",\"method\":\"user.login\",\"params\":{\"user\":\"admin\",\"password\":\"testpw\"}",\"id\":1,\"auth\":null} -H "Content-Type:application/json-rpc" http://192.168.1.1/zabbix/api_jsonrpc.php ''' ''' {"jsonrpc":"2.0","error":{"code":-32602,"message":"Invalid params.","data":"Incorrect user name or password or account is temporarily blocked."},"id":1} '''
TakaiY

2021/12/21 05:14

エラーの中身見てますか? "Incorrect user name or password or account is temporarily blocked." 今度は「ユーザ名とパスワードが違う、もしくは、アカウントがブロックされている」と言われてます。 確認ください。 まあ、コマンドは通るようになったってことなので、進みましたね。
退会済みユーザー

退会済みユーザー

2021/12/21 05:18

一応、user:admin passwrod:testpw でSSH接続可能なこと、ルート権限があることを確認しました。
退会済みユーザー

退会済みユーザー

2021/12/21 05:24 編集

できました!! トークンの取得が無事できました。 実行コマンド ’’’ curl -X POST -d "{\"jsonrpc\":\"2.0\",\"method\":\"user.login\",\"params\":{\"user\":\"root\",\"password\":\"testpw\"},\"id\":1,\"auth\":null}" -H "Content-Type:application/json-rpc" http://192.168.1.1/zabbix/api_jsonrpc.php ''' お付き合いいただき、本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問