Logs de diagnóstico do Gateway de Aplicativo

Os logs do Gateway de Aplicativo fornecem informações detalhadas sobre eventos relacionados a um recurso e suas operações. Esses logs estão disponíveis para eventos como Acesso, Atividade, Firewall e Desempenho (somente para V1). As informações granulares nos logs são úteis ao solucionar problemas ou criar um painel de análise consumindo esses dados brutos.

Os logs estão disponíveis para todos os recursos do Gateway de Aplicativo; no entanto, para consumi-los, você deve habilitar sua coleção em um local de armazenamento de sua escolha. O registro em log no Gateway de Aplicativo do Azure é habilitado pelo serviço do Azure Monitor. É recomendável usar o workspace do Log Analytics, pois você pode usar prontamente suas consultas predefinidas e definir alertas com base em condições de log específicas.

Tipos de logs de diagnóstico

Você pode usar tipos diferentes de logs no Azure para gerenciar e solucionar problemas de gateways de aplicativo. Você pode saber mais sobre esses tipos abaixo:

  • Log de atividades: você pode usar os logs de atividades do Azure (anteriormente conhecidos como logs operacionais e logs de auditoria) para exibir todas as operações que estão sendo enviadas à sua assinatura do Azure, bem como seu status. As entradas do log de atividades são coletadas por padrão e podem ser exibidas no portal do Azure.
  • Log de acesso: você pode usar esse log para exibir os padrões de acesso do Gateway de Aplicativo e analisar informações importantes. Isso inclui o IP do chamador, a URL solicitada, a latência de resposta, o código de retorno e os bytes de entrada e saída. Um log de acesso é coletado a cada 60 segundos. Esse log contém um registro por instância do Gateway de Aplicativo. A instância do Gateway de Aplicativo é identificada pela propriedade instanceId.
  • Log de desempenho: você pode usar esse log para exibir o desempenho das instâncias do Gateway de Aplicativo. Esse log captura informações de desempenho de cada instância, incluindo o total de solicitações atendidas, a vazão de dados em bytes, o total de solicitações atendidas, a contagem de solicitações com falha e a contagem de instâncias de back-end íntegras ou não íntegras. Um log de desempenho é coletado a cada 60 segundos. O log de Desempenho está disponível apenas para a SKU v1. Para a SKU v2, use as Métricas para dados de desempenho.
  • Logs de firewall: use esse log para exibir as solicitações registradas por meio do modo de detecção ou prevenção de um gateway de aplicativo configurado com o firewall do aplicativo Web. Os logs de firewall são coletados a cada 60 segundos.

Observação

Os logs estão disponíveis apenas para os recursos implantados no modelo de implantação do Azure Resource Manager. Não é possível usar logs para recursos do modelo de implantação clássico. Para obter um melhor entendimento dos dois modelos, consulte o artigo Noções básicas sobre a implantação do Resource Manager e a implantação clássica.

Locais de armazenamento

Você tem as seguintes opções para armazenar os logs em sua localização preferida.

  1. Workspace do Log Analytic: recomendado, pois permite que você use prontamente as consultas, visualizações e defina alertas com base em condições de log específicas.
  2. Conta de Armazenamento do Microsoft Azure: as contas de armazenamento são mais adequadas para os logs quando eles são armazenados por mais tempo e examinados quando necessário.
  3. Hubs de Eventos do Azure: os hubs de eventos são uma ótima opção para integração a outras ferramentas de informações de segurança e de SIEM (gerenciamento de evento) para receber alertas sobre os recursos.
  4. Integrações de parceiros do Azure Monitor

Saiba mais sobre os destinos de configurações de diagnóstico do Azure Monitor.

Habilitar o log por meio do PowerShell

