16 Agente HTTP

Visão geral

Este tipo de item permite a coleta de dados usando o protocolo HTTP/HTTPS. Trapping também é possível usando o Zabbix sender ou o protocolo Zabbix sender.

A verificação de 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 itens HTTP não exigem nenhum agente em execução no host que está sendo monitorado.

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

O servidor/proxy Zabbix deve ser configurado inicialmente com suporte a cURL (libcurl).

Configuração

Para configurar um item HTTP:

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

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

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

Parâmetro Descrição
Tipo Selecione HTTP agent aqui.
Chave Insira uma chave única para o item.
URL URL para conectar-se e recuperar 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 para ASCII em punycode ao executar a verificação HTTP.
O botão Parse pode ser usado para separar campos de consulta opcionais (como ?name=Admin&password=mypassword) da URL, movendo os atributos e valores para Campos de consulta para codificação automática de URL.
Limitado a 2048 caracteres.
Macros suportados: {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.
Isso define a opção cURL CURLOPT_URL.
Campos de consulta Variáveis para a URL (veja acima).
Especificados como pares de atributos e valores. Valores são codificados automaticamente na URL. Valores de macros são resolvidos e, em seguida, codificados automaticamente na URL.
Macros suportados: {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.
Isso define a opção CURLOPT_URL cURL.
Tipo de solicitação Selecione o tipo de método de solicitação: GET, POST, PUT ou HEAD
Timeout O Zabbix não gastará mais do que o tempo definido para processar a URL (1-60 segundos). 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 Timeout segundos em uma verificação.
Sufixos de tempo são suportados, como 30s, 1m.
Macros suportados: macros de usuário, macros de descoberta de baixo nível.
Isso define a opção cURL CURLOPT_TIMEOUT cURL.
Tipo de corpo da solicitação Selecione o tipo de corpo da solicitação:
Dados brutos - corpo de solicitação HTTP personalizado, macros são substituídos, mas nenhuma codificação é realizada
Dados JSON - corpo da solicitação HTTP em formato JSON. Macros podem ser usados como string, número, true e false; macros usados como strings devem estar 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á definido como "Content-Type: application/json" por padrão.
Dados XML - corpo da solicitação HTTP em formato XML. Macros podem ser usados como nó de texto, atributo ou seção CDATA. Valores de macros são resolvidos e, em seguida, escapados automaticamente em um nó de texto e atributo. Se "Content-Type" não for especificado nos cabeçalhos, ele será definido como "Content-Type: application/xml" por padrão.
Note que a seleção de Dados XML requer libxml2.
Corpo da solicitação Insira o corpo da solicitação.
Macros suportados: {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 ao realizar uma solicitação.
Especificados como pares de atributos e valores.
Macros suportados: {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.
Isso define a opção cURL CURLOPT_HTTPHEADER.
Códigos de status esperados Lista de códigos de status HTTP esperados. Se o Zabbix receber um código que não esteja na lista, o item se tornará não suportado. Se estiver vazio, nenhuma verificação é realizada.
Por exemplo: 200,201,210-299
Macros suportados na lista: macros de usuário, macros de descoberta de baixo nível.
Isso usa a opção cURL CURLINFO_RESPONSE_CODE.
Seguir redirecionamentos Marque a caixa de seleção para seguir redirecionamentos HTTP.
Isso define a opção cURL CURLOPT_FOLLOWLOCATION.
Modo de recuperação Selecione a parte da resposta que deve ser recuperada:
Corpo - somente corpo
Cabeçalhos - somente cabeçalhos
Corpo e cabeçalhos - corpo e cabeçalhos
Conventer para JSON Cabeçalhos são salvos como pares de atributos e valores 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 a ser usado, usando o formato [protocol://][username[:password]@]proxy.example.com[:port].
O prefixo opcional protocol:// pode ser usado para especificar protocolos de proxy alternativos (por exemplo, https, socks4, socks5; consulte documentation; o suporte ao prefixo do protocolo foi adicionado no cURL 7.21.7). Se nenhum protocolo for especificado, o proxy será tratado como um proxy HTTP. Se você especificar o protocolo errado, a conexão falhará e o item se tornará não suportado.
Por padrão, a porta 1080 será usada.
Se especificado, o proxy substituirá as variáveis de ambiente relacionadas ao 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 é", nenhuma verificação de sanidade é realizada.
Note que apenas autenticação simples é suportada com proxy HTTP.
Macros suportados: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macro de usuário, macros de descoberta de baixo nível.
Isso define a opção cURL CURLOPT_PROXY cURL.
Atenticação HTTP Tipo de autenticação:
Nenhuma - nenhuma autenticaçã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: Configuring Kerberos with Zabbix.
Digest - Autenticação Digest é usada.
Selecionar um método de autenticação fornecerá dois campos adicionais para inserir um nome de usuário e senha, onde macros de usuário e macros de descoberta de baixo nível são suportados.
Isso define a opção cURL CURLOPT_HTTPAUTH.
Verificação de par SSL Selecione a caixa de seleção para verificar o certificado SSL do servido da web. O certificado do servidor será automaticamente obtido da localização da autoridade de certificação (CA) do sistema. Você pode substituir a localização dos arquivos CA usando o parâmetro de configuração do servidor ou proxy do Zabbix, SSLCALocation.
Isso define a opção cURL CURLOPT_SSL_VERIFYPEER.
SSL verify host Marque a caixa de seleção para verificar se o campo Common Name ou o campo Subject Alternate Name do certificado do servidor 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 PEM1. 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 de senha da chave SSL. O diretório que contém este arquivo é especificado pelo parâmetro de configuração do servidor ou proxy do Zabbix SSLCertLocation.
Macros suportados: {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.
Isso define a opção cURL CURLOPT_SSLCERT cURL.
Arquivo de chave SSL Nome do arquivo de chave privada SSL usado para autenticação do cliente. O arquivo da chave privada deve estar no formato PEM1. O diretório que contém este arquivo é especificado pelo parâmetro de configuração do Zabbix server ou proxy, SSLKeyLocation.
Macros suportados: {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.
Isso define a opção cURL CURLOPT_SSLKEY.
Senha da chave SSL Senha do arquivo de chave privada.
Macros suportados: macros de usuário, macros de descoberta de baixo nível.
Isso define a opção cURL CURLOPT_KEYPASSWD.
Habilitar trapping Com esta caixa de seleção marcada, o item também funcionará como um trapper item e aceitará dados enviados para este item pelo Zabbix sender ou usando o protocolo Zabbix sender.
Hosts permitidos Visível apenas se a caixa de seleção Habilitar trapping estiver marcada.
Lista de endereços IP delimitados por vírgula, opcionalmente em notação CIDR, ou nomes DNS.
Se especificado, as conexões recebidas serão aceitas apenas dos 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' serão tratados de forma igual e '::/0' permitirá qualquer endereço IPv4 ou IPv6.
'0.0.0.0/0' pode ser usado para permitir qualquer endereço IPv4.
Note "endereços IPv6 compatíveis com IPv4" (prefixo 0000::/96) são suportados, mas descontinuados pelo RFC4291.
Exemplo: 127.0.0.1, 192.168.1.0/24, 192.168.3.1-255, 192.168.1-10.1-255, ::1,2001:db8::/32, mysqlserver1, zabbix.example.com, {HOST.HOST}
Espaços e user macros não são permitidos nesse campo.
Macros de host: {HOST.HOST}, {HOST.NAME}, {HOST.IP}, {HOST.DNS}, {HOST.CONN} são permitidos nesse campo.

Se o campo HTTP proxy estiver vazio, aoutra maneira de usar um proxy HTTP é definir variáveis de ambiente relacionadas ao proxy.

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

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

[1] O Zabbix suporta apenas arquivos de certificado e chave privada no formato PEM. Caso você tenha os dados do certificado e da chave privada em um arquivo no formato PKCS #12 (geralmente com extensão *.p12 ou *.pfx), você pode gerar o arquivo PEM a partir 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

Envie solicitações GET simples para recuperar dados de serviços como o Elasticsearch:

  • Crie um item GET com a URL: localhost:9200/?pretty
  • Observe 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 da versão usando uma etapa de pré-processamento JSONPath: $.version.number
Exemplo 2

Envie solicitações POST simples para recuperar dados de serviços como o Elasticsearch:

  • Crie um item POST com a URL: http://localhost:9200/str/values/_search?scroll=10s
  • Configure o seguinte corpo de POST para obter a carga do processador (média de 1 minuto por núcleo):
{
           "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

Conectando-se à página de status do Nginx e obtendo suas métricas em massa.

  • Configure um item mestre para coleta de dados em massa:

Exemplo de saída do status de stub 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 itens dependentes que extraem os dados.

  • Configure um item dependente de exemplo para solicitações por segundo:

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

  • Verifique o resultado completo do módulo stub em Últimos dados: