Zabbix monitorar APIs

Compartilhe:


Pessoal tudo bem com todos? Espero que sim.

Peço desculpas por não ter feito mais nenhum post mas final de ano a correria fica imensa como sabem, principalmente para nós que trabalhamos com TI.

 

Bem, já que tivemos esse tempo parados vamos retomar com um assunto muito legal. O monitoramento de API direto no Zabbix sem precisar usar nenhum Script para processar os dados.

 

Como todos nós sabemos, monitorar o ambiente produtivo é uma questão de sucesso; imaginem o seu usuário acessando um aplicativo qualquer e a API ao qual o mesmo se conecta está fora ou com algum problema de acesso, provavelmente o seu “cliente” não vai ficar feliz e vai te ligar bem chateado.

 

Então que tal aproveitar que a nova versão do Zabbix 4.0 tem suporte a monitores/sensores HTTP?

 

Ok, sem mais papo vamos colocar a mão na massa.

 

visão global

Este tipo de item permite a pesquisa de dados usando o protocolo HTTP / HTTPS. O trapping também é possível usando o remetente Zabbix ou o protocolo do emissor Zabbix.

A verificação do item HTTP é executada pelo servidor Zabbix. No entanto, quando os hosts são monitorados por um proxy Zabbix, as verificações de itens HTTP são executadas pelo proxy.

As verificações de item HTTP não requerem nenhum agente em execução em um host que está sendo monitorado.

O agente HTTP suporta HTTP e HTTPS. O Zabbix seguirá opcionalmente redirecionamentos (veja a opção Seguir redireciona abaixo). O número máximo de redirecionamentos é codificado para 10 (usando a opção cURL CURLOPT_MAXREDIRS).

Configuração

Para configurar um item HTTP:

  • Vá para: Configuração → Hosts

  • Clique nos itens na linha do host

  • Clique em Criar item

  • Insira os parâmetros do item no formulário

Todos os campos de entrada obrigatórios estão marcados com um asterisco vermelho.

Os campos que requerem informações específicas para itens HTTP são:

 

Tipo

Selecione o agente HTTP aqui.

Chave

Insira uma chave de item exclusiva.

URL

URL para se conectar e recuperar dados. Por exemplo:

https://www.google.com

http://www.zabbix.com/download Os

nomes de domínio podem ser especificados em caracteres Unicode. Eles são convertidos automaticamente em punycode para ASCIIao executar a etapa de cenário da web.

O botão Analisar pode ser usado para separar campos de consulta opcionais (como? Name = Admin & password = mypassword) daURL , movendo os atributos e valores para os campos Consulta para codificação automática de URL .

Limitado a 2048 caracteres.

Macros suportadas: {HOST.IP}, {HOST.CONN}, {HOST. DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, macros do usuário, macros de descoberta de baixo nível.

Isso define a opção cURL CURLOPT_URL .

Campos de consulta

Variáveis para o URL (veja acima).

Especificado como pares de atributo e valor.

Os valores são codificados por URL automaticamente. Os valores das macros são resolvidos e, em seguida, codificados por URLautomaticamente.

Macros suportadas: {HOST.IP}, {HOST.CONN}, {HOST. DNS }, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, macros do usuário, macros de descoberta de baixo nível.

Isso define a opção cURL CURLOPT_URL .

Tipo de solicitação

Selecione o tipo de método de solicitação: GET , POST , PUT ou HEAD

Tempo esgotado

O Zabbix não gastará mais do que o tempo definido no processamento do URL (o máximo é 1 minuto). Na verdade, esse parâmetro define o tempo máximo para estabelecer uma conexão com a URL e o tempo máximo para executar uma solicitação HTTP. Portanto, o Zabbix não gastará mais do que 2 x segundos de tempo limite em uma verificação.

Sufixos de tempo são suportados, por exemplo, 30s, 1m.

Macros suportadas: macros do usuário, macros de descoberta de baixo nível.

Isso define a opção cURL CURLOPT_TIMEOUT .

Solicitar tipo de corpo

Selecione o tipo de corpo da solicitação:

Dados brutos – corpo da solicitação HTTP personalizado, as macros são substituídas, mas nenhuma codificação é executada

Dados JSON – Corpo da solicitação HTTP no formato JSON. As macros podem ser usadas como string, number, true e false; As macros usadas como strings devem ser colocadas entre aspas duplas. Valores de macros são resolvidos e, em seguida, escapados automaticamente. Se “Content-Type” não for especificado nos cabeçalhos, ele será padronizado para os

dados XML “Content-Type: application / json” – corpo da solicitação HTTP no formato XML. As macros podem ser usadas como um nó de texto, atributo ou seção CDATA. Os valores das macros são resolvidos e, em seguida, escapados automaticamente em um nó e atributo de texto. Se “Content-Type” não estiver especificado nos cabeçalhos, então será padronizado como “Content-Type: application / xml”

essa seleção de dados XML requer o libxml2.

Solicitar corpo

Digite o corpo da solicitação.

Macros suportadas: {HOST.IP}, {HOST.CONN}, {HOST. DNS }, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, macros do usuário, macros de descoberta de baixo nível.

Cabeçalhos

Cabeçalhos HTTP personalizados que serão enviados ao executar uma solicitação.

Especificado como pares de atributo e valor.

Macros suportadas: {HOST.IP}, {HOST.CONN}, {HOST. DNS }, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, macros do usuário, macros de descoberta de baixo nível.

Isso define a opção cURL CURLOPT_HTTPHEADER .

Códigos de status requeridos

Lista de códigos de status HTTP esperados. Se o Zabbix obtiver um código que não esteja na lista, o item ficará sem suporte. Se vazio, nenhuma verificação é executada.

Por exemplo: 200,201,210-299

Macros suportadas na lista: macros do usuário, macros de descoberta de baixo nível.

Isso usa a opção cURL CURLINFO_RESPONSE_CODE .

Siga redirecionamentos

Marque a caixa de seleção para seguir os redirecionamentos HTTP.

Isso define a opção cURL CURLOPT_FOLLOWLOCATION .

Modo de recuperação

Selecione a parte da resposta que deve ser recuperada:

Corpo – corpo somente

Cabeçalhos – somente cabeçalhos

Corpo e cabeçalhos – corpo e cabeçalhos

Converter para JSON

Os cabeçalhos são salvos como pares de atributo e valor sob a chave “header”.

Se ‘Content-Type: application / json’ for encontrado, o corpo será salvo como um objeto, caso contrário, será armazenado como string, por exemplo:

Proxy HTTP

Você pode especificar um proxy HTTP para usar, usando o formatohttp://[username[:password]@]proxy.mycompany.com[:port].

Por padrão, a porta 1080 será usada.

Se especificado, o proxy sobrescreverá variáveis de ambiente relacionadas a proxy, como http_proxy, HTTPS_PROXY. Se não for especificado, o proxy não substituirá as variáveis de ambiente relacionadas ao proxy. O valor inserido é passado “como está”, nenhuma verificação de sanidade ocorre.

Você também pode inserir um endereço de proxy SOCKS. Se você especificar o protocolo errado, a conexão falhará e o item ficará sem suporte. Sem protocolo especificado, o proxy será tratado como um proxy HTTP.

Observe que apenas a autenticação simples é suportada com o proxy HTTP.

Macros suportadas: {HOST.IP}, {HOST.CONN}, {HOST. DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, macros do usuário, macros de descoberta de baixo nível.

Isso define a opção cURL CURLOPT_PROXY .

Autenticação HTTP

Tipo de autenticação:

Nenhum – nenhuma autenticação usada.

Autenticação básicaautenticação básica é usada.

Autenticação NTLM – é utilizada a autenticação NTLM ( Windows NT LAN Manager) .

A seleção de um método de autenticação fornecerá dois campos adicionais para inserir um nome de usuário e uma senha, nos quais macros de usuário e macros de descoberta de baixo nível são suportadas.

Isso define a opção cURL CURLOPT_HTTPAUTH .

SSL verificar peer

Marque a caixa de seleção para verificar o certificado SSL do servidor da web. O certificado do servidor será obtido automaticamente da localização da autoridade de certificação (CA) do sistema. Você pode substituir a localização dos arquivos de autoridade de certificação usando o servidor Zabbix ou o parâmetro de configuração de proxy SSLCALocation.

Isso define a opção cURL CURLOPT_SSL_VERIFYPEER .

Host de verificação de SSL

Marque a caixa de seleção para verificar se o campo Nome Comum ou o campo Nome Alternativo de Assunto do certificado do servidor da Web corresponde.

Isso define a opção cURL CURLOPT_SSL_VERIFYHOST .

Arquivo de certificado SSL

Nome do arquivo de certificado SSL usado para autenticação do cliente. O arquivo de certificado deve estar no formato PEM 1 . Se o arquivo de certificado também contiver a chave privada, deixe o campo do arquivo de chave SSL vazio. Se a chave estiver criptografada, especifique a senha no campo Senha da chave SSL. O diretório que contém esse arquivo é especificado pelo servidor Zabbix ou pelo parâmetro de configuração de proxy SSLCertLocation.

Macros suportadas: {HOST.IP}, {HOST.CONN}, {HOST. DNS }, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, macros do usuário, macros de descoberta de baixo nível.

Isso define a opção cURL CURLOPT_SSLCERT .

Arquivo chave SSL

Nome do arquivo de chave privada SSL usado para autenticação do cliente. O arquivo de chave privada deve estar no formato PEM 1. O diretório que contém esse arquivo é especificado pelo servidor Zabbix ou pelo parâmetro de configuração de proxy SSLKeyLocation.

Macros suportadas: {HOST.IP}, {HOST.CONN}, {HOST. DNS }, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, macros do usuário, macros de descoberta de baixo nível.

Isso define a opção cURL CURLOPT_SSLKEY .

Senha da chave SSL

Senha do arquivo de chave privada SSL.

Macros suportadas: macros do usuário, macros de descoberta de baixo nível.

Isso define a opção cURL CURLOPT_KEYPASSWD .

Ativar trapping

Com esta caixa de seleção marcada, o item também funcionará como um item de captura e aceitará os dados enviados para este item pelo remetente do Zabbix ou usando o protocolo de envio do Zabbix.

Hosts permitidos

Visível apenas se a caixa de seleção Ativar trapping estiver marcada.

Lista de endereços IP delimitados por vírgula, opcionalmente em notação CIDR ou nomes de host.

Se especificado, as conexões de entrada serão aceitas somente dos hosts listados aqui.

Se o suporte a IPv6 estiver habilitado, ‘127.0.0.1’, ‘:: 127.0.0.1’, ‘:: ffff: 127.0.0.1’ serão tratados igualmente e ‘:: / 0’ permitirá qualquer endereço IPv4 ou IPv6.

‘0.0.0.0/0’ pode ser usado para permitir qualquer endereço IPv4.

Observe que “endereços IPv6 compatíveis com IPv4” (prefixo 0000 :: / 96) são suportados, mas são reprovados pelo RFC4291 .

Exemplo: Servidor = 127.0.0.1, 192.168.1.0/24, 192.168.3.1-255, 192.168.1-10.1-255, :: 1,2001: db8 :: / 32, zabbix.domain

Espaços e macros do usuário são permitidos neste campo.

Macros de host: {HOST.HOST}, {HOST.NAME}, {HOST.IP}, {HOST. DNS }, {HOST.CONN} são permitidos neste campo desde o Zabbix 4.0.2.

 

Exemplos

Exemplo 1

Envie solicitações GET simples para recuperar dados do Prometheus.

Aqui temos um exemplo da chamada que será usada (alguns dados serão ocultos pois trata de um serviço em produção).

Para configurar devemos preencher os seguintes campos:

Name (Nome para o sensor)

Type (definir como HTTP agent)

Key (coloque um nome de chave, recomendo usar o nome do sensor + alguma referência para o mesmo)

URL (endereço que vai ser chamado API)

Request type (defina conforme necessidade da API)

Timeout (recomendo avaliar o tempo que é necessário para carregar os dados)

Headers (se necessário defina conforme especificação da API usada)

Type of information (Preencha com o tipo de retorno – texto ou número)

Update interval (Intervalo entre coletas)

Editando o Preprocessing

Aqui eu tenho o seguinte retorno a partir da API:

Sendo assim vou pegar o nó que identifica o status de sucesso da minha aplicação.

No Zabbix:

Acesse a opção (Guia) Preprocessing.

Preencha os steps

Name -> JSON Path

Parameters -> $.status

Em parameters é que está a solução desse sensor, para cada nível abaixo devemos colocar da seguinte forma.

Exemplo:

$.body.exemplo.exemplo1 (aqui faremos a leitura do valor em exemplo1)

Após colocar as informações necessárias clique em ADD.

Alguns minutos depois já pode conferir o resultado em “Latest Data”

Acima coloquei um exemplo real de uso (meu caso), mas como também quero que todos aprendam aqui vai um exemplo usando a API do https://openweathermap.org

Vamos lá.

Primeiro vamos configurar os campos:

Devemos colocar o Name, Key, URL e aqui vamos definir o Query fields.

Em URL coloque: https://samples.openweathermap.org/data/2.5/weather?

Em Query fields: lat = 35

  lon = 139

  appid = b6907d289e10d714a6e88b30761fae22

Request type: GET

Type of information: Numeric (float)

Agora Ajustando o Preprocessing

O mapeamento deve ficar dessa forma: $.main.temp

A informação capturada será:

Após finalizado clique em Add.

Alguns minutos após pode conferir em “Latest Data” e você terá todos os dados, como estamos pegando um valor numérico o gráfico já ficará configurado conforme imagem abaixo.

 

Bem pessoal, espero que estas informações sejam úteis e possam ajudar a todos.

E como sempre qualquer dúvida fico a disposição.

 

Abraço a todos.

Compartilhe:


Leave a Reply

Your email address will not be published. Required fields are marked *