9 Monitoramento web

Visão geral

Com o Zabbix, você pode verificar vários aspectos de disponibilidade de sites.

Para realizar o monitoramento web, o server do Zabbix deve ser inicialmente configurado com suporte a cURL (libcurl).

Para ativar o monitoramento web, você precisa definir cenários web. Um cenário web consiste em uma ou várias requisições HTTP ou "steps". Os steps são executados periodicamente pelo server do Zabbix em uma ordem predefinida. Se um host for monitorado por proxy, os steps são executados pelo proxy.

Os cenários web são associados a hosts/templates da mesma forma que items, triggers etc. Isso significa que os cenários web também podem ser criados no nível de template e depois aplicados a vários hosts de uma só vez.

As seguintes informações são coletadas em qualquer cenário web:

  • velocidade média de download por segundo para todos os steps de todo o cenário
  • número do step que falhou
  • última mensagem de erro

As seguintes informações são coletadas em qualquer step de cenário web:

  • velocidade de download por segundo
  • tempo de resposta
  • código de resposta

Para mais detalhes, consulte itens de monitoramento web.

Os dados coletados a partir da execução de cenários web são mantidos no banco de dados. Os dados são usados automaticamente para gráficos, triggers e notificações.

O Zabbix também pode verificar se uma página HTML recuperada contém uma string predefinida. Ele pode executar um login simulado e seguir um caminho de cliques simulados do mouse na página.

O monitoramento web do Zabbix oferece suporte a HTTP e HTTPS. Ao executar um cenário web, o Zabbix seguirá redirecionamentos opcionalmente (consulte a opção Follow redirects abaixo). O número máximo de redirecionamentos é fixado em 10 (usando a opção cURL CURLOPT_MAXREDIRS). Todos os cookies são preservados durante a execução de um único cenário.

Configurando um cenário web

Para configurar um cenário web:

  • Vá para: Coleta de dados → Hosts (ou Templates)
  • Clique em Web na linha do host/template
  • Clique em Criar cenário web à direita (ou no nome do cenário para editar um cenário existente)
  • Insira os parâmetros do cenário no formulário

A aba Scenario permite configurar os parâmetros gerais de um cenário web.

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

Parâmetros do cenário:

