Não é um manual, nem um HOWTO é simples "rascunho" de como usar a API do
Zabbix com o
curl do
Linux.
Objetivo deste documento é demostrar:
- Se conectar ao Zabbix via API e receber um tokenID do login.
- Solicitar uma lista de hosts, e escolher 1 host
- Configurar e adicionar um host à uma janela de manutenção.
Lembrando tudo via API utilizando cURL.
"Bora" para a brincadeira! :D
Para iniciar eu vou iniciar algumas variáveis de ambiente.
Endereço do Zabbix Server:
export $HOST=<URLZABBIX>/api_jsonrpc.php
Usuário com permissão para utilizar API:
export $USER=zbx_api
Senha do usuário com permissão:
export $PASS=SDEDFRF
Login no Zabbix e receber o tokenID da conexão:
curl --insecure -i -X POST -H 'Content-type:application/json' -d '{"jsonrpc":"2.0","method":"user.login","params":{ "user":"$USER ,"password":"$PASS" },"auth":null,"id":0}' https://$HOST
Retorno do JSON:
HTTP/1.1 200 OK
Date: Thu, 23 Jul 2020 13:00:29 GMT
Server: Apache/2.4.29
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Methods: POST
Access-Control-Max-Age: 1000
Content-Length: 68
Content-Type: application/json
{"jsonrpc":"2.0","result":"05d129888aff2d54563772d32c6b8e04","id":0}
Repare que "05d129888aff2d54563772d32c6b8e04" é o nosso token e ele deverá ser utilizado nos próximos comandos.
Retorna todos os hosts configurados no servidor Zabbix (lembrando de utilizar o token anterior...):
curl --insecure -i -X POST -H 'Content-type:application/json' -d '{"jsonrpc":"2.0","method":"host.get","params":{"output": ["hostid", "name"]},"auth":"05d129888aff2d54563772d32c6b8e04","id":0}' https://$HOST
HTTP/1.1 200 OK
Date: Thu, 23 Jul 2020 13:02:28 GMT
Server: Apache/2.4.29
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Methods: POST
Access-Control-Max-Age: 1000
Transfer-Encoding: chunked
Content-Type: application/json
{"jsonrpc":"2.0","result":[{"hostid":"10084","name":"Zabbix server"}, ??..
Retorna somente 1 máquina, dentro da API eu realizo uma pesquisa com o host identificado como teste. E assim recupero o hostid do host; que será utilizado para adicionar este host na nossa janela de manutenção:
curl --insecure -i -X POST -H 'Content-type:application/json' -d '{"jsonrpc":"2.0","method":"host.get","params":{"filter": ["host", "teste"]},"auth":"05d129888aff2d54563772d32c6b8e04","id":0}' https://$HOST
HTTP/1.1 200 OK
Date: Thu, 23 Jul 2020 13:11:36
GMT Server: Apache/2.4.29
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Methods: POST
Access-Control-Max-Age: 1000
Transfer-Encoding: chunked
Content-Type: application/json
{"jsonrpc":"2.0","result":[{"hostid":"10425","proxy_hostid":"0","host":"Zabbix server","status":"0","disable_unti
hostid recuperado, 10425 :D
Criar janela de manutenção, e ativar manutenção no host. Para data de início, é em segundo... então `date %s`:
curl --insecure -i -X POST -H 'Content-type:application/json' -d ' {"jsonrpc":"2.0", "method":"maintenance.create", "params":[{ "groupids":[], "hostids":["10425"], "name":"MANUTENCAO PROGRAMADA", "maintenance_type":"0", "description":"MANUTENCAO HOSTS XXXX", "active_since":"1595513595", "active_till":"1595517195", "timeperiods": [ { "timeperiod_type": 0, "start_date": "1595513995", "period": 600 } ] }], "auth":"05d129888aff2d54563772d32c6b8e04","id":3}' https://$HOST
HTTP/1.1 200 OK
Date: Thu, 23 Jul 2020 14:15:15 GMT
Server: Apache/2.4.29
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Methods: POST
Access-Control-Max-Age: 1000
Content-Length: 58 Content-Type: application/json
{"jsonrpc":"2.0","result":{"maintenanceids":["1"]},"id":3}
Perfeito, agora só conferir na interface web a janela de manutenção criada e o host já incluso na mesma.
Espero ter auxiliado alguém com essa dica! A API do Zabbix é extremamente incrível.
No exemplo acima, foi utilizado para adicionar os hosts em janelas de manutenção automaticamente utilizando uma esteira de CI/CD.
Obrigado a todos, até mais.