O log de atividade é habilitado automaticamente para todos os recursos do Resource Manager. Você deve habilitar o log de acesso e de desempenho para começar a coletar os dados disponíveis por meio desses logs. Para habilitar o log, use as seguintes etapas:

  1. Anote a ID do recurso da conta de armazenamento, na qual os dados de log são armazenados. Esse valor tem o formato /subscriptions/<subscriptionId>/resourceGroups/<grupo de recursos name>/providers/Microsoft.Storage/storageAccounts/<nome da conta de armazenamento>. Use qualquer conta de armazenamento em sua assinatura. Use o portal do Azure para encontrar essas informações.

    Screenshot of storage account endpoints

  2. Anote a ID do Recurso do gateway de aplicativo para o qual o log está habilitado. Esse valor tem o formato /subscriptions/<subscriptionId>/resourceGroups/<grupo de recursos name>/providers/Microsoft.Network/applicationGateways/<nome do gateway de aplicativo>. Use o portal para encontrar essas informações.

    Screenshot of app gateway properties

  3. Habilite o log de diagnóstico usando o seguinte cmdlet do PowerShell:

    Set-AzDiagnosticSetting  -ResourceId /subscriptions/<subscriptionId>/resourceGroups/<resource group name>/providers/Microsoft.Network/applicationGateways/<application gateway name> -StorageAccountId /subscriptions/<subscriptionId>/resourceGroups/<resource group name>/providers/Microsoft.Storage/storageAccounts/<storage account name> -Enabled $true     
    

Dica

Os logs de atividades não exigem uma conta de armazenamento separada. O uso do armazenamento para logs de acesso e de desempenho gera encargos de serviço.

Habilitar o log por meio do portal do Azure

  1. No portal do Azure, encontre o recurso e selecione Configurações de diagnóstico.

    Para o Gateway de Aplicativo, três logs estão disponíveis:

    • Log de acesso
    • Log de desempenho
    • Log de firewall
  2. Para iniciar a coleta de dados, selecione Ativar diagnóstico.

    Turning on diagnostics

  3. A página Configurações de diagnóstico fornece as configurações dos logs de diagnóstico. Neste exemplo, o Log Analytics armazena os logs. Você também pode usar os hubs de eventos e uma conta de armazenamento para salvar os logs de diagnóstico.

    Starting the configuration process

  4. Digite um nome para as configurações, confirme e selecione Salvar.

Log de atividades

O Azure gera o log de atividades por padrão. Os logs são preservados por 90 dias no armazenamento de logs de eventos do Azure. Saiba mais sobre esses logs lendo o artigo Exibir eventos e o log de atividades.

Log de acesso

O log de acesso é gerado apenas se você o habilitou em cada instância do Gateway de Aplicativo, conforme detalhado nas etapas anteriores. Os dados são armazenados na conta de armazenamento especificada quando o log foi habilitado. Cada acesso do Gateway de Aplicativo é registrado no formato JSON, conforme exibido abaixo.

Para Gateway de Aplicativo e WAF SKU v2

Observação

Para obter informações relacionadas ao proxy TLS/TCP, acesse a referência de dados.

Valor Descrição
instanceId Instância do Gateway de Aplicativo que atendeu à solicitação.
clientIP IP do cliente imediato do Gateway de Aplicativo. Se houver outro proxy de fachada para o gateway de aplicativo, isso exibirá o IP desse proxy de fachada.
httpMethod Método HTTP usado pela solicitação.
requestUri URI da solicitação recebida.
UserAgent Agente do usuário do cabeçalho da solicitação HTTP.
httpStatus Código de status HTTP retornado ao cliente do Gateway de Aplicativo.
httpVersion Versão HTTP da solicitação.
receivedBytes Tamanho do pacote recebido, em bytes.
sentBytes Tamanho do pacote enviado, em bytes.
clientResponseTime Diferença de tempo (em segundos) entre o primeiro e o último byte que o gateway de aplicativo enviou ao cliente. Útil para medir o tempo de processamento do Gateway de Aplicativo para respostas ou clientes lentos.
timeTaken Duração do tempo (em segundos) que leva para o primeiro byte de uma solicitação de cliente ser processado e o último byte enviado na resposta ao cliente. É importante observar que o campo Time-Taken geralmente inclui a hora em que os pacotes de solicitação e resposta são transmitidos pela rede.
WAFEvaluationTime Duração do tempo (em segundos) que leva para que a solicitação seja processada pelo WAF.
WAFMode O valor pode ser Detecção ou Prevenção
transactionId Identificador exclusivo para correlacionar a solicitação recebida do cliente
sslEnabled Indica se a comunicação com os pools de back-end usou o TLS. Os valores válidos são ativado e desativado.
sslCipher Conjunto de criptografia usado para comunicação TLS (se o TLS estiver habilitado).
sslProtocol Protocolo SSL/TLS usado (se o TLS estiver habilitado).
serverRouted O servidor back-end para o qual o gateway de aplicativo roteia a solicitação.
serverStatus Código de status HTTP do servidor back-end.
serverResponseLatency Latência da resposta (em segundos) do servidor back-end.
host Endereço listado no cabeçalho de host da solicitação. Esse campo vai conter o nome de host atualizado se for reescrito usando a regeneração de cabeçalho
originalRequestUriWithArgs Esse campo contém a URL de solicitação original
requestUri Esse campo contém a URL após a operação de regeneração no Gateway de Aplicativo
upstreamSourcePort A porta de origem usada pelo Gateway de Aplicativo ao iniciar uma conexão com o destino de back-end
originalHost Esse campo contém o nome do host de solicitação original
error_info O motivo do erro 4xx e 5xx. Exibe um código de erro para uma solicitação com falha. Mais detalhes em Informações de código de erro.
contentType O tipo de conteúdo ou dados que está sendo processado ou entregue pelo gateway de aplicativo
{
    "timeStamp": "2021-10-14T22:17:11+00:00",
    "resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/{resourceGroupName}/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
    "listenerName": "HTTP-Listener",
    "ruleName": "Storage-Static-Rule",
    "backendPoolName": "StaticStorageAccount",
    "backendSettingName": "StorageStatic-HTTPS-Setting",
    "operationName": "ApplicationGatewayAccess",
    "category": "ApplicationGatewayAccessLog",
    "properties": {
        "instanceId": "appgw_2",
        "clientIP": "185.42.129.24",
        "clientPort": 45057,
        "httpMethod": "GET",
        "originalRequestUriWithArgs": "\/",
        "requestUri": "\/",
        "requestQuery": "",
        "userAgent": "Mozilla\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/52.0.2743.116 Safari\/537.36",
        "httpStatus": 200,
        "httpVersion": "HTTP\/1.1",
        "receivedBytes": 184,
        "sentBytes": 466,
        "clientResponseTime": 0,
        "timeTaken": 0.034,
        "WAFEvaluationTime": "0.000",
        "WAFMode": "Detection",
        "transactionId": "592d1649f75a8d480a3c4dc6a975309d",
        "sslEnabled": "on",
        "sslCipher": "ECDHE-RSA-AES256-GCM-SHA384",
        "sslProtocol": "TLSv1.2",
        "sslClientVerify": "NONE",
        "sslClientCertificateFingerprint": "",
        "sslClientCertificateIssuerName": "",
        "serverRouted": "52.239.221.65:443",
        "serverStatus": "200",
        "serverResponseLatency": "0.028",
        "upstreamSourcePort": "21564",
        "originalHost": "20.110.30.194",
        "host": "20.110.30.194",
        "error_info":"ERRORINFO_NO_ERROR",
        "contentType":"application/json"
    }
}

Observação

Os logs de acesso com o valor clientIP 127.0.0.1 se originam de um processo de segurança interno em execução nas instâncias do gateway de aplicativo. Você pode ignorar com segurança essas entradas de log.

Para Standard de Gateway de Aplicativo e WAF SKU (v1)