Parameter Description
Name Nome exclusivo do cenário.
Macros de usuário são suportadas. Note que, se macros de usuário forem usadas, essas macros permanecerão sem resolução nos nomes de itens de monitoramento web.
Update interval Com que frequência o cenário será executado.
Sufixos de tempo são suportados, por exemplo 30s, 1m, 2h, 1d.
Macros de usuário são suportadas. Note que, se uma macro de usuário for usada e seu valor for alterado (por exemplo, 5m → 30s), a próxima verificação será executada de acordo com o valor anterior (mais adiante no futuro com os valores do exemplo).
Novos cenários web serão verificados em até 60 segundos após sua criação.
Attempts O número de tentativas para executar as etapas do cenário web. Em caso de problemas de rede (timeout, sem conectividade etc.), o Zabbix pode repetir a execução de uma etapa várias vezes. O valor definido afetará igualmente cada etapa do cenário. É possível especificar até 10 tentativas; o valor padrão é 1.
Note: o Zabbix não repetirá uma etapa por causa de um código de resposta incorreto ou da incompatibilidade de uma string obrigatória.
Agent Selecione um agent cliente.
O Zabbix se passará pelo navegador selecionado. Isso é útil quando um site retorna conteúdo diferente para navegadores diferentes.
Macros de usuário podem ser usadas neste campo.
HTTP proxy Você pode especificar um proxy HTTP a ser usado, no formato [protocol://][username[:password]@]proxy.example.com[:port].
Isso define a opção cURL CURLOPT_PROXY.
O prefixo opcional protocol:// pode ser usado para especificar protocolos de proxy alternativos (o suporte ao prefixo de protocolo foi adicionado no cURL 7.21.7). Sem protocolo especificado, o proxy será tratado como um proxy HTTP.
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 inserido é passado "como está", sem qualquer verificação de consistência.
Você também pode informar um endereço de proxy SOCKS. Se especificar o protocolo incorreto, a conexão falhará e o item ficará sem suporte.
Note que apenas autenticação simples é suportada com proxy HTTP.
Macros de usuário podem ser usadas neste campo.
Variables Variáveis que podem ser usadas nas etapas do cenário (URL, variáveis de post).
Elas têm o seguinte formato:
{macro1}=valor1
{macro2}=valor2
{macro3}=regex:<expressão regular>
{macro4}=jsonpath:<jsonpath>
{macro5}=xmlxpath:<xmlxpath>
{macro6}={{macro}.function()} (veja funções de macro)
Por exemplo:
{username}=Alexei
{password}=kj3h5kJ34bd
{hostid}=regex:hostid is ([0-9]+)
{url}=jsonpath:$.host_url
{status}=xmlxpath://host/response/status
{newvar}={{myvar}.btoa()}
As macros podem então ser referenciadas nas etapas como {username}, {password}, {hostid} etc. O Zabbix as substituirá automaticamente pelos valores reais. Observe que variáveis com regex: precisam de uma etapa para obter o valor da expressão regular, portanto o valor extraído só pode ser aplicado à etapa seguinte.
Se a parte do valor começar com regex:, então a parte após isso será tratada como uma expressão regular que pesquisa a página web e, se encontrada, armazena a correspondência na variável. Pelo menos um subgrupo deve estar presente para que o valor correspondente possa ser extraído.
Macros de usuário e macros} são suportadas.
As variáveis são codificadas automaticamente em URL quando usadas em campos de consulta ou dados de formulário para variáveis de post, mas devem ser codificadas manualmente quando usadas em post bruto ou diretamente na URL.
Headers Os cabeçalhos HTTP são usados ao realizar uma requisição. Cabeçalhos padrão e personalizados podem ser usados.
Os cabeçalhos serão atribuídos usando as configurações padrão, dependendo do tipo de Agent selecionado em uma lista suspensa no nível do cenário, e serão aplicados a todas as etapas, a menos que sejam definidos como personalizados no nível da etapa.
Observe que definir o cabeçalho no nível da etapa descarta automaticamente todos os cabeçalhos definidos anteriormente, exceto um cabeçalho padrão atribuído ao selecionar 'User-Agent' em uma lista suspensa no nível do cenário.
No entanto, até mesmo o cabeçalho padrão 'User-Agent' pode ser substituído ao especificá-lo no nível da etapa.
Para remover a definição de um cabeçalho no nível do cenário, o cabeçalho deve ser nomeado e atribuído sem valor no nível da etapa.
Os cabeçalhos devem ser listados usando a mesma sintaxe com que apareceriam no protocolo HTTP, opcionalmente usando alguns recursos adicionais suportados pela opção cURL CURLOPT_HTTPHEADER.
Por exemplo:
Accept-Charset=utf-8
Accept-Language=en-US
Content-Type=application/xml; charset=utf-8
Macros de usuário e macros} são suportadas.
Enabled O cenário fica ativo se esta caixa estiver marcada; caso contrário, fica desabilitado.

Observe que, ao editar um cenário existente, dois botões extras ficam disponíveis no formulário:

Cria outro cenário com base nas propriedades do cenário existente.
Exclui os dados de histórico e tendências do cenário. Isso fará com que o server execute o cenário imediatamente após a exclusão dos dados.

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 verificações 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 verificações 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 de shell: # man curl.

A aba Steps permite configurar as etapas do cenário web. Para adicionar uma etapa do cenário web, clique em Add no bloco Steps.

Macros user macros secretas não devem ser usadas em URLs, pois serão resolvidas para "******".

Configurando etapas

Parâmetros da etapa:

