grep, sed, cut e cat: Script parser para log do Oracle Listener


O que o script faz?

Faz um parse no arquivo de log do Oracle Listener e extrai o HOST do usuário, o USER e o HOST e PORTA que o usuário está conectando.

#!/bin/bash
#
###############################################################################
#
# Descrição: Fazer o parse do LOG e extrair apenas o HOST e USER, também
#            HOST e PORT
# Autor: Daniel K Lima
# Data : 10/03/2010
# Uso  : ./parser.sh arquivo.log
#
###############################################################################

# Parâmetros
LOG=${1}
SED=$(which sed)
CUT=$(which cut)
GREP=$(which grep)
CAT=$(which cat)

# Arquivo temporário
TMP="/tmp/parser.tmp"

# Validação
if [ -z ${LOG} ]; then
        echo "Arquivo não existe ou não informado."
        echo "Utilize o formato ./parser.sh arquivo.log"
        exit 1
fi      

# Faz um grep no arquivo do LOG e só processa as linhas com CONNECT e
# substituir os ( ) por ,
$(${GREP} "CONNECT" ${LOG} | ${SED} -e 's/)/,/g' -e 's/(/,/g' > ${TMP})

# Processar cada linha que o filtro do GREP passou
${CAT} ${TMP} | while read line
do
	# Extrair do campo os valores e jogar pra uma variável própria
	USERHOST=$(echo ${line} | ${CUT} -d',' -f 10 | ${CUT} -d'=' -f 2)
	USERNAME=$(echo ${line} | ${CUT} -d',' -f 12 | ${CUT} -d'=' -f 2)
	SERVERHOST=$(echo ${line} | ${CUT} -d',' -f 19 | ${CUT} -d'=' -f 2)
	SERVERPORT=$(echo ${line} | ${CUT} -d',' -f 21 | ${CUT} -d'=' -f 2)

	# Imprimir os resultados
	echo "   HOST Usuário: ${USERHOST} "
	echo "       Username: ${USERNAME}"
	echo "  HOST Servidor: ${SERVERHOST}"
	echo "          Porta: ${SERVERPORT}"
	echo " "
done

Para customizar o resultado, é só editar as linhas 44 a 48 para adequar a sua necessidade.

Exemplo do arquivo do Log

Arquivo: connect.log

04-MAR-2010 19:09:18 * ,CONNECT_DATA=,SERVER=DEDICATED,,SERVICE_NAME=cmt,,CID=,PROGRAM=C:\Arquivos de programas\Quest Software\Toad for Oracle\TOAD.exe,,HOST=APBMZ-001062,,USER=Dario,,, * ,ADDRESS=,PROTOCOL=tcp,,HOST=10.100.5.2,,PORT=2898,, * establish * cmt * 0
04-MAR-2010 19:09:22 * ,CONNECT_DATA=,SERVER=DEDICATED,,SERVICE_NAME=cmt,,CID=,PROGRAM=C:\Arquivos de programas\Quest Software\Toad for Oracle\TOAD.exe,,HOST=APBMZ-001062,,USER=Dario,,, * ,ADDRESS=,PROTOCOL=tcp,,HOST=10.100.5.2,,PORT=2901,, * establish * cmt * 0
05-MAR-2010 12:01:40 * ,CONNECT_DATA=,SERVER=DEDICATED,,SERVICE_NAME=cmt,,CID=,PROGRAM=C:\TFSRoot\APB.Mercury.Fork.CMT\Main\Source\APB.Mercury\Mercury.WindowsService\WindowsService.IntgCmtBv\APB.Mercury.WindowsService.IntgCmtBv\bin\Debug\APB.Mercury.WindowsService.IntgCmtBv.vshost.exe,,HOST=ASD001,,USER=Igor,,, * ,ADDRESS=,PROTOCOL=tcp,,HOST=10.100.5.2,,PORT=53725,, * establish * cmt * 0
05-MAR-2010 13:01:12 * ,CONNECT_DATA=,SERVER=dedicated,,SERVICE_NAME=cmt,,CID=,PROGRAM=C:\Program Files\Quest Software\Toad for Oracle\toad.exe,,HOST=APB-RJZ2BM87D3X,,USER=jcb,,, * ,ADDRESS=,PROTOCOL=tcp,,HOST=10.100.5.2,,PORT=1421,, * establish * cmt * 0
05-MAR-2010 13:01:17 * ,CONNECT_DATA=,SERVER=dedicated,,SERVICE_NAME=cmt,,CID=,PROGRAM=C:\Program Files\Quest Software\Toad for Oracle\toad.exe,,HOST=APB-RJZ2BM87D3X,,USER=jcb,,, * ,ADDRESS=,PROTOCOL=tcp,,HOST=10.100.5.2,,PORT=1422,, * establish * cmt * 0
05-MAR-2010 13:22:05 * ,CONNECT_DATA=,SERVER=dedicated,,SERVICE_NAME=cmt,,CID=,PROGRAM=C:\Program Files\Quest Software\Toad for Oracle\toad.exe,,HOST=APB-RJZ2BM87D3X,,USER=jcb,,, * ,ADDRESS=,PROTOCOL=tcp,,HOST=10.100.5.2,,PORT=2701,, * establish * cmt * 0

Exemplo do resultado do parse feito pelo script

Resultado:

   HOST Usuário: APBMZ-001062
       Username: Dario
  HOST Servidor: 10.100.5.2
          Porta: 2898

   HOST Usuário: APBMZ-001062
       Username: Dario
  HOST Servidor: 10.100.5.2
          Porta: 2901

   HOST Usuário: ASD001
       Username: Igor
  HOST Servidor: 10.100.5.2
          Porta: 53725

   HOST Usuário: APB-RJZ2BM87D3X
       Username: jcb
  HOST Servidor: 10.100.5.2
          Porta: 1421

   HOST Usuário: APB-RJZ2BM87D3X
       Username: jcb
  HOST Servidor: 10.100.5.2
          Porta: 1422

   HOST Usuário: APB-RJZ2BM87D3X
       Username: jcb
  HOST Servidor: 10.100.5.2
          Porta: 2701
Share this post

1 comment

Join the conversation
  • Julião BRAZIL - 07/04/2010 reply

    Daniel,
    muito boa e prática sua colaboração com script de filtrar as informações do arquivo de log.

    Agradeço por compartilhar informações úteis.
    Abç

Join the conversation