この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
サーモン大好き、横山です。
前回、ZabbixのItemの追加が出来たということで、Itemの更新についてどうなのか。
また、ユーザグループの権限によってAPIの結果がどう変わるのかを調べてみました。
準備
前回同様、Amazon Linux 2015.03のt2.microを準備出来ればそれが一番早いと思いますが、
Rubyが動く環境であれば、大丈夫だと思います。
$ ruby --version
ruby 2.0.0p643 (2015-02-25) [x86_64-linux]
$ gem install zbxapi -v 0.3.8
Fetching: zbxapi-0.3.8.gem (100%)
Successfully installed zbxapi-0.3.8
Parsing documentation for zbxapi-0.3.8
Installing ri documentation for zbxapi-0.3.8
Done installing documentation for zbxapi after 0 seconds
1 gem installed
また、Zabbix 2.2を使用しています。
コード
流れと致しまして、
1.Zabbix APIからauthトークンもらう
2.登録するためのItemIDを item.get で取得する()
3.item.update するためのparamを設定する。先ほど取得したItemIDは itemid に設定する。
と、なります。
require 'zbxapi'
zabbix = ZabbixAPI.new('http://zabbix-host/zabbix', :debug => 4)
zabbix.login('user', 'password')
item_ids = zabbix.item.get(filter: {name: 'demo item'})
if item_ids.length > 0 then
item_id = item_ids.first['itemid']
item_params = {
itemid: item_id,
status: 0
}
zabbix.item.update(item_params)
else
p 'Not Found itemid'
end
item_params 内の status を0にすると、GUI上の「ステータス」を有効になり、
1にすると、無効になります。
結果
今回は以下のユーザでそれぞれの挙動を紹介します。
・Zabbixユーザで、ユーザグループ権限が「拒否」テンプレートのアイテムの場合
・Zabbixユーザで、ユーザグループ権限が「読込専用」テンプレートのアイテムの場合
・Zabbixユーザで、ユーザグループ権限が「読書可能」テンプレートのアイテムの場合
Zabbixユーザで、ユーザグループ権限が「拒否」テンプレートのアイテムの場合
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:408 Sending: {"jsonrpc":"2.0","method":"user.login","params":{"user":"user","password":"password"},"auth":null,"id":0}
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:410 Response Code: 200
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:411 Response Body: {"jsonrpc":"2.0","result":"69a2e02f668a6e0c5fdcc68824d15a2e","id":0}
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:408 Sending: {"jsonrpc":"2.0","method":"APIInfo.version","params":{},"auth":"69a2e02f668a6e0c5fdcc68824d15a2e","id":1}
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:410 Response Code: 200
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:411 Response Body: {"jsonrpc":"2.0","result":"2.2.9","id":1}
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:408 Sending: {"jsonrpc":"2.0","method":"item.get","params":{"filter":{"name":"demo item"}},"auth":"69a2e02f668a6e0c5fdcc68824d15a2e","id":2}
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:410 Response Code: 200
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:411 Response Body: {"jsonrpc":"2.0","result":[],"id":2}
"Not Found itemid"
結果はテンプレートへのアクセス権限がないので、itemidすら取得出来ません。
Zabbixユーザで、ユーザグループ権限が「読込専用」テンプレートのアイテムの場合
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:408 Sending: {"jsonrpc":"2.0","method":"user.login","params":{"user":"user","password":"password"},"auth":null,"id":0}
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:410 Response Code: 200
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:411 Response Body: {"jsonrpc":"2.0","result":"9a8935ea41d0e01ac7d265126634709b","id":0}
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:408 Sending: {"jsonrpc":"2.0","method":"APIInfo.version","params":{},"auth":"9a8935ea41d0e01ac7d265126634709b","id":1}
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:410 Response Code: 200
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:411 Response Body: {"jsonrpc":"2.0","result":"2.2.9","id":1}
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:408 Sending: {"jsonrpc":"2.0","method":"item.get","params":{"filter":{"name":"demo item"}},"auth":"9a8935ea41d0e01ac7d265126634709b","id":2}
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:410 Response Code: 200
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:411 Response Body: {"jsonrpc":"2.0","result":[{"itemid":"24638","value_type":"0","lastclock":"0","lastns":"0","lastvalue":"0","prevvalue":"0"}],"id":2}
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:408 Sending: {"jsonrpc":"2.0","method":"item.update","params":{"itemid":"24638","status":0},"auth":"9a8935ea41d0e01ac7d265126634709b","id":3}
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:410 Response Code: 200
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:411 Response Body: {"jsonrpc":"2.0","error":{"code":-32602,"message":"Invalid params.","data":"No permissions to referred object or it does not exist!"},"id":3}
/home/ec2-user/.gem/ruby/2.0/gems/zbxapi-0.3.8/zbxapi.rb:429:in `do_request': ZbxAPI_ExceptionLoginPermission
from /home/ec2-user/.gem/ruby/2.0/gems/zbxapi-0.3.8/zbxapi.rb:342:in `api_call'
from /home/ec2-user/.gem/ruby/2.0/gems/zbxapi-0.3.8/api_classes/api_dsl.rb:275:in `do'
from /home/ec2-user/.gem/ruby/2.0/gems/zbxapi-0.3.8/api_classes/api_dsl.rb:404:in `block in add'
from zbx_api3.rb:15:in `<main>'
結果は、itemidの取得は読取権限があるので出来ましたが、
item.updateの段階で、No permissions to referred object or it does not exist!と怒られ更新出来ませんでした。
Zabbixユーザで、ユーザグループ権限が「読書可能」テンプレートのアイテムの場合
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:408 Sending: {"jsonrpc":"2.0","method":"user.login","params":{"user":"user","password":"password"},"auth":null,"id":0}
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:410 Response Code: 200
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:411 Response Body: {"jsonrpc":"2.0","result":"b332d8f8d0c18d68e92b1ed1e00391a7","id":0}
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:408 Sending: {"jsonrpc":"2.0","method":"APIInfo.version","params":{},"auth":"b332d8f8d0c18d68e92b1ed1e00391a7","id":1}
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:410 Response Code: 200
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:411 Response Body: {"jsonrpc":"2.0","result":"2.2.9","id":1}
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:408 Sending: {"jsonrpc":"2.0","method":"item.get","params":{"filter":{"name":"demo item"}},"auth":"b332d8f8d0c18d68e92b1ed1e00391a7","id":2}
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:410 Response Code: 200
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:411 Response Body: {"jsonrpc":"2.0","result":[{"itemid":"24638","value_type":"0","lastclock":"0","lastns":"0","lastvalue":"0","prevvalue":"0"}],"id":2}
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:408 Sending: {"jsonrpc":"2.0","method":"item.update","params":{"itemid":"24638","status":0},"auth":"b332d8f8d0c18d68e92b1ed1e00391a7","id":3}
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:410 Response Code: 200
D4 .../zbxapi-0.3.8/zbxapi.rb:do_request:411 Response Body: {"jsonrpc":"2.0","result":{"itemids":["24638"]},"id":3}
結果は、item.updateが成功し、ステータスの更新をが成功しました。
成功すると、itemidsの結果を得る事ができます。
まとめ
Zabbixの管理ユーザでなくても、ユーザグループに「読書権限」のついたテンプレートであればAPIからItemの情報を更新することが出来ました。