Parâmetro Descrição
Nome Nome exclusivo da etapa.
Macros de usuário são suportadas. Observe que, se macros de usuário forem usadas, essas macros permanecerão não resolvidas nos nomes de itens de monitoramento web.
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 com caracteres Unicode. Eles são automaticamente convertidos de punycode para ASCII ao executar a etapa do cenário web.
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 da URL.
Variáveis podem ser usadas na URL, utilizando a sintaxe {macro}. As variáveis podem ser codificadas manualmente para URL usando a sintaxe {{macro}.urlencode()}.
Macros de usuário e macros} são suportadas.
Limitado a 2048 caracteres.
Campos de consulta Variáveis HTTP GET para a URL.
Especificadas como pares de atributo e valor.
Os valores são codificados automaticamente para URL. Valores de variáveis do cenário, macros de usuário ou macros {HOST.*} são resolvidos e então codificados automaticamente para URL. O uso da sintaxe {{macro}.urlencode()} fará uma codificação dupla da URL.
Macros de usuário e macros} são suportadas.
Post Variáveis HTTP POST.
No modo Form data, especificadas como pares de atributo e valor.
Os valores são codificados automaticamente para URL. Valores de variáveis do cenário, macros de usuário ou macros {HOST.*} são resolvidos e então codificados automaticamente para URL.
No modo Raw data, atributos/valores são exibidos em uma única linha e concatenados com o símbolo &.
Valores brutos podem ser codificados/decodificados manualmente para URL usando a sintaxe {{macro}.urlencode()} ou {{macro}.urldecode()}.
Por exemplo: id=2345&userid={user}
Se {user} estiver definida como uma variável do cenário web, ela será substituída pelo seu valor quando a etapa for executada. Se desejar codificar a variável para URL, substitua {user} por {{user}.urlencode()}.
Macros de usuário e macros} são suportadas.
Variáveis Variáveis no nível da etapa que podem ser usadas para funções GET e POST.
Especificadas como pares de atributo e valor.
Variáveis no nível da etapa substituem variáveis no nível do cenário ou variáveis da etapa anterior. No entanto, o valor de uma variável no nível da etapa afeta apenas a etapa seguinte (e não a etapa atual).
Elas têm o seguinte formato:
{macro}=valor
{macro}=regex:<expressão regular>
Para mais informações, consulte a descrição de variáveis no nível do cenário.
As variáveis são automaticamente codificadas para URL quando usadas em campos de consulta ou dados de formulário para variáveis post, mas devem ser codificadas manualmente para URL quando usadas em post bruto ou diretamente na URL.
Cabeçalhos Cabeçalhos HTTP personalizados que serão enviados ao executar uma solicitação.
Especificados como pares de atributo e valor.
Um cabeçalho definido no nível da etapa será usado para essa etapa específica.
Observe que definir o cabeçalho no nível da etapa descarta automaticamente todos os cabeçalhos definidos anteriormente, exceto um cabeçalho padrão atribuído ao selecionar 'User-Agent' em uma lista suspensa no nível do cenário.
No entanto, até mesmo o cabeçalho padrão 'User-Agent' pode ser substituído ao especificá-lo no nível da etapa.
Por exemplo, atribuir o nome a um cabeçalho, mas não definir valor, removerá o cabeçalho padrão no nível do cenário.
Macros de usuário e macros {HOST.*} são suportadas.
Isso define a opção cURL CURLOPT_HTTPHEADER.
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 o modo de recuperação:
Body - recupera somente o corpo da resposta HTTP
Headers - recupera somente os cabeçalhos da resposta HTTP
Body and headers - recupera o corpo e os cabeçalhos da resposta HTTP
Timeout O Zabbix não gastará mais do que o tempo definido para processar a URL (de um segundo até no máximo 1 hora). Na prática, este parâmetro define o tempo máximo para estabelecer 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 na etapa.
Sufixos de tempo são suportados, por exemplo, 30s, 1m, 1h. Macros de usuário são suportadas.
String obrigatória Padrão obrigatório de expressão regular.
A menos que o conteúdo recuperado (HTML) corresponda ao padrão obrigatório, a etapa falhará. Se estiver vazio, nenhuma verificação da string obrigatória será realizada.
Por exemplo:
Página inicial do Zabbix
Welcome.*admin
Observação: Não há suporte, neste campo, para referência a expressões regulares criadas no frontend do Zabbix.
Macros de usuário e macros} são suportadas.
Códigos de status obrigatórios Lista de códigos de status HTTP esperados. Se o Zabbix receber um código que não esteja na lista, a etapa falhará.
Se estiver vazio, nenhuma verificação dos códigos de status será realizada.
Por exemplo: 200,201,210-299
Macros de usuário são suportadas.

Quaisquer alterações nas etapas do cenário web só serão salvas quando o cenário inteiro for salvo.

Veja também um exemplo real de como as etapas de monitoramento web podem ser configuradas.

Configurando tags

A aba Tags permite definir tags no nível do cenário.

A marcação permite filtrar cenários web e items de monitoramento web.

Configurando autenticação

A aba Authentication permite configurar as opções de autenticação do cenário. Um ponto verde ao lado do nome da aba indica que algum tipo de autenticação HTTP está habilitado.

Parâmetros de autenticação:

Parameter Description
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 Zabbix);
Digest - autenticação Digest é usada.
User Digite 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 são suportadas.
Password Digite 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 são suportadas.
SSL verify peer Marque a caixa de seleção para verificar o certificado SSL do web server.
O certificado do server será obtido automaticamente do local de autoridade certificadora (CA) do sistema. Você pode substituir o local dos arquivos CA usando o parâmetro de configuração do server 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 web server 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 do server ou proxy do Zabbix SSLCertLocation.
HOST.* macros e macros de usuário podem ser usados neste campo.
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 do server ou proxy do Zabbix SSLKeyLocation.
HOST.* macros e macros de usuário podem ser usados neste campo.
Isso define a opção cURL CURLOPT_SSLKEY.
SSL key password Senha do arquivo de chave privada SSL.
Macros de usuário podem ser usados neste campo.
Isso define a opção cURL CURLOPT_KEYPASSWD.

[1] O Zabbix suporta arquivos de certificado e de chave privada somente 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

O server do Zabbix aplica alterações nos certificados sem reinicialização.

Se você tiver o certificado do cliente e a chave privada em um único arquivo, basta especificá-lo no campo "SSL certificate file" e deixar o campo "SSL key file" em branco. O certificado e a chave ainda devem estar no formato PEM. Combinar certificado e chave é fácil:

cat client.crt client.key > client.pem

Exibição

Para visualizar os cenários web configurados para um host, vá para Monitoring → Hosts, localize o host na lista e clique no hiperlink Web na última coluna. Clique no nome do cenário para obter informações detalhadas.

Uma visão geral dos cenários web também pode ser exibida em Dashboards pelo widget de monitoramento web.

Os resultados recentes da execução do cenário web estão disponíveis na seção Monitoring → Latest data.

Monitoramento estendido

Às vezes, é necessário registrar o conteúdo da página HTML recebida.
Isso é especialmente útil se alguma etapa do cenário web falhar.
O nível de depuração 5 (trace) atende a essa finalidade.
Esse nível pode ser definido nos arquivos de configuração do server e do proxy ou usando uma opção de controle em tempo de execução (-R log_level_increase="http poller,N", em que N é o número do processo).
Os exemplos a seguir demonstram como o monitoramento estendido pode ser iniciado, desde que o nível de depuração 4 já esteja definido:

# Increase log level of all http pollers:
zabbix_server -R log_level_increase="http poller"

# Increase log level of second http poller:
zabbix_server -R log_level_increase="http poller,2"

Se o monitoramento web estendido não for necessário, ele pode ser interrompido usando a opção -R log_level_decrease.