<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Peterson Basso]]></title><description><![CDATA[Peterson Basso]]></description><link>https://peterson-basso.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Mon, 31 Aug 2026 17:33:54 GMT</lastBuildDate><atom:link href="https://peterson-basso.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Consumindo a API do Zabbix com Node-RED]]></title><description><![CDATA[Esse é um artigo para iniciantes e não cobrirá aspectos avançados da API do Zabbix, o intuito é ser uma porta de entrada para aqueles que não possuem familiaridade com alguma linguagem de programação, demonstrando que com conhecimentos básicos de lóg...]]></description><link>https://peterson-basso.hashnode.dev/consumindo-a-api-do-zabbix-com-node-red-1f03579ba488</link><guid isPermaLink="true">https://peterson-basso.hashnode.dev/consumindo-a-api-do-zabbix-com-node-red-1f03579ba488</guid><category><![CDATA[monitoring]]></category><dc:creator><![CDATA[Peterson Basso]]></dc:creator><pubDate>Fri, 02 Oct 2020 17:35:18 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1638810613238/bRm7tuDi8.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote>
<p>Esse é um artigo para iniciantes e não cobrirá aspectos avançados da API do Zabbix, o intuito é ser uma porta de entrada para aqueles que não possuem familiaridade com alguma linguagem de programação, demonstrando que com conhecimentos básicos de lógica e utilizando o Node-RED, é possível fazer algumas coisas interessantes.</p>
</blockquote>
<h3 id="heading-introducao">Introdução</h3>
<p>O Zabbix possui uma <a target="_blank" href="https://www.zabbix.com/documentation/current/pt/manual/api">API</a> extremamente rica que permite estender suas funcionalidades através de ferramentas externas, existem diversos cenários onde o uso da API é necessário, seja para desenvolver funcionalidades externas ainda não existentes na ferramenta, integrar com alguma outra ferramenta utilizada pelo time ou para gerações de relatórios, essa última parte o Zabbix é bem pobre 😔.</p>
<p>Nesse artigo vou demonstrar o consumo da API do Zabbix utilizando a ferramenta <a target="_blank" href="https://nodered.org/">Node-RED</a>, essa ferramenta foi inicialmente desenvolvida pela IBM, atualmente faz parte da <a target="_blank" href="https://js.foundation/">JS Foundation</a>, é uma ferramenta considerada low code baseada em fluxos, onde você desenvolve toda a lógica da sua aplicação através de caixinhas que se comunicam umas com as outras, cada caixinha possui uma entrada e uma ou mais saídas, abstraindo o conceito de uma função de uma linguagem de programação.</p>
<h3 id="heading-o-que-e-node-red">O que é Node-RED?</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1638810593245/ltpA7ghjb.jpeg" alt /></p>
<p>O Node-RED foi originalmente desenvolvido para trabalhar com IoT, sendo muito leve e rodando sobre <a target="_blank" href="https://nodejs.org/">NodeJS</a>, podendo ser embarcado em hardwares como Raspberry PI, permitindo fazer a integração do hardware (GPIO) a diversos serviços, como um broker MQTT ou APIs externas.</p>
<p>Atualmente ele tem sido utilizado para uma gama muito maior de aplicações, como integração entre sistemas, ETLs simplificados, construção de APIs, desenvolvimento de ChatBots e o que mais a sua imaginação permitir. Por ser baseado em javascript conta com o maior acervo de bibliotecas existentes atualmente, o ecossistema javascript e uma comunidade bem ativa que mantém uma série de nós externos para realizar as mais diversas atividades utilizando a ferramenta.</p>
<iframe src="https://www.youtube.com/embed/videoseries?list=PLyNBB9VCLmo1hyO-4fIZ08gqFcXBkHy-6" width="700" height="393"></iframe>

<p>Vídeo de introdução ao Node-RED</p>
<h4 id="heading-instalando-o-node-red">Instalando o Node-RED</h4>
<p>A instalação do Node-RED é extremamente simples, podendo ser realizada através do gerenciador de pacotes npm ou utilizada através de docker. Não vou entrar em maiores detalhes sobre o processo de instalação, pois a <a target="_blank" href="https://nodered.org/docs/getting-started/local">documentação oficial</a> explica muito bem essa parte.</p>
<p>Após a devida instalação e inicialização da ferramenta, seja através de docker ou npm, sua interface web poderá ser acessada através do endereço <a target="_blank" href="http://localhost:1880/">http://localhost:1880</a>, ou se estiver rodando ela em algum server, substitua pelo endereço IP adequado e garanta que possui as devidas liberações de firewall para acesso a porta 1880.</p>
<p><a target="_blank" href="https://nodered.org/"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1638810594897/kiinvhdg3.png" alt /></a></p>
<p>Tela inicial Node-RED</p>
<h3 id="heading-consumindo-a-api-do-zabbix">Consumindo a API do Zabbix</h3>
<p>A comunicação com a API do Zabbix ocorre através do protocolo http/https utilizando um único endpoint <strong>api_jsonrpc.php</strong>, onde o método de consulta e demais parâmetros são passados via payload utilizando o verbo POST.</p>
<p>O primeiro passo para qualquer iteração com a API do Zabbix é autenticação, esse procedimento é necessário para obter o token que será utilizado nas próximas consultas, para isso utilizamos o método <a target="_blank" href="https://www.zabbix.com/documentation/current/manual/api/reference/user/login">user.login</a>, observar que a própria documentação recomenda realizar o user.logout após realizar todas as consultas necessárias.</p>
<blockquote>
<p><strong>Warning:</strong> When using this method, you also need to do <a target="_blank" href="https://www.zabbix.com/documentation/current/manual/api/reference/user/logout">user.logout</a> to prevent the generation of a large number of open session records.</p>
</blockquote>
<h4 id="heading-autenticando-na-api">Autenticando na API</h4>
<p>Vamos iniciar fazendo a autenticação na API do Zabbix, para isso vamos utilizar 2 nós do Node-RED, um <strong>change</strong> e um <strong>http request,</strong> vamos inserir outros 2 nós <strong>injection</strong> e <strong>debug</strong> apenas para podermos testar a configuração, o nó injection servirá como gatilho para iniciar a consulta e o debug exibe em um painel lateral as informações retornadas.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1638810596573/wca2p9fDF.png" alt /></p>
<p>Processo de autenticação na API do Zabbix</p>
<p>Para o processo de autenticação utilizados o nó <strong>change</strong> para montarmos o payload e o nó http request para executar a requisição POST na API do Zabbix, o resultado como na imagem acima, é um token de autenticação que poderá ser utilizado para as próximas consultas, esse token tem a duração default de 15m.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1638810598177/tiO-J3lA7.png" alt /></p>
<p>Configuração do nó change</p>
<p>Como na imagem acima, estamos configurando o payload a ser enviado com o conteúdo JSON abaixo, esse é o payload necessário para realizar a autenticação na API, conforme a <a target="_blank" href="https://www.zabbix.com/documentation/current/manual/api/reference/user/login">documentação</a>.</p>
<pre><code>{  
    <span class="hljs-attr">"jsonrpc"</span>: <span class="hljs-string">"2.0"</span>,  
    <span class="hljs-attr">"method"</span>: <span class="hljs-string">"user.login"</span>,  
    <span class="hljs-attr">"params"</span>: {  
        <span class="hljs-attr">"user"</span>: <span class="hljs-string">"Admin"</span>,  
        <span class="hljs-attr">"password"</span>: <span class="hljs-string">"zabbix"</span>  
    },  
    <span class="hljs-attr">"id"</span>: <span class="hljs-number">1</span>,  
    <span class="hljs-attr">"auth"</span>: <span class="hljs-literal">null</span>  
}
</code></pre><p>Esse payload será passado para o nó <strong>http request</strong> que efetivamente irá realizar a requisição a API, na imagem abaixo é possível ver a configuração desse nó.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1638810599804/NJuC2s8LU.png" alt /></p>
<p>Configuração do nó http request</p>
<blockquote>
<p>Como a API do Zabbix é composta por um único endpoint, poderemos utilizar esse mesmo nó para as demais requisições, alterando apenas o payload a ser enviado com o nó change.</p>
</blockquote>
<h4 id="heading-consumindo-informacoes-de-um-host-com-hostget">Consumindo informações de um host com host.get</h4>
<p>Como o objetivo é apenas demonstrar a possibilidade, vamos utilizar um método bem simples e amplamente utilizado, utilizaremos o método host.get para recuperar os atributos de um determinado host.</p>
<p>Utilizaremos o payload abaixo, para obter os atributos do host com nome Zabbix server.</p>
<pre><code>{  
    <span class="hljs-attr">"jsonrpc"</span>: <span class="hljs-string">"2.0"</span>,  
    <span class="hljs-attr">"method"</span>: <span class="hljs-string">"host.get"</span>,  
    <span class="hljs-attr">"params"</span>: {  
        <span class="hljs-attr">"filter"</span>: {  
            <span class="hljs-attr">"host"</span>: \[  
                <span class="hljs-string">"Zabbix server"</span>  
            \]  
        }  
    },  
    <span class="hljs-attr">"auth"</span>: <span class="hljs-string">""</span>,  
    <span class="hljs-attr">"id"</span>: <span class="hljs-number">1</span>  
}
</code></pre><p>Vamos adicionar mais um nó do tipo change, onde vamos pegar o token retornado pelo nó anterior e construir nosso payload como na imagem acima. Na sequência de imagens abaixo, podemos ver essa ligação entre os nós e as configurações realizadas nesse nó change.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1638810601416/FStqZjgX62.png" alt /></p>
<p>Consumindo API com host.get</p>
<p>Abaixo como ficou a configuração do nó change incluído, foi adicionado mais um nó http request que é uma copia exata do nó configurado anteriormente. Na imagem bem a direita é possível verificar a resposta da API com todos os atributos do host consultado.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1638810603058/wYGl_jEss.png" alt /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1638810604646/DGFE8BBF7.png" alt /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1638810606226/sBtjklnRP.png" alt /></p>
<p>Configuração para o método host.get</p>
<p>Existem diversas configurações desse payload de consulta que podem ser realizadas, permitindo filtrar os atributos retornados ou mesmo incluir interfaces e outras configurações do host, a documentação do Zabbix é bem completa e deve ser consultada sempre que necessário. Não é objetivo aqui, cobrir todas essas opções.</p>
<h4 id="heading-fazendo-logout-na-api">Fazendo logout na API</h4>
<p>Vamos adicionar mais 2 nós agora que serão responsáveis por fazer o logout na API do Zabbix, conforme recomendado pela documentação. Será utilizado o payload abaixo em um nó change e no mesmo nó a chave <code>auth</code> será substituída com o token obtido no nó de autenticação, essa informação esta armazenada no na key <code>msg.token</code> que se mantém preservada entre a passagem pelos nós.</p>
<pre><code>{  
    <span class="hljs-attr">"jsonrpc"</span>: <span class="hljs-string">"2.0"</span>,  
    <span class="hljs-attr">"method"</span>: <span class="hljs-string">"user.logout"</span>,  
    <span class="hljs-attr">"params"</span>: \[\],  
    <span class="hljs-attr">"id"</span>: <span class="hljs-number">1</span>,  
    <span class="hljs-attr">"auth"</span>: <span class="hljs-string">""</span>  
}
</code></pre><p>Usaremos o nó change com esse payload e modificaremos a key auth, como abaixo.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1638810608249/CIK5kQVAG.png" alt /></p>
<p>Configuração para logout</p>
<p>E posteriormente ligamos ao nó de http request para efetivamente efetuar o logout na API.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1638810609856/NMaJb8I5k.png" alt /></p>
<h4 id="heading-juntando-todas-as-partes">Juntando todas as partes</h4>
<p>Após juntarmos todas as partes, obtemos um exemplo completo de consumo da API do Zabbix, cobrindo as 3 principais etapas:</p>
<ol>
<li>User login</li>
<li>Consumo de métodos, nesse exemplo (host.get)</li>
<li>User logout</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1638810611460/BhTSodrDAe.gif" alt /></p>
<h3 id="heading-conclusao">Conclusão</h3>
<p>A proposta era demonstrar uma forma diferente de consumir a API do Zabbix, usando uma ferramenta mais amigável para o usuário que não se sente confortável em utilizar uma linguagem de programação tradicional, o Node-RED possui diversos pacotes de nós desenvolvidos pela comunidade para se conectar aos mais diversos serviços, é uma ferramenta madura suficiente para manter um ambiente em produção.</p>
<p>O que foi demonstrado aqui é uma abordagem simplificada para iniciação na ferramenta, existem diversas formas diferentes de obter o mesmo resultado, cada cenário deve ser pensado individualmente, não possui um uso prático, apenas didático.</p>
<p>O JSON para ser importado diretamente na ferramenta e realizar as alterações necessárias pode ser obtido abaixo, sendo necessário parametrizar os nós conforme o ambiente e necessidade.</p>
<h3 id="heading-referencias">Referências</h3>
<p><a target="_blank" href="https://www.zabbix.com/documentation/current/manual/api"><strong>Zabbix Documentation 5.0</strong><br /><em>Zabbix API allows you to programmatically retrieve and modify the configuration of Zabbix and provides access to…</em>www.zabbix.com</a><a target="_blank" href="https://www.zabbix.com/documentation/current/manual/api"></a></p>
<p><a target="_blank" href="https://nodered.org/"><strong>Node-RED</strong><br /><em>Node-RED provides a browser-based flow editor that makes it easy to wire together flows using the wide range of nodes…</em>nodered.org</a><a target="_blank" href="https://nodered.org/"></a></p>
]]></content:encoded></item></channel></rss>