Filtrando Entradas de Log
Um dos pontos fortes do AWK é sua capacidade de filtrar dados com base em condições. Vamos usar esse recurso para encontrar todas as requisições POST em nosso arquivo de log, pois elas podem ser mais sensíveis à segurança do que as requisições GET.
Execute o seguinte comando:
awk '$4 == "POST" {print $0}' server_logs.txt
Vamos detalhar a sintaxe deste comando para entender como funciona a filtragem no AWK:
-
$4 == "POST" - Este é um padrão ou condição que o AWK avalia para cada linha:
$4 refere-se ao quarto campo na linha atual (em nosso arquivo de log, este é o método HTTP)
== é o operador de igualdade que verifica se dois valores são iguais
"POST" é a string com a qual estamos comparando
-
{print $0} - Esta é a ação que o AWK executa quando a condição é verdadeira:
- As chaves
{} envolvem a ação
print é o comando para exibir texto
$0 representa a linha atual inteira (todos os campos)
A estrutura do comando segue o padrão AWK: condição {ação}. O AWK lê cada linha e, se a condição for avaliada como verdadeira, ele executa a ação. Se nenhuma condição for especificada (como em nossos exemplos anteriores), a ação é executada para cada linha.
Você deverá ver uma saída semelhante a esta:
2023-08-01 08:17:30 192.168.1.102 POST /login.php 302
2023-08-01 09:23:45 192.168.1.110 POST /submit_form.php 200
2023-08-01 10:45:12 192.168.1.115 POST /upload.php 500
Agora, vamos encontrar todas as requisições que resultaram em um status 404 (Não Encontrado):
awk '$6 == "404" {print $1, $2, $5}' server_logs.txt
Este comando segue o mesmo padrão, mas com valores diferentes:
- A condição
$6 == "404" verifica se o sexto campo (código de status) é igual a 404
- A ação
{print $1, $2, $5} imprime apenas campos específicos:
$1 - Primeiro campo (data)
$2 - Segundo campo (hora)
$5 - Quinto campo (recurso solicitado)
Essa impressão seletiva permite que você se concentre apenas nas informações necessárias.
Saída:
2023-08-01 08:18:12 /products.html
2023-08-01 09:30:18 /nonexistent.html
2023-08-01 11:05:30 /missing_page.html
Você pode combinar várias condições usando operadores lógicos:
&& para E (ambas as condições devem ser verdadeiras)
|| para OU (pelo menos uma condição deve ser verdadeira)
! para NÃO (nega uma condição)
Por exemplo, para encontrar todas as requisições POST que resultaram em erro (código de status >= 400):
awk '$4 == "POST" && $6 >= 400 {print $0}' server_logs.txt
Esses filtros podem ajudá-lo a identificar rapidamente problemas potenciais ou atividades suspeitas nos logs do seu servidor.