18 API
Pārskats
Zabbix API ļauj programmatiski izgūt un mainīt Zabbix konfigurāciju, kā arī nodrošina piekļuvi vēsturiskajiem datiem. To plaši izmanto, lai:
- izveidotu jaunas lietojumprogrammas darbam ar Zabbix;
- integrētu Zabbix trešo pušu programmatūrā;
- automatizētu ikdienas uzdevumus.
Zabbix API ir uz HTTP balstīts API, un tas tiek piegādāts kā daļa no tīmekļa lietotāja saskarnes. Tas izmanto JSON-RPC 2.0 protokolu, kas nozīmē divas lietas:
- API sastāv no atsevišķu metožu kopas;
- pieprasījumi un atbildes starp klientiem un API tiek kodēti, izmantojot JSON formātu.
Plašāku informāciju par protokolu un JSON skatiet JSON-RPC 2.0 specifikācijā un JSON formāta mājaslapā.
Plašāku informāciju par Zabbix funkcionalitātes integrēšanu jūsu Python lietojumprogrammās skatiet Python bibliotēka Zabbix.
Lietotāja piekļuve Zabbix, tostarp gan konfigurācijai, gan vēsturiskajiem datiem, ir atkarīga no lietotāja tipa, piešķirtās lietotāja lomas un lietotāju grupām.
Struktūra
API sastāv no vairākām metodēm, kas nosacīti ir sagrupētas
atsevišķos API. Katra metode veic vienu konkrētu uzdevumu. Piemēram,
metode host.create pieder host API un tiek izmantota
jaunu hostu izveidei. Vēsturiski API dažkārt tiek dēvēti par
"klasēm".
Lielākā daļa API satur vismaz četras metodes: get,
create, update un delete, kas paredzētas attiecīgi datu
iegūšanai, izveidei, atjaunināšanai un dzēšanai, taču daži API var nodrošināt
pilnīgi atšķirīgu metožu kopu.
Pieprasījumu veikšana
Kad esat iestatījis lietotāja saskarne, varat izmantot attālinātus HTTP pieprasījumus, lai
izsauktu API. Lai to izdarītu, jums ir jānosūta HTTP POST pieprasījumi uz
api_jsonrpc.php failu, kas atrodas lietotāja saskarne direktorijā. Piemēram,
ja jūsu Zabbix lietotāja saskarne ir instalēta vietnē https://example.com/zabbix,
HTTP pieprasījums apiinfo.version metodes izsaukšanai var izskatīties
šādi:
curl --request POST \
--url 'https://example.com/zabbix/api_jsonrpc.php' \
--header 'Content-Type: application/json-rpc' \
--data '{"jsonrpc":"2.0","method":"apiinfo.version","params":{},"id":1}'
Pieprasījumam jābūt ar Content-Type galveni, kurai iestatīta viena no šīm
vērtībām: application/json-rpc, application/json vai
application/jsonrequest.
Pieprasījuma objektam jāsatur šādas īpašības:
jsonrpc- JSON-RPC protokola versija, ko izmanto API (Zabbix API īsteno JSON-RPC 2.0. versiju);method- izsauktā API metode;params- parametri, kas tiks nodoti API metodei;id- patvaļīgs pieprasījuma identifikators (ja tas ir izlaists, API apstrādā pieprasījumu kā paziņojumu).
Ja pieprasījums ir pareizs, API atgrieztajai atbildei vajadzētu izskatīties šādi:
{
"jsonrpc": "2.0",
"result": "8.0.0",
"id": 1
}
Savukārt atbildes objekts satur šādas īpašības:
jsonrpc- JSON-RPC protokola versija;result- metodes atgrieztie dati;id- atbilstošā pieprasījuma identifikators.
Darbplūsmas piemērs
Nākamajā sadaļā jūs iepazīstināsim ar dažiem lietošanas piemēriem sīkāk.
Autentifikācija
Lai piekļūtu jebkādiem datiem Zabbix, jums ir jāizmanto viens no šiem variantiem:
- izmantot esošu API tokenu (izveidotu Zabbix lietotāja saskarnē vai izmantojot Token API);
- izmantot autentifikācijas tokenu, kas iegūts ar user.login metodi.
Piemēram, ja vēlaties iegūt jaunu autentifikācijas tokenu, piesakoties kā standarta Admin lietotājs, tad JSON pieprasījums izskatītos šādi:
curl --request POST \
--url 'https://example.com/zabbix/api_jsonrpc.php' \
--header 'Content-Type: application/json-rpc' \
--data '{"jsonrpc":"2.0","method":"user.login","params":{"username":"Admin","password":"zabbix"},"id":1}'
Ja norādījāt akreditācijas datus pareizi, API atgrieztajā atbildē jābūt lietotāja autentifikācijas tokenam:
{
"jsonrpc": "2.0",
"result": "0424bd59b807674191e7d77572075f33",
"id": 1
}
Autorizācijas metodes
Ar "Authorization" galveni
Visiem API pieprasījumiem ir nepieciešama autentifikācija vai API marķieris. Jūs varat norādīt akreditācijas datus, izmantojot pieprasījumā galveni Authorization:
curl --request POST \
--url 'https://example.com/zabbix/api_jsonrpc.php' \
--header 'Authorization: Bearer 0424bd59b807674191e7d77572075f33'
Ja rodas autentifikācijas problēmas, skatiet Authorization header forwarding.
Zabbix API pieņem galvenes neatkarīgi no burtu reģistra (piemēram, authorization, Authorization un AUTHORIZATION tiek apstrādātas vienādi).
Authorization galvene tiek atbalstīta starpizcelsmes pieprasījumos (CORS).
Ar Zabbix sīkdatni
Sīkdatne "zbx_session" tiek izmantota, lai autorizētu API pieprasījumu no Zabbix lietotāja saskarnes, kas izpildīts, izmantojot JavaScript (no moduļa vai pielāgota logrīka).
Hostu izgūšana
Tagad jums ir derīgs lietotāja autentifikācijas marķieris (attēlots kā mainīgais tālākajos piemēros), ko var izmantot, lai piekļūtu datiem Zabbix. Piemēram, varat izmantot metodi host.get, lai izgūtu visu konfigurēto hostu ID, hostu nosaukumus un saskarnes:
Pieprasījums:
curl --request POST \
--url 'https://example.com/zabbix/api_jsonrpc.php' \
--header 'Authorization: Bearer ${AUTHORIZATION_TOKEN}' \
--header 'Content-Type: application/json-rpc' \
--data @data.json
data.json ir fails, kas satur JSON vaicājumu. Faila vietā varat nodot vaicājumu argumentā --data.
data.json
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [
"hostid",
"host"
],
"selectInterfaces": [
"interfaceid",
"ip"
]
},
"id": 2
}
Atbildes objekts saturēs pieprasītos datus par hostiem:
{
"jsonrpc": "2.0",
"result": [
{
"hostid": "10084",
"host": "Zabbix server",
"interfaces": [
{
"interfaceid": "1",
"ip": "127.0.0.1"
}
]
}
],
"id": 2
}
Veiktspējas apsvērumu dēļ vienmēr ir ieteicams norādīt objektu īpašības, kuras vēlaties izgūt. Tādējādi jūs izvairīsieties no visa izgūšanas.
Jauna vienuma izveide
Tagad izveidojiet jaunu vienumu hostā "Zabbix
serveris", izmantojot datus, ko ieguvāt iepriekšējā host.get
pieprasījumā. To var izdarīt, izmantojot
item.create metodi:
curl --request POST \
--url 'https://example.com/zabbix/api_jsonrpc.php' \
--header 'Authorization: Bearer ${AUTHORIZATION_TOKEN}' \
--header 'Content-Type: application/json-rpc' \
--data '{"jsonrpc":"2.0","method":"item.create","params":{"name":"Free disk space on /home/joe/","key_":"vfs.fs.size[/home/joe/,free]","hostid":"10084","type":0,"value_type":3,"interfaceid":"1","delay":30},"id":3}'
Veiksmīgā atbildē būs ietverts jaunizveidotā vienuma ID, ko var izmantot, lai atsauktos uz vienumu turpmākajos pieprasījumos:
{
"jsonrpc": "2.0",
"result": {
"itemids": [
"24759"
]
},
"id": 3
}
Metode item.create, kā arī citas izveides metodes,
var pieņemt arī objektu masīvus un ar vienu API izsaukumu izveidot vairākus vienumus.
Vairāku trigeru izveide
Tādējādi, ja izveides metodes pieņem masīvus, varat pievienot vairākus trigerus, piemēram, šos:
curl --request POST \
--url 'https://example.com/zabbix/api_jsonrpc.php' \
--header 'Authorization: Bearer ${AUTHORIZATION_TOKEN}' \
--header 'Content-Type: application/json-rpc' \
--data '{"jsonrpc":"2.0","method":"trigger.create","params":[{"description":"Procesora slodze ir pārāk augsta uz {HOST.NAME}","expression":"last(/Linux server/system.cpu.load[percpu,avg1])>5"},{"description":"Pārāk daudz procesu uz {HOST.NAME}","expression":"avg(/Linux server/proc.num[],5m)>300"}],"id":4}'
Veiksmīgā atbilde saturēs jaunizveidoto trigeru ID:
{
"jsonrpc": "2.0",
"result": {
"triggerids": [
"17369",
"17370"
]
},
"id": 4
}
Vienuma atjaunināšana
Iespējojiet vienumu, iestatot tā statusu uz "0":
curl --request POST \
--url 'https://example.com/zabbix/api_jsonrpc.php' \
--header 'Authorization: Bearer ${AUTHORIZATION_TOKEN}' \
--header 'Content-Type: application/json-rpc' \
--data '{"jsonrpc":"2.0","method":"item.update","params":{"itemid":"10092","status":0},"id":5}'
Veiksmīgā atbildē būs atjauninātā vienuma ID:
{
"jsonrpc": "2.0",
"result": {
"itemids": [
"10092"
]
},
"id": 5
}
Metode item.update, kā arī citas atjaunināšanas metodes,
var pieņemt arī objektu masīvus un atjaunināt vairākus vienumus ar vienu API izsaukumu.
Vairāku trigeru atjaunināšana
Iespējojiet vairākus trigerus, iestatot to statusu uz "0":
curl --request POST \
--url 'https://example.com/zabbix/api_jsonrpc.php' \
--header 'Authorization: Bearer ${AUTHORIZATION_TOKEN}' \
--header 'Content-Type: application/json-rpc' \
--data '{"jsonrpc":"2.0","method":"trigger.update","params":[{"triggerid":"13938","status":0},{"triggerid":"13939","status":0}],"id":6}'
Veiksmīgā atbilde saturēs atjaunināto trigeru ID:
{
"jsonrpc": "2.0",
"result": {
"triggerids": [
"13938",
"13939"
]
},
"id": 6
}
Kļūdu apstrāde
Līdz šim brīdim viss, ko esat mēģinājis, ir darbojies labi. Bet kas notiktu, ja mēģinātu veikt nepareizu API izsaukumu? Mēģiniet
izveidot vēl vienu hostu, izsaucot
host.create, bet izlaižot
obligāto parametru groups:
curl --request POST \
--url 'https://example.com/zabbix/api_jsonrpc.php' \
--header 'Authorization: Bearer ${AUTHORIZATION_TOKEN}' \
--header 'Content-Type: application/json-rpc' \
--data '{"jsonrpc":"2.0","method":"host.create","params":{"host":"Linux server","interfaces":[{"type":1,"main":1,"useip":1,"ip":"192.168.3.1","dns":"","port":"10050"}]},"id":7}'
Tad atbildē būs ietverts kļūdas ziņojums:
{
"jsonrpc": "2.0",
"error": {
"code": -32602,
"message": "Invalid params.",
"data": "No groups for host \"Linux server\"."
},
"id": 7
}
Ja ir radusies kļūda, tad īpašības result vietā atbildes
objekts saturēs īpašību error ar šādiem datiem:
code- kļūdas kods;message- īss kļūdas kopsavilkums;data- detalizētāks kļūdas ziņojums.
Kļūdas var rasties dažādos gadījumos, piemēram, izmantojot nepareizas ievades vērtības, sesijas noildzes gadījumā vai mēģinot piekļūt neeksistējošiem objektiem. Jūsu lietojumprogrammai jāspēj korekti apstrādāt šāda veida kļūdas.
API versijas
Lai vienkāršotu API versiju pārvaldību, начиная ar Zabbix 2.0.4, API versija atbilst pašas Zabbix versijai. Varat izmantot apiinfo.version metodi, lai noskaidrotu API versiju, ar kuru strādājat. Tas var būt noderīgi, lai pielāgotu savu lietotni versijai specifisku iespēju izmantošanai.
Zabbix garantē funkcionalitātes atpakaļsaderību vienas galvenās versijas ietvaros. Veicot atpakaļnesaderīgas izmaiņas starp galvenajiem laidieniem, Zabbix parasti atstāj vecās iespējas kā novecojušas nākamajā laidienā un tās noņem tikai vēlākajā laidienā pēc tā. Reizēm Zabbix var noņemt iespējas starp galvenajiem laidieniem, nenodrošinot nekādu atpakaļsaderību. Ir svarīgi nekad nepaļauties uz novecojušām iespējām un pēc iespējas ātrāk pāriet uz jaunākām alternatīvām.
Visām API veiktajām izmaiņām varat sekot API izmaiņu žurnālā.
Papildu lasāmviela
Tagad jums ir pietiekami daudz zināšanu, lai sāktu strādāt ar Zabbix API, tomēr neapstājieties šeit. Tālākai lasīšanai ieteicams apskatīt pieejamo API sarakstu.