Valor Descrição
instanceId Instância do Gateway de Aplicativo que atendeu à solicitação.
clientIP IP de origem da solicitação.
clientPort Porta de origem da solicitação.
httpMethod Método HTTP usado pela solicitação.
requestUri URI da solicitação recebida.
RequestQuery Roteado pelo servidor: instância do pool de back-end à qual foi enviada a solicitação.
ID-de-LOG-do-X-AzureApplicationGateway: ID de correlação usada para a solicitação. Ela pode ser usada para solucionar problemas de tráfego nos servidores back-end.
STATUS-DO-SERVIDOR: código de resposta HTTP que o Gateway de Aplicativo recebeu do back-end.
UserAgent Agente do usuário do cabeçalho da solicitação HTTP.
httpStatus Código de status HTTP retornado ao cliente do Gateway de Aplicativo.
httpVersion Versão HTTP da solicitação.
receivedBytes Tamanho do pacote recebido, em bytes.
sentBytes Tamanho do pacote enviado, em bytes.
timeTaken Duração (em milissegundos) necessária para que uma solicitação seja processada e sua resposta seja enviada. Isso é calculado como o intervalo a partir da hora em que o Gateway de Aplicativo recebe o primeiro byte de uma solicitação HTTP até a hora em que a operação de envio de resposta é concluída. É importante observar que o campo Time-Taken geralmente inclui a hora em que os pacotes de solicitação e resposta são transmitidos pela rede.
sslEnabled Indica se a comunicação com os pools de back-end usou o TLS/SSL. Os valores válidos são ativado e desativado.
host O nome do host para o qual a solicitação foi enviada para o servidor de back-end. Se o nome do host de back-end estiver sendo substituído, esse nome vai refletir isso.
originalHost O nome do host no qual a solicitação foi recebida pelo Gateway de Aplicativo do cliente.
{
    "resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/PEERINGTEST/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
    "operationName": "ApplicationGatewayAccess",
    "time": "2017-04-26T19:27:38Z",
    "category": "ApplicationGatewayAccessLog",
    "properties": {
        "instanceId": "ApplicationGatewayRole_IN_0",
        "clientIP": "191.96.249.97",
        "clientPort": 46886,
        "httpMethod": "GET",
        "requestUri": "/phpmyadmin/scripts/setup.php",
        "requestQuery": "X-AzureApplicationGateway-CACHE-HIT=0&SERVER-ROUTED=10.4.0.4&X-AzureApplicationGateway-LOG-ID=874f1f0f-6807-41c9-b7bc-f3cfa74aa0b1&SERVER-STATUS=404",
        "userAgent": "-",
        "httpStatus": 404,
        "httpVersion": "HTTP/1.0",
        "receivedBytes": 65,
        "sentBytes": 553,
        "timeTaken": 205,
        "sslEnabled": "off",
        "host": "www.contoso.com",
        "originalHost": "www.contoso.com"
    }
}

Informações de código de erro

Se o gateway de aplicativo não puder concluir a solicitação, ele armazenará um dos seguintes códigos de motivo no campo error_info do log de acesso.

Erros 4XX (Os códigos de erro 4xx indicam que houve um problema com a solicitação do cliente e o Gateway de Aplicativo não pode cumpri-lo.)
ERRORINFO_INVALID_METHOD O cliente enviou uma solicitação que não é compatível com RFC. Possíveis motivos: cliente usando método HTTP sem suporte pelo servidor, método com ortografia incorreta, versão incompatível do protocolo HTTP etc.
ERRORINFO_INVALID_REQUEST O servidor não pode atender à solicitação devido à sintaxe incorreta.
ERRORINFO_INVALID_VERSION O gateway de aplicativo recebeu uma solicitação com uma versão HTTP inválida ou sem suporte.
ERRORINFO_INVALID_09_METHOD A solicitação enviada pelo cliente com o Protocolo HTTP versão 0.9.
ERRORINFO_INVALID_HOST O valor fornecido no cabeçalho "Host" está ausente, formatado incorretamente ou não corresponde ao valor de host esperado (quando não há ouvinte Básico e nenhum dos nomes de host de ouvintes multissite corresponde ao host).
ERRORINFO_INVALID_CONTENT_LENGTH O comprimento do conteúdo especificado pelo cliente no cabeçalho content-Length não corresponde ao comprimento real do conteúdo na solicitação.
ERRORINFO_INVALID_METHOD_TRACE O cliente enviou o método HTTP TRACE que não tem suporte no gateway de aplicativo.
ERRORINFO_CLIENT_CLOSED_REQUEST O cliente fechou a conexão com o gateway de aplicativo antes do período de tempo limite ocioso ter decorrido. Verifique se o período de tempo limite do cliente é maior que o período de tempo limite ocioso para o gateway de aplicativo.
ERRORINFO_REQUEST_URI_INVALID Indica um problema com o URI (Uniform Resource Identifier) fornecido na solicitação do cliente.
ERRORINFO_HTTP_NO_HOST_HEADER O cliente enviou uma solicitação sem o cabeçalho de host.
ERRORINFO_HTTP_TO_HTTPS_PORT O cliente enviou uma solicitação HTTP sem formatação para uma porta HTTPS.
ERRORINFO_HTTPS_NO_CERT Indica que o cliente não está enviando um certificado TLS válido e configurado corretamente durante a autenticação TLS mútua.
Erros 5XX Descrição
ERRORINFO_UPSTREAM_NO_LIVE O gateway de aplicativo não consegue encontrar nenhum servidor de back-end ativo ou acessível para lidar com solicitações de entrada
ERRORINFO_UPSTREAM_CLOSED_CONNECTION O servidor de back-end fechou a conexão inesperadamente ou antes da solicitação ser totalmente processada. Isso pode acontecer devido ao servidor de back-end atingir seus limites, falhar etc.
ERRORINFO_UPSTREAM_TIMED_OUT A conexão TCP estabelecida com o servidor foi fechada, pois a conexão demorou mais do que o valor de tempo limite configurado.

