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 ao Zabbix server ou proxy), ou usando o método de API history.push (para enviar dados ao 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 Follow redirects abaixo). O número máximo de redirecionamentos é definido de forma fixa como 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 Coleta de dados > Hosts.
  2. Clique em Itens na linha do host.
  3. Clique em Criar item.
  4. Insira os parâmetros do item no formulário.

Todos os campos de entrada obrigatórios sã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 exclusiva para o item.
URL URL à qual se conectar e da qual recuperar dados. Por exemplo:
https://www.example.com
http://www.example.com/download
Os nomes de domínio podem ser especificados usando caracteres Unicode. Eles são convertidos automaticamente para punycode ASCII ao executar a verificação HTTP.
O botão Analisar pode ser usado para separar campos de consulta opcionais (como ?key=value&limit=10) da URL, movendo os atributos e valores para Campos de consulta para codificação automática da URL.
Por motivos de segurança, não inclua nomes de usuário ou senhas reais nas URLs. Use macros de usuário para evitar a exposição das credenciais.
Limitado a 2048 caracteres.
Macros compatíveis: {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 de baixo nível.
Isso define a opção CURLOPT_URL do cURL.
Campos de consulta Variáveis para a URL (consulte acima).
Especificadas como pares de atributo e valor.
Os valores são codificados automaticamente na URL. Os valores provenientes de macros são resolvidos e, em seguida, codificados automaticamente na URL.
Macros compatíveis: {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 de baixo nível.
Isso define a opção CURLOPT_URL do cURL.
Tipo de solicitação Selecione o tipo de método da solicitação: GET, POST, PUT ou HEAD.
Tipo do corpo da solicitação Selecione o tipo do corpo da solicitação:
Dados brutos - corpo de solicitação HTTP personalizado; as macros são substituídas, mas nenhuma codificação é realizada.
Dados JSON - corpo de solicitação HTTP no formato JSON. As macros podem ser usadas como string, número, true e false; as macros usadas como strings devem estar entre aspas duplas. Os valores provenientes de macros são resolvidos e escapados automaticamente. Se "Content-Type" não for especificado nos cabeçalhos, o padrão será "Content-Type: application/json".
Dados XML - corpo de solicitação HTTP no formato XML. As macros podem ser usadas como nó de texto, atributo ou seção CDATA. Os valores provenientes de macros são resolvidos e 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".
Corpo da solicitação Insira o corpo da solicitação.
Macros compatíveis: {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 de baixo nível.
Cabeçalhos Cabeçalhos HTTP personalizados que serão enviados ao realizar uma solicitação.
Especificados como pares de atributo e valor.
Macros compatíveis: {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 de baixo nível.
Isso define a opção CURLOPT_HTTPHEADER do cURL.
Códigos de status obrigatórios Lista dos 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 estiver vazia, nenhuma verificação será realizada.
Por exemplo: 200,201,210-299.
Macros compatíveis na lista: macros de usuário, macros de descoberta de baixo nível.
Isso usa a opção CURLINFO_RESPONSE_CODE do cURL.
Seguir redirecionamentos Marque a caixa de seleção para seguir redirecionamentos HTTP.
Isso define a opção CURLOPT_FOLLOWLOCATION do cURL.
Modo de recuperação Selecione a parte da resposta que deve ser recuperada:
Corpo - somente o corpo
Cabeçalhos - somente os 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 Modo de recuperação não estiver definido como Corpo.
Se 'Content-Type: application/json' for encontrado, o corpo será salvo como um objeto; caso contrário, será armazenado como string, por exemplo:
HTTP proxy Você pode especificar um HTTP proxy a ser usado, utilizando 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 a documentação; o suporte ao prefixo de protocolo foi adicionado no cURL 7.21.7). Quando nenhum protocolo é especificado, o proxy será tratado como um HTTP proxy. 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 e HTTPS_PROXY. Se não for especificado, o proxy não substituirá as variáveis de ambiente relacionadas a proxy. O valor inserido é passado "como está"; nenhuma verificação de validade é realizada.
Observe que somente a autenticação simples é compatível com HTTP proxy.
Macros compatíveis: {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 de baixo nível.
Isso define a opção CURLOPT_PROXY do cURL.
Autenticação HTTP Selecione a opção de autenticação:
Nenhuma - nenhuma autenticação é usada;
Básica - é usada autenticação básica;
NTLM - é usada autenticação NTLM (Windows NT LAN Manager);
Kerberos - é usada autenticação Kerberos (consulte também: Configurando o Kerberos com o Zabbix);
Digest - é usada autenticação Digest.
Isso define a opção CURLOPT_HTTPAUTH do cURL.
Nome de usuário Insira o nome de usuário (até 255 caracteres).
Este campo está disponível quando Autenticação HTTP está definida como Básica, NTLM, Kerberos ou Digest. Macros de usuário e macros de descoberta de baixo nível são compatíveis.
Senha Insira a senha do usuário (até 255 caracteres).
Este campo está disponível quando Autenticação HTTP está definida como Básica, NTLM, Kerberos ou Digest. Macros de usuário e macros de descoberta de baixo nível são compatíveis.
Verificar peer SSL Marque a caixa de seleção para verificar o certificado SSL do web server. O certificado do server é verificado em relação aos certificados da autoridade certificadora (CA) confiável no local de CA de todo o sistema. Você pode substituir o local dos arquivos de CA usando o parâmetro de configuração SSLCALocation do Zabbix server ou proxy.
Isso define a opção CURLOPT_SSL_VERIFYPEER do cURL.
Verificar host SSL Marque a caixa de seleção para verificar se o campo Common Name ou Subject Alternate Name do certificado do web server corresponde.
Isso define a opção CURLOPT_SSL_VERIFYHOST do cURL.
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 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 parâmetro de configuração SSLCertLocation do Zabbix server ou proxy.
Macros compatíveis: {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 de baixo nível.
Isso define a opção CURLOPT_SSLCERT do cURL.
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 que contém esse arquivo é especificado pelo parâmetro de configuração SSLKeyLocation do Zabbix server ou proxy.
Macros compatíveis: {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 de baixo nível.
Isso define a opção CURLOPT_SSLKEY do cURL.
Senha da chave SSL Senha do arquivo de chave privada SSL.
Macros compatíveis: macros de usuário, macros de descoberta de baixo nível.
Isso define a opção CURLOPT_KEYPASSWD do cURL.
Tempo limite O Zabbix não gastará mais do que o tempo definido processando a URL (1-600 segundos). Na prática, esse parâmetro define o tempo máximo para estabelecer uma conexão com a URL e o tempo máximo para realizar uma solicitação HTTP. Portanto, o Zabbix não gastará mais do que 2 x Tempo limite segundos em uma verificação.
Isso define a opção CURLOPT_TIMEOUT do cURL.
Para obter mais informações sobre o parâmetro Tempo limite, consulte atributos gerais do item.
Ativar trapping Com esta caixa de seleção marcada, o item também funcionará como um item trapper e aceitará dados enviados ao Zabbix server ou proxy usando o utilitário Zabbix sender ou o protocolo do Zabbix sender, ou aceitará dados enviados ao Zabbix server usando o método de API history.push. Para obter mais informações sobre o envio de dados, consulte: Itens trapper.
Hosts permitidos Visível somente se a caixa de seleção Ativar trapping estiver marcada.
Lista de endereços IP separados por vírgulas (opcionalmente na 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 vazio, as conexões recebidas serão negadas de todos os hosts. Se especificado, as conexões recebidas serão aceitas somente dos hosts listados aqui.
Se o suporte a IPv6 estiver ativado, 127.0.0.1, ::127.0.0.1 e ::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 compatíveis, mas foram descontinuados 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 estiver vazio, outra forma de usar um HTTP proxy é definir variáveis de ambiente relacionadas a proxy.

Para HTTP - defina 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 - defina a variável de ambiente HTTPS_PROXY. Por exemplo:
HTTPS_PROXY=http://proxy_ip:proxy_port. Mais detalhes estão disponíveis executando um comando shell: # man curl.

[1] O Zabbix é compatível somente com arquivos de certificado e chave privada no formato PEM. Caso os dados do certificado e da chave privada estejam em um arquivo no formato PKCS #12 (geralmente com a extensão *.p12 ou *.pfx), você poderá gerar o arquivo PEM 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 massa.

  • Configure o NGINX seguindo o guia oficial.
  • Configure um item mestre para a coleta de dados em massa:

Exemplo de saída do status 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 extraiam os dados.

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

  • Exemplo de pré-processamento do valor do 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: