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

1 comment
Join the conversationJulião - 07/04/2010
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ç