9 agent HTTP

Visão geral

Este tipo de item permite a coleta de dados usando o protocolo HTTP/HTTPS. Também é possível fazer trapping usando o utilitário Zabbix sender ou o protocolo do Zabbix sender (para enviar dados para o Zabbix server ou proxy), ou usando o método de API history.push (para enviar dados para o Zabbix server).

As verificações de item HTTP são executadas pelo Zabbix server. No entanto, quando os hosts 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 exigem nenhum agent em execução no host monitorado.

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

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

As verificações HTTP são executadas de forma assíncrona - não é necessário receber a resposta de uma solicitação antes que outras verificações sejam iniciadas. A resolução de DNS também é assíncrona.

A concorrência máxima de verificações assíncronas é 1000 (definida por MaxConcurrentChecksPerPoller).

O número de pollers assíncronos do HTTP agent é definido pelo parâmetro StartHTTPAgentPollers.

O recurso de conexões persistentes do cURL foi adicionado às verificações do HTTP agent desde o Zabbix 7.0.

Configuração

Para configurar um item HTTP:

  1. Acesse Data collection > Hosts.
  2. Clique em Items na linha do host.
  3. Clique em Create item.
  4. Informe os parâmetros do item no formulário.

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

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

Parameter Description
Type Selecione HTTP agent aqui.
Key Informe uma chave de item exclusiva.
URL URL para conectar 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 convertidos automaticamente para punycode em ASCII 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 Query fields para codificação automática da URL.
Limitado a 2048 caracteres.
Macros suportadas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuário, macros de descoberta em baixo nível.
Isso define a opção cURL CURLOPT_URL.
Query fields Variáveis para a URL (veja acima).
Especificadas como pares de atributo e valor.
Os valores são codificados automaticamente na URL. Valores provenientes de macros são resolvidos e depois codificados automaticamente na URL.
Macros suportadas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuário, macros de descoberta em baixo nível.
Isso define a opção cURL CURLOPT_URL.
Request type Selecione o tipo de método da requisição: GET, POST, PUT ou HEAD
Request body type Selecione o tipo de corpo da requisição:
Raw data - corpo personalizado da requisição HTTP, macros são substituídas, mas nenhuma codificação é realizada
JSON data - corpo da requisição HTTP no formato JSON. Macros podem ser usadas como string, número, true e false; macros usadas como strings devem estar entre aspas duplas. Valores provenientes de macros são resolvidos e depois escapados automaticamente. Se "Content-Type" não for especificado nos cabeçalhos, o padrão será "Content-Type: application/json"
XML data - corpo da requisição HTTP no formato XML. Macros podem ser usadas como nó de texto, atributo ou seção CDATA. Valores provenientes de macros são resolvidos e depois escapados automaticamente em um nó de texto e atributo. Se "Content-Type" não for especificado nos cabeçalhos, o padrão será "Content-Type: application/xml"
Request body Informe o corpo da requisição.
Macros suportadas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuário, macros de descoberta em baixo nível.
Headers Cabeçalhos HTTP personalizados que serão enviados ao executar uma requisição.
Especificados como pares de atributo e valor.
Macros suportadas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuário, macros de descoberta em baixo nível.
Isso define a opção cURL CURLOPT_HTTPHEADER.
Required status codes Lista de códigos de status HTTP esperados. Se o Zabbix receber um código que não esteja na lista, o item ficará sem suporte. Se estiver vazio, nenhuma verificação será realizada.
Por exemplo: 200,201,210-299
Macros suportadas na lista: macros de usuário, macros de descoberta em baixo nível.
Isso usa a opção cURL CURLINFO_RESPONSE_CODE.
Follow redirects Marque a caixa de seleção para seguir redirecionamentos HTTP.
Isso define a opção cURL CURLOPT_FOLLOWLOCATION.
Retrieve mode Selecione a parte da resposta que deve ser recuperada:
Body - apenas o corpo
Headers - apenas os cabeçalhos
Body and headers - corpo e cabeçalhos
Convert to JSON Os cabeçalhos são salvos como pares de atributo e valor sob a chave "header" se Retrieve mode não estiver definido como Body.
Se for encontrado 'Content-Type: application/json', o corpo será salvo como um objeto; caso contrário, será armazenado como string, por exemplo:
HTTP proxy Você pode especificar um proxy HTTP a ser usado, no 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; veja a documentação; o suporte ao prefixo de protocolo foi adicionado no cURL 7.21.7). Sem protocolo especificado, o proxy será tratado como um proxy HTTP. Se você especificar o protocolo incorreto, a conexão falhará e o item ficará sem suporte.
Por padrão, a porta 1080 será usada.
Se especificado, o proxy substituirá variáveis de ambiente relacionadas a proxy, como http_proxy, HTTPS_PROXY. Se não for especificado, o proxy não substituirá variáveis de ambiente relacionadas a proxy. O valor informado é passado "como está", sem qualquer verificação de consistência.
Note que apenas autenticação simples é suportada com proxy HTTP.
Macros suportadas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuário, macros de descoberta em baixo nível.
Isso define a opção cURL CURLOPT_PROXY.
HTTP authentication Selecione a opção de autenticação:
None - nenhuma autenticação é usada;
Basic - autenticação básica é usada;
NTLM - autenticação NTLM (Windows NT LAN Manager) é usada;
Kerberos - autenticação Kerberos é usada (veja também: Configurando Kerberos com o Zabbix);
Digest - autenticação Digest é usada.
Isso define a opção cURL CURLOPT_HTTPAUTH.
User name Informe o nome de usuário (até 255 caracteres).
Este campo está disponível se HTTP authentication estiver definido como Basic, NTLM, Kerberos ou Digest. Macros de usuário e macros de descoberta em baixo nível são suportadas.
Password Informe a senha do usuário (até 255 caracteres).
Este campo está disponível se HTTP authentication estiver definido como Basic, NTLM, Kerberos ou Digest. Macros de usuário e macros de descoberta em baixo nível são suportadas.
SSL verify peer Marque a caixa de seleção para verificar o certificado SSL do servidor web. O certificado do server será obtido automaticamente do local de autoridade certificadora (CA) em nível de sistema. Você pode substituir o local dos arquivos CA usando o parâmetro de configuração SSLCALocation do server ou proxy do Zabbix.
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.
SSL certificate file 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 SSL key file em branco. Se a chave estiver criptografada, especifique a senha no campo SSL key password. O diretório que contém este arquivo é especificado pelo parâmetro de configuração SSLCertLocation do server ou proxy do Zabbix.
Macros suportadas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuário, macros de descoberta em baixo nível.
Isso define a opção cURL CURLOPT_SSLCERT.
SSL key file 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 que contém este arquivo é especificado pelo parâmetro de configuração SSLKeyLocation do server ou proxy do Zabbix.
Macros suportadas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuário, macros de descoberta em baixo nível.
Isso define a opção cURL CURLOPT_SSLKEY.
SSL key password Senha do arquivo de chave privada SSL.
Macros suportadas: macros de usuário, macros de descoberta em baixo nível.
Isso define a opção cURL CURLOPT_KEYPASSWD.
Timeout O Zabbix não gastará mais do que o tempo definido no processamento da URL (1-600 segundos). Na prática, este parâmetro define o tempo máximo para estabelecer uma conexão com a URL e o tempo máximo para executar uma requisição HTTP. Portanto, o Zabbix não gastará mais do que 2 x Timeout segundos em uma verificação.
Isso define a opção cURL CURLOPT_TIMEOUT.
Para mais informações sobre o parâmetro Timeout, consulte os atributos gerais do item.
Enable trapping Com esta caixa de seleção marcada, o item também funcionará como um item trapper e aceitará dados enviados ao server ou proxy do Zabbix usando o utilitário Zabbix sender ou o protocolo do Zabbix sender, ou aceitará dados enviados ao server do Zabbix usando o método de API history.push. Para mais informações sobre o envio de dados, consulte: Itens trapper.
Allowed hosts Visível somente se a caixa de seleção Enable trapping estiver marcada.
Lista de endereços IP separados por vírgula (opcionalmente em notação CIDR) ou nomes DNS.