Log de desempenho

O log de desempenho é gerado apenas se você o habilitou em cada instância do Gateway de Aplicativo, conforme detalhado nas etapas anteriores. Os dados são armazenados na conta de armazenamento especificada quando o log foi habilitado. Os dados do log de desempenho são gerados em intervalos de 1 minuto. Ele está disponível apenas para a SKU v1. Para a SKU v2, use as Métricas para dados de desempenho. Os seguintes dados são registrados em log:

Valor Descrição
instanceId Instância do Gateway de Aplicativo para a qual os dados de desempenho estão sendo gerados. Para um gateway de aplicativo de várias instâncias, há uma linha por instância.
healthyHostCount Número de hosts íntegros no pool de back-end.
unHealthyHostCount Número de hosts não íntegros no pool de back-end.
requestCount Número de solicitações atendidas.
latência Latência média (em milissegundos) de solicitações da instância para o back-end que atende às solicitações.
failedRequestCount Número de solicitações com falha.
throughput Vazão de dados média desde o último log, medida em bytes por segundo.
{
    "resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/{resourceGroupName}/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
    "operationName": "ApplicationGatewayPerformance",
    "time": "2016-04-09T00:00:00Z",
    "category": "ApplicationGatewayPerformanceLog",
    "properties":
    {
        "instanceId":"ApplicationGatewayRole_IN_1",
        "healthyHostCount":"4",
        "unHealthyHostCount":"0",
        "requestCount":"185",
        "latency":"0",
        "failedRequestCount":"0",
        "throughput":"119427"
    }
}

Observação

A latência é calculada a partir da hora em que o primeiro byte da solicitação HTTP é recebido até a hora em que o último byte da resposta HTTP é enviado. É a soma do tempo de processamento do Gateway de Aplicativo e do custo de rede para o back-end, mais o tempo que o back-end leva para processar a solicitação.

Log de firewall

O log de firewall é gerado apenas se você o habilitou em cada gateway de aplicativo, conforme detalhado nas etapas anteriores. Esse log também exige a configuração de um firewall de aplicativo Web em um gateway de aplicativo. Os dados são armazenados na conta de armazenamento especificada quando o log foi habilitado. Os seguintes dados são registrados em log:

Valor Descrição
instanceId Instância do Gateway de Aplicativo para a qual os dados de firewall estão sendo gerados. Para um gateway de aplicativo de várias instâncias, há uma linha por instância.
clientIp IP de origem da solicitação.
clientPort Porta de origem da solicitação.
requestUri URL da solicitação recebida.
ruleSetType Tipo de conjunto de regras. O valor disponível é OWASP.
ruleSetVersion Versão utilizada do conjunto de regras. Os valores disponíveis são 2.2.9 e 3.0.
ruleId ID da Regra do evento de gatilho.
message Mensagem amigável para o evento de gatilho. Mais detalhes são fornecidos na seção de detalhes.
ação Ação executada na solicitação. Os valores disponíveis são Bloqueados e Permitidos (para regras personalizadas), Correspondidos (quando uma regra corresponde a uma parte da solicitação) e Detectados e Bloqueados (ambos para regras obrigatórias, dependendo se o WAF está no modo de detecção ou prevenção).
site Site para o qual o log foi gerado. No momento, somente Global é listado porque as regras são globais.
detalhes Detalhes do evento de gatilho.
details.message Descrição da regra.
details.data Dados específicos encontrados na solicitação que corresponderam à regra.
details.file Arquivo de configuração que continha a regra.
details.line Número de linha no arquivo de configuração que disparou o evento.
hostname Nome do host ou endereço IP do Gateway de Aplicativo.
transactionId ID exclusiva para uma determinada transação que ajuda a agrupar as violações de regra que ocorrem na mesma solicitação.
{
    "timeStamp": "2021-10-14T22:17:11+00:00",
    "resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/{resourceGroupName}/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
    "operationName": "ApplicationGatewayFirewall",
    "category": "ApplicationGatewayFirewallLog",
    "properties": {
        "instanceId": "appgw_2",
        "clientIp": "185.42.129.24",
        "clientPort": "",
        "requestUri": "\/",
        "ruleSetType": "OWASP_CRS",
        "ruleSetVersion": "3.0.0",
        "ruleId": "920350",
        "message": "Host header is a numeric IP address",
        "action": "Matched",
        "site": "Global",
        "details": {
            "message": "Warning. Pattern match \\\"^[\\\\d.:]+$\\\" at REQUEST_HEADERS:Host .... ",
            "data": "20.110.30.194:80",
            "file": "rules\/REQUEST-920-PROTOCOL-ENFORCEMENT.conf",
            "line": "791"
        },
        "hostname": "20.110.30.194:80",
        "transactionId": "592d1649f75a8d480a3c4dc6a975309d",
        "policyId": "default",
        "policyScope": "Global",
        "policyScopeName": "Global"
    }
}

Exibir e analisar o log de atividades

Você pode exibir e analisar os dados do log de atividades usando um dos seguintes métodos:

  • Ferramentas do Azure: recupere informações do log de atividades por meio do Azure PowerShell, da CLI do Azure, da API REST do Azure ou do portal do Azure. As instruções passo a passo para cada método são detalhadas no artigo Activity operations with Resource Manager (Operações de atividade com o Resource Manager).
  • Power BI: se ainda não tiver uma conta do Power BI, experimente uma gratuitamente. Você pode analisar seus dados usando os aplicativos de modelo de Power BI.

Exibir e analisar os logs de acesso, de desempenho e de firewall

Os logs do Azure Monitor podem coletar os arquivos de log de contadores e eventos de sua conta de Armazenamento de blobs. Ele inclui visualizações e funcionalidades de pesquisa avançadas para analisar os logs.

Você também pode se conectar à sua conta de armazenamento e recuperar as entradas de log JSON para logs de desempenho e acesso. Depois de baixar os arquivos JSON, você pode convertê-los em CSV e exibi-los no Excel, no Power BI ou em qualquer outra ferramenta de visualização de dados.

Dica

Se estiver familiarizado com o Visual Studio e os conceitos básicos de alteração de valores de constantes e variáveis em C#, você poderá usar as ferramentas de conversor de log disponíveis no GitHub.

Analisar logs de acesso por meio do GoAccess

Publicamos um modelo do Resource Manager que instala e executa o popular analisador de logs GoAccess para logs de acesso do Gateway de Aplicativo. O GoAccess fornece valiosas estatísticas de tráfego HTTP, tais como visitantes exclusivos, arquivos solicitados, hosts, sistemas operacionais, navegadores, códigos de status HTTP e muito mais. Para obter mais detalhes, consulte o arquivo Leiame na pasta de modelo do Resource Manager no GitHub.

Próximas etapas