Esta é uma tradução da página de documentação original em inglês. Ajude-nos a torná-la melhor.

16 Agente HTTP

Visão geral

Este tipo de item permite sondagem de dados usando o protocolo HTTP/HTTPS. Retenção (trapping) também é possível usando o Zabbix Sender ou o protocolo Zabbix Sender.

Uma verificação de item HTTP é executada pelo Zabbix Server. No entanto, quando os host são monitorados por um Zabbix Proxy, as verificações de item HTTP são executadas pelo Proxy.

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

O agente HTTP suporta ambos HTTP e HTTPS. O Zabbix seguirá redirecionamentos opcionalmente (veja a opção Seguir redirecionamento abaixo). O número máximo de redirecionamentos é fixo no código em 10 (usando a opção cURL CURLOPT_MAXREDIRS).

Veja também problemas conhecidos na utilização do protocolo HTTPS.

O Zabbix Server/Proxy deve ser inicialmente configurado com suporte a cURL (libcurl).

Configuração

Para configurar um item HTTP:

  • Vá até: ConfiguraçãoHosts
  • Clique em Itens na linha do host
  • Clique em Criar item
  • Informe os parâmetros do item no formulário

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

Os campos que requerem informação específica para itens HTTP são:

Tipo Selecione Agente HTTP aqui.
Chave Informe uma chave de item única.
URL URL na qual conectar e recuperar os dados. Por exemplo:
https://www.example.com
http://www.example.com/download
Nomes de domínio podem ser especificados em caracteres Unicode. Eles são automaticamente convertidos com punycode para ASCII quando executando a verificação HTTP.
O botão Processar pode ser usado para separar campos de consulta opcionais (como ?name=Admin&password=mypassword) da URL, movendo os atributos e valores em Campos da consulta com codificação URL automática.
Limitado a 2048 caracteres.
Macros suportadas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuário, macros de descoberta de baixo-nível.
Isto configura a opção do cURL CURLOPT_URL.
Campos da consulta Variáveis para a URL (veja acima).
Especificado como pares de atributo e valor.
Valores são codificados para URL automaticamente. Valores de macros são resolvidos e então codificados para URL automaticamente.
Macros suportadas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuário, macros de descoberta de baixo-nível.
Isto configura a opção do cURL CURLOPT_URL.
Tipo de requisição Selecione o método de requisição: GET, POST, PUT or HEAD
Tempo limite O Zabbix não gastará mais do que a quantidade de tempo configurada no processamento da URL (1-60 segundos). Na verdade este parâmetro define o tempo máximo para a realização de conexão a URL e tempo máximo para realizar uma consulta HTTP. No entanto, o Zabbix não gastará mais do que 2 x Tempo limite segundos em uma verificação.
Sufixos de tempo são suportados, p.e. 30s, 1m.
Macros suportadas: macros de usuário, macros de descoberta de baixo-nível.
Isto configura a opção do cURL CURLOPT_TIMEOUT.
Tipo de corpo da requisição Selecione o tipo de corpo da requisição:
Dados brutos - corpo da requisição HTTP customizado, macros são substituídas mas nenhuma codificação é executada
Dados JSON - corpo da requisição HTTP em formato JSON. Macros podem ser usadas como string, número, verdadeiro e falso; macros usadas como strings devem ser quotadas com aspas duplas. Valores de macros são resolvidos e então escapados automaticamente. Se "Content-Type" não for especificado nos cabeçalhos então assumirá o valor padrão "Content-Type: application/json"
Dados XML - corpo da requisição HTTP em formato XML. Macros podem ser usadas como um nó de texto, atributo ou seção CDATA. Valores de macros são resolvidos e então escapados automaticamente em um nó de texto e atributo. Se "Content-Type" não for especificado nos cabeçalhos então assumirá o valor padrão "Content-Type: application/json"
Note que a seleção de Dados XML requer libxml2.
Corpo da requisição Informe o corpo da requisição.
Macros suportadas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuário, macros de descoberta de baixo-nível.
Cabeçalhos Cabeçalhos HTTP personalizados que serão enviados na execução de uma requisição.
Especificado como pares de atributo e valor.
Macros suportadas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuário, macros de descoberta de baixo-nível.
Isto configura a opção do cURL CURLOPT_HTTPHEADER.
Códigos de estado requeridos Lista de códigos de estado HTTP esperados. Se o Zabbix recebe um código que não está na lista, o item se tornará não suportado. Se vazio, nenhuma verificação será executada.
Por exemplo: 200,201,210-299
Macros suportadas na lista: macros de usuário, macros de descoberta de baixo-nível.
Isto usa a opção do cURL CURLINFO_RESPONSE_CODE.
Seguir redirecionamentos Marque esta caixa para seguir redirecionamentos HTTP.
Isto configura a opção do cURL CURLOPT_FOLLOWLOCATION.
Modo de busca Selecione a parte da resposta que deve ser recuperadas:
Corpo - apenas o corpo
Cabeçalhos - apenas cabeçalhos
Corpo e cabeçalhos - corpo e cabeçalhos
Converter para JSON Cabeçalhos são salvos como pares de atributo e valor sob a chave "cabeçalho".
Se 'Content-Type: application/json' é encontrada então o corpo é salvo como um objeto, caso contrário ele é armazenado como string, por exemplo:
Proxy HTTP Você pode especificar um proxy HTTP para usar, usando o formato [protocol://][username[:password]@]proxy.example.com[:port].
O prefixo opcional protocol:// pode ser usado para especificar protocolos proxy alternativos (p.e. https, socks4, socks5; veja documentação; o suporte ao prefixo de protocolo foi adicionado no cURL 7.21.7). Sem nenhum protocolo especificado, o proxy será tratado como um proxy HTTP. Se você especificar um protocolo errado, a conexão falhará a o item se tornará não suportado.
Por padrão, a porta 1080 será usada.
Se especificado, o proxy irá sobrescrever as variáveis de ambiente de proxy relacionadas como http_proxy, HTTPS_PROXY. Se não especificado, o proxy não irá sobrescrever as variáveis de ambiente de proxy relacionadas. O valor informado é passado "como é", nenhum teste de é executado.
Note que apenas autenticação simples é suportada com proxy HTTP.
Macros suportadas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuário, macros de descoberta de baixo-nível.
Isto configura a opção do cURL CURLOPT_PROXY.
Autenticação HTTP Tipo de autenticação:
Nenhum - autenticação não usada.
Básica - autenticação básica é usada.
NTLM - autenticação NTLM (Windows NT LAN Manager) é usada.
Kerberos - autenticação Kerberos é usada. Veja também: Configurção do Kerberos com Zabbix.
Digest - autenticação Digest é usada.
A seleção de um método de autenticação oferecerá dois campos adicionais para informar um nome de usuário e senha, onde macros de usuário e macros de descoberta de baixo-nível são suportadas.
Isto configura a opção do cURL CURLOPT_HTTPAUTH.
verificar par SSL Marque esta caixa para verificar o certificado SSL do servidor web. O certificado do servidor será automaticamente obtido do local da autoridade de certificação do sistema (CA). Você pode sobrescrever o local dos arquivos CA usando o parâmetro de configuração SSLCALocation do Zabbix Server ou Proxy.
Isto configura a opção do cURL CURLOPT_SSL_VERIFYPEER.
Verificar host SSL Marque esta caixa para verificar que o campo Nome Comum ou Nome Alternativo do Sujeito (SAN) do certificado do servidor web corresponde.
Isto configura a opção do 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 PEM1. Se o arquivo de certificado também contém a chave privada, deixe este campo vazio. Se a chave está criptografada, informe a senha no campo de senha da chave SSL. O diretório contendo estes arquivos é especificado pelo parâmetro de configuração SSLCertLocation do Zabbix Server ou Proxy.
Macros suportadas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuário, macros de descoberta de baixo-nível.
Isto configura a opção do cURL CURLOPT_SSLCERT.
Arquivo de chave SSL Nome do arquivo de chave privada SSL usado para autenticação do cliente. O arquivo de chave privada deve estar no formato PEM1. O diretório contendo estes arquivos é especificado pelo parâmetro de configuração SSLKeyLocation do Zabbix Server ou Proxy.
Macros suportadas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuário, macros de descoberta de baixo-nível.
Isto configura a opção do cURL CURLOPT_SSLKEY.
Senha da chave SSL senha do arquivo de chave privada SSL.
Macros suportadas: macros de usuário, macros de descoberta de baixo-nível.
Isto configura a opção do cURL CURLOPT_KEYPASSWD.
Habilitar retenção (trapping) Com esta caixa marcada, o item também funcionará como um item de retenção (trapper) e aceitará dados enviados para este item pelo Zabbix Sender ou usando protocolo Zabbix Sender.
Host permitidos Visível apenas se a caixa Habilitar retenção estiver marcada.
Lista de endereços de IP separados por vírgula, opcionalmente em notação CIDR, ou nomes de host.
Se especificado, conexões de entrada serão aceitas apenas de hosts listados aqui.
Se o suporte a IPv6 estiver habilitado então '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' são tratados da mesma forma e '::/0' permitirá qualquer endereço IPv4 ou IPv6.
'0.0.0.0/0' pode ser usado para permitir qualquer endereço IPv4.
Note, que "endereços IPv6 compatíveis com IPv4" (prefixo 0000::/96) são suportados mas obsoletos pela RFC4291.
Exemplo: Server=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 de usuário são permitidos neste campo.
Macros de host: {HOST.HOST}, {HOST.NAME}, {HOST.IP}, {HOST.DNS}, {HOST.CONN} são permitidas neste campo.

Se o campo Proxy HTTP for deixada vazio, outra forma de usar um proxy HTTP é configurar as variáveis de ambiente relacionadas ao proxy.

Para HTTP - configure a variável de ambiente http_proxy para o usuário do Zabbix Server. Por exemplo:
http_proxy=http://proxy_ip:proxy_port.

Para HTTPS - configure a variável de ambiente HTTPS_PROXY. Por exemplo:
HTTPS_PROXY=http://proxy_ip:proxy_port. Mais detalhes estão disponíveis executando o comando shell: # man curl.

[1] O Zabbix suporta arquivos de certificado e chave privada apenas no formato PEM. Caso você tenha seu certificado e dados de chave privada em formato de arquivo PKCS #12 (usualmente com extensão *.p12 ou *.pfx) você deve gerar o arquivo PEM dele usando os seguintes comandos:

openssl pkcs12 -in ssl-cert.p12 -clcerts -nokeys -out ssl-cert.pem
       openssl pkcs12 -in ssl-cert.p12 -nocerts -nodes  -out ssl-cert.key

Exemplos

Exemplo 1

Enviar requisições GET simples para obter dados de serviços como Elasticsearch:

  • Crie um item GET com URL: localhost:9200/?pretty
  • Verifique a resposta:
{
         "name" : "YQ2VAY-",
         "cluster_name" : "elasticsearch",
         "cluster_uuid" : "kH4CYqh5QfqgeTsjh2F9zg",
         "version" : {
           "number" : "6.1.3",
           "build_hash" : "af51318",
           "build_date" : "2018-01-26T18:22:55.523Z",
           "build_snapshot" : false,
           "lucene_version" : "7.1.0",
           "minimum_wire_compatibility_version" : "5.6.0",
           "minimum_index_compatibility_version" : "5.0.0"
         },
         "tagline" : "You know, for search"
       }
  • Agora extraia o número de versão usando uma etapa de pré-processamento JSONPath: $.version.number
Exemplo 2

Enviar requisições de POST simples para obter dados de serviços como Elasticsearch:

  • Crie um item POST com URL: http://localhost:9200/str/values/_search?scroll=10s
  • Configure o seguinte corpo POST para obter a carga de processador (média de 1 minuto por core)
{
           "query": {
               "bool": {
                   "must": [{
                       "match": {
                           "itemid": 28275
                       }
                   }],
                   "filter": [{
                       "range": {
                           "clock": {
                               "gt": 1517565836,
                               "lte": 1517566137
                           }
                       }
                   }]
               }
           }
       }
  • Recebido:
{
           "_scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAAAkFllRMlZBWS1UU1pxTmdEeGVwQjRBTFEAAAAAAAAAJRZZUTJWQVktVFNacU5nRHhlcEI0QUxRAAAAAAAAACYWWVEyVkFZLVRTWnFOZ0R4ZXBCNEFMUQAAAAAAAAAnFllRMlZBWS1UU1pxTmdEeGVwQjRBTFEAAAAAAAAAKBZZUTJWQVktVFNacU5nRHhlcEI0QUxR",
           "took": 18,
           "timed_out": false,
           "_shards": {
               "total": 5,
               "successful": 5,
               "skipped": 0,
               "failed": 0
           },
           "hits": {
               "total": 1,
               "max_score": 1.0,
               "hits": [{
                   "_index": "dbl",
                   "_type": "values",
                   "_id": "dqX9VWEBV6sEKSMyk6sw",
                   "_score": 1.0,
                   "_source": {
                       "itemid": 28275,
                       "value": "0.138750",
                       "clock": 1517566136,
                       "ns": 25388713,
                       "ttl": 604800
                   }
               }]
           }
       }
  • Agora use uma etapa de pré-processamento JSONPath para obter o valor do item: $.hits.hits[0]._source.value
Exemplo 3

Verificando se a API Zabbix está disponível, usando apiinfo.version.

  • Configuração do item:

Note o uso do método POST com dados JSON, configurando cabeçalhos da requisição e solicitando o retorno de apenas cabeçalhos:

  • Pré-processamento do valor do item com expressão regular para obter código HTTP:

  • Verificando o resultado nos Últimos dados:

Exemplo 4

Obtendo informações de clima pela conexão ao serviço público Openweathermap.

  • Configure um item principal para coletar dados massivos em um único JSON:

Note o uso de macros nos campos da requisição. Tome como referência a API do Openweathermap para saber como preenchê-los.

Exemplo de JSON retornado como resposta ao agente HTTP:

{
           "body": {
               "coord": {
                   "lon": 40.01,
                   "lat": 56.11
               },
               "weather": [{
                   "id": 801,
                   "main": "Clouds",
                   "description": "few clouds",
                   "icon": "02n"
               }],
               "base": "stations",
               "main": {
                   "temp": 15.14,
                   "pressure": 1012.6,
                   "humidity": 66,
                   "temp_min": 15.14,
                   "temp_max": 15.14,
                   "sea_level": 1030.91,
                   "grnd_level": 1012.6
               },
               "wind": {
                   "speed": 1.86,
                   "deg": 246.001
               },
               "clouds": {
                   "all": 20
               },
               "dt": 1526509427,
               "sys": {
                   "message": 0.0035,
                   "country": "RU",
                   "sunrise": 1526432608,
                   "sunset": 1526491828
               },
               "id": 487837,
               "name": "Stavrovo",
               "cod": 200
           }
       }

A próxima tarefa é configurar os itens dependentes para extrair dados do JSON.

  • Configure uma amostra de item dependente para umidade:

Outras métricas como 'Temperatura' são adicionados da mesma forma.

  • Amostra de item dependente de pré-processamento de valor com JSONPath:

  • Verifique o resultado dos dados meteorológicos nos Últimos dados:

Exemplo 5

Conexão com página de estado do Nginx e obtenção de suas métricas em massa.

  • Configure um item principal para coleção de dados em massa:

Amostra de saída de estado do Nginx:

Active connections: 1 Active connections:
       server accepts handled requests
        52 52 52 
       Reading: 0 Writing: 1 Waiting: 0

A próxima tarefa é configurar os itens dependentes para extrair os dados.

  • Configure uma amostra de item dependente para requisições por segundo:

  • Amostra de item de pré-processamento de valor com expressão regular server accepts handled requests\s+([0-9]+) ([0-9]+) ([0-9]+):

  • Verifique o resultado completo do módulo de registro (stub) nos Últimos dados: