CIRCUITO
CARIOCA TI · DOCUMENTAÇÃO
♙
Zabbix · Automação

API e automação

Use JSON-RPC, API tokens, RBAC, import/export e automação idempotente para integrar o Zabbix com inventário e operação.

zabbix://api-automacao
$ branch: 7.4
$ topic: API e automação
$ mode: production
$ method: evidence-first_
01 · ARQUITETURA

API é parte do frontend do Zabbix

O Zabbix 7.4 expõe uma API HTTP baseada em JSON-RPC 2.0. As chamadas são enviadas por HTTP POST ao arquivo api_jsonrpc.php do frontend.

AutomaçãoHTTPSapi_jsonrpc.phpZabbix APIDB / objetos
Consequência: não automatize alterações escrevendo diretamente no banco do Zabbix. Para configuração suportada, prefira API/importação e mantenha o banco como implementação interna.
02 · JSON-RPC 2.0

Entenda o envelope antes dos métodos

{
  "jsonrpc": "2.0",
  "method": "host.get",
  "params": {
    "output": ["hostid", "host", "name"]
  },
  "id": 1
}
CampoFunção
jsonrpcversão do protocolo; use 2.0
methodoperação da API, como host.get
paramsfiltros ou propriedades da operação
idcorrelaciona requisição e resposta
03 · AUTENTICAÇÃO

API token ou token obtido por user.login

No Zabbix 7.4, você pode usar um API token existente ou autenticar com user.login. Para chamadas autorizadas, o token pode ser enviado no cabeçalho HTTP Authorization: Bearer ....

curl --request POST \
  --url 'https://zabbix.exemplo/zabbix/api_jsonrpc.php' \
  --header 'Authorization: Bearer SEU_TOKEN' \
  --header 'Content-Type: application/json-rpc' \
  --data '{
    "jsonrpc":"2.0",
    "method":"host.get",
    "params":{"output":["hostid","host"]},
    "id":1
  }'
Nunca coloque token real em documentação, Git, código frontend, screenshots ou comandos compartilhados. Exemplos desta página usam valores fictícios.
04 · RBAC

Token não concede mais privilégio que a identidade associada

O acesso depende do tipo de usuário, role e grupos/permissões. Métodos também podem ser bloqueados pela role. Algumas operações exigem nível administrativo; por exemplo, host.create é destinado a Admin/Super admin, sujeito às permissões da role.

Leituraconta dedicada com acesso somente ao necessário.
Provisionamentorole específica para objetos que a automação administra.
Administraçãoevite Super admin como padrão de integração.
05 · PRIMEIRA CHAMADA

Teste conectividade antes da automação

curl --request POST \
  --url 'https://zabbix.exemplo/zabbix/api_jsonrpc.php' \
  --header 'Content-Type: application/json-rpc' \
  --data '{
    "jsonrpc":"2.0",
    "method":"apiinfo.version",
    "params":{},
    "id":1
  }'

Esse teste separa problemas de URL/TLS/proxy reverso de problemas de autorização e lógica do script.

06 · CONSULTAS

Peça somente os campos necessários

Métodos *.get possuem filtros e opções de seleção. Em ambientes grandes, retornar objetos completos sem necessidade aumenta payload, memória e tempo.

{
  "jsonrpc":"2.0",
  "method":"host.get",
  "params":{
    "output":["hostid","host","name"],
    "selectInterfaces":["interfaceid","ip","dns","port"],
    "filter":{"status":0}
  },
  "id":2
}
Em produção, trate output, filtros e select* como parte do desenho de performance da integração.
07 · HOSTS

Consultar antes de criar

host.get recupera hosts e suporta filtros por grupos, IDs, interfaces, templates, tags e outros critérios. host.create cria hosts e exige associação a grupo; também pode receber interfaces, tags, templates, macros e inventário.

{
  "jsonrpc":"2.0",
  "method":"host.create",
  "params":{
    "host":"RTR-POP-01",
    "name":"Router POP 01",
    "groups":[{"groupid":"12"}],
    "interfaces":[{
      "type":2,
      "main":1,
      "useip":1,
      "ip":"192.0.2.10",
      "dns":"",
      "port":"161",
      "details":{"version":2,"community":"{$SNMP_COMMUNITY}","bulk":1}
    }],
    "tags":[
      {"tag":"site","value":"pop-01"},
      {"tag":"role","value":"router"}
    ]
  },
  "id":10
}
IDs de grupo/template do exemplo são ilustrativos. Descubra IDs no ambiente; não hardcode IDs copiados de outro Zabbix.
08 · INTERFACES

Interface é objeto de configuração, não só IP

Agent, SNMP, JMX e IPMI possuem tipos e propriedades distintas. Uma automação de rede deve validar endereço, porta, método de conexão e, no SNMP, versão e credenciais/macros antes de criar o host.

TipoUsoValidação
Agentservidores/hostsDNS/IP, porta, TLS
SNMPswitch/router/OLT/UPSversão, credencial, reachability
JMXJavaendpoint e autenticação
IPMIhardwarecredencial e privilégio
09 · TEMPLATES

Automação deve vincular intenção, não coleções aleatórias

Descubra templates por nome/ID, valide compatibilidade e mantenha uma matriz vendor/model/role → template. Evite vincular template apenas porque o nome “parece certo”.

vendor=datacom
model=dm4610
role=access-switch
monitoring_profile=snmp-access-v1

Essa camada de mapeamento pode viver no seu inventário/CMDB ou em arquivo versionado.

10 · TAGS E MACROS

Contexto deve nascer junto com o host

site=centro
region=rj
carrier=operadora-a
role=uplink
service=internet
environment=production

Macros permitem parametrizar templates sem clonagem. Segredos devem ser tratados como segredo e não como texto comum em repositório de código.

11 · INVENTÁRIO / CMDB

Defina a fonte de verdade

Se NetBox, GLPI, ERP, planilha controlada ou sistema interno é a fonte de verdade, o Zabbix deve receber o estado desejado. Não deixe operadores corrigirem manualmente a mesma informação em três sistemas sem reconciliação.

CMDBNormalizaçãoValidaçãoZabbix APIAuditoria
12 · ONBOARDING

Pipeline recomendado para cadastrar equipamentos

  1. Receber ativo da fonte de verdade.
  2. Validar campos obrigatórios e endereço.
  3. Normalizar vendor, modelo, site e função.
  4. Consultar se o host já existe.
  5. Resolver IDs de grupo, template e proxy.
  6. Criar ou atualizar somente diferenças.
  7. Aplicar tags/macros/inventário.
  8. Validar que itens começaram a receber dados.
  9. Registrar resultado e correlation ID.
13 · IDEMPOTÊNCIA

Executar duas vezes deve produzir o mesmo estado

O padrão seguro é GET → comparar → CREATE/UPDATE se necessário → validar. Um script que sempre executa host.create não é um reconciliador.

desired = origem()
current = zabbix.host_get(desired.host)

if current is None:
    create(desired)
elif diff(current, desired):
    update(current.id, desired)
else:
    no_change()
Para operações destrutivas, não use “delete missing” como reflexo automático. Exija política explícita, dry-run, evidência e escopo.
14 · PYTHON

Cliente mínimo com requests

import os
import requests

URL = "https://zabbix.exemplo/zabbix/api_jsonrpc.php"
TOKEN = os.environ["ZABBIX_TOKEN"]

def call(method, params):
    payload = {
        "jsonrpc": "2.0",
        "method": method,
        "params": params,
        "id": 1,
    }

    response = requests.post(
        URL,
        json=payload,
        headers={"Authorization": f"Bearer {TOKEN}"},
        timeout=15,
    )
    response.raise_for_status()
    body = response.json()

    if "error" in body:
        raise RuntimeError(body["error"])

    return body["result"]

hosts = call("host.get", {
    "output": ["hostid", "host", "name"]
})

for host in hosts:
    print(host)

Em produção, acrescente logging estruturado, retry seletivo, timeout, validação de schema, métricas e tratamento de segredo.

15 · IMPORT / EXPORT

Configuração versionável e importação controlada

configuration.import aceita configuração serializada em YAML, XML ou JSON e regras para criação/atualização/remoção conforme o tipo de objeto.

Atenção a deleteMissing: em pipelines automatizados, remoção pode ter impacto amplo. Compare antes, limite o escopo e mantenha rollback/export anterior.
16 · DADOS DE MONITORAMENTO

A API não serve apenas para configuração

A referência 7.4 inclui APIs para history, trends, events, problems, SLA, services, audit log e outros objetos. Isso permite relatórios, integração com portais e enriquecimento operacional.

APIUso
problem.getproblemas atuais/históricos conforme filtros
event.geteventos e correlação temporal
history.getvalores históricos
trend.getagregações de longo prazo
service.get / sla.getvisão de serviço/SLA
auditlog.getrastreabilidade administrativa
17 · ERROS

HTTP 200 não significa que a operação deu certo

Em JSON-RPC, erros da API aparecem no objeto error, normalmente com code, message e data. O cliente deve validar tanto HTTP quanto o corpo JSON.

{
  "jsonrpc":"2.0",
  "error":{
    "code":-32602,
    "message":"Invalid params.",
    "data":"..."
  },
  "id":7
}

Classifique erros em autenticação/autorização, validação, objeto inexistente, conflito de estado e falha transitória. Não faça retry cego de erro de parâmetro.

18 · SEGURANÇA

Automação amplia o blast radius

  • HTTPS obrigatório em produção;
  • token em secret manager/variável protegida;
  • conta dedicada por integração;
  • menor privilégio;
  • expiração/rotação de tokens;
  • restrição de origem por firewall/reverse proxy quando aplicável;
  • nunca logar Authorization header;
  • separar credenciais de leitura e escrita;
  • dry-run para mudanças amplas.
19 · AUDITORIA

Você precisa responder quem, quando, o quê e por quê

{
  "timestamp":"2026-08-26T14:00:00-03:00",
  "job":"zabbix-reconcile",
  "object":"RTR-POP-01",
  "operation":"host.update",
  "changed":["tags","templates"],
  "ticket":"CHG-1234",
  "result":"success"
}

Não dependa somente do log local do script. Combine logs da automação, Audit log do Zabbix e, quando existir, ticket/change.

20 · CI/CD

Templates e políticas podem seguir pipeline

GitLintLabCompareApprovalImport

Um pipeline maduro não publica diretamente em produção após qualquer commit. Separe desenvolvimento, validação e promoção.

21 · ESCALA

Automatizar 10 hosts e 10.000 hosts são problemas diferentes

  • reduza payload com output seletivo;
  • evite chamadas N+1 quando uma consulta agregada resolve;
  • cacheie IDs estáveis durante a execução;
  • processe em lotes controlados;
  • meça latência e taxa de erros;
  • defina timeout e retry com backoff para falhas transitórias;
  • não paralelize escrita sem conhecer dependências e capacidade.
22 · TROUBLESHOOTING

Diagnostique por camada

  1. Teste DNS e HTTPS do frontend.
  2. Teste apiinfo.version.
  3. Valide URL exata de api_jsonrpc.php.
  4. Valide Content-Type e JSON.
  5. Valide token e expiração.
  6. Valide role e permissões do objeto.
  7. Leia error.code, message e data.
  8. Reduza a chamada ao menor payload reproduzível.
  9. Compare a operação com a referência 7.4 do método.
  10. Verifique logs de frontend/web server e Audit log quando necessário.
SintomaSuspeitaPrimeira verificação
401/403proxy/auth/roleAuthorization e permissões
Invalid paramsschema/campo obrigatórioreferência do método
objeto não aparecepermissão/filtrorole, grupo e parâmetros
timeoutpayload/rede/backendreduzir consulta e medir endpoint
duplicaçãofalta de idempotênciaGET antes de CREATE
23 · LABORATÓRIOS

Do GET seguro ao reconciliador

Lab 1apiinfo.version + host.get com cURL.
Lab 2listar hosts por tag/site e interfaces.
Lab 3criar host de laboratório e validar retorno.
Lab 4Python com token em variável de ambiente.
Lab 5GET → diff → UPDATE idempotente.
Lab 6CMDB fictícia → onboarding de 20 ativos.
Critério: cada laboratório deve registrar request sanitizado, resposta, alteração esperada, alteração observada e rollback.
24 · CHECKLIST DE PRODUÇÃO

Antes de liberar uma automação

  • versão alvo do Zabbix está declarada?
  • métodos foram conferidos na referência 7.4?
  • token possui menor privilégio?
  • segredo está fora do código?
  • HTTPS está validado?
  • há timeout e tratamento de erro JSON-RPC?
  • processo é idempotente?
  • há dry-run para mudança em massa?
  • há logs e correlation ID?
  • há limite de escopo?
  • há rollback?
  • foi testado em laboratório?
REFERÊNCIA TÉCNICA

Escopo factual

Os exemplos foram estruturados para Zabbix 7.4. A API oficial é HTTP/JSON-RPC 2.0; o endpoint é api_jsonrpc.php; a autenticação pode usar API token ou token de sessão obtido por user.login; permissões dependem de usuário, role e grupos. A referência oficial contém APIs para configuração, monitoramento, services/SLA, usuários, tokens, proxies, audit log e outras famílias.

Atualização editorial 2026

Linha Zabbix 7.4

A API permanece baseada em JSON-RPC e suporta API tokens e controle por roles. Automatizações devem ser idempotentes, auditáveis e usar privilégio mínimo.

Recursos e limites sensíveis à versão devem ser confirmados contra o patch exato instalado antes de mudanças em produção.