O valor padrão é a macro de usuário {$TRAPPER.ALLOWED_HOSTS}. Por padrão, {$TRAPPER.ALLOWED_HOSTS} é 127.0.0.1,::1. Você pode inserir os endereços diretamente no campo ou alterar o valor da macro. Se deixado em branco, conexões de entrada serão negadas de todos os hosts. Se especificado, conexões de entrada serão aceitas somente 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 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" (0000::/96 prefixo) são suportados, mas obsoletos pela 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 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 HTTP proxy for deixado em branco, outra forma de usar um proxy HTTP é definir variáveis de ambiente relacionadas a proxy.

Para HTTP - defina a variável de ambiente http_proxy para o usuário do server do 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 arquivos de certificado e chave privada somente no formato PEM. Caso você tenha os dados do certificado e da chave privada em um arquivo no formato PKCS #12 (normalmente 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 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 requisiçõ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 POST para obter a carga do processador (média de 1 min 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 Zabbix API está ativa, usando apiinfo.version.

  • Configuração do item:

Observe o uso do método POST com dados JSON, definindo cabeçalhos da requisição e solicitando o retorno apenas dos cabeçalhos:

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

  • Verificando o resultado em Latest data:

Exemplo 4

Recuperando informações meteorológicas por meio da conexão com o serviço público Openweathermap.

  • Configure um item mestre para coleta de dados em lote em um único JSON:

Observe o uso de macros nos campos de consulta. Consulte a Openweathermap API para saber como preenchê-los.

Exemplo de JSON retornado na resposta do HTTP agent:

{
    "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 itens dependentes que extraem dados do JSON.

  • Configure um item dependente de exemplo para umidade:

Outras métricas meteorológicas, como 'Temperature', são adicionadas da mesma forma.

  • Exemplo de pré-processamento do valor de um item dependente com JSONPath:

  • Verifique o resultado dos dados meteorológicos em Latest data:

Exemplo 5

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

  • Configure o Nginx seguindo o guia oficial.
  • Configure um item mestre para coleta de dados em lote:

Exemplo de saída do stub status 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 requisições por segundo:

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

  • Verifique o resultado completo do módulo stub em Latest data: