Olá pessoal,

 

Espero que estejam bem.

 

Há algum tempo atrás, um antigo cliente me ligou informando que havia migrado seus servidores Linux de RHEL 6 para RHEL 7. Que haviam feito uma instalação nova de OS.

 

Por causa dessa migração, o agente do OEM não estava mais iniciando automaticamente. Isso se deu porque como o agente não foi reinstalado (e nem havia necessidade), o novo servidor não possuía os arquivos de inicialização e/ou configuração do agente no diretório /etc.

 

Os arquivos são:
  • /etc/oragchomelist
  • /etc/rc.d/init.d/gcstartup
  • /etc/rc.d/init.d/lockgcstartup
  • /etc/rc.d/init.d/unlockgcstartup

 

Também há os seguintes links simbólicos que apontam para os arquivos acima mencionados:
  • /etc/rc.d/rc0.d/K19lockgcstartup -> ../init.d/lockgcstartup
  • /etc/rc.d/rc0.d/K19unlockgcstartup -> ../init.d/unlockgcstartup
  • /etc/rc.d/rc0.d/K19gcstartup -> ../init.d/gcstartup
  • /etc/rc.d/rc1.d/K19lockgcstartup -> ../init.d/lockgcstartup
  • /etc/rc.d/rc1.d/K19unlockgcstartup -> ../init.d/unlockgcstartup
  • /etc/rc.d/rc1.d/K19gcstartup -> ../init.d/gcstartup
  • /etc/rc.d/rc2.d/S98gcstartup -> ../init.d/gcstartup
  • /etc/rc.d/rc2.d/S98lockgcstartup -> ../init.d/lockgcstartup
  • /etc/rc.d/rc2.d/K19unlockgcstartup -> ../init.d/unlockgcstartup
  • /etc/rc.d/rc2.d/K19gcstartup -> ../init.d/gcstartup
  • /etc/rc.d/rc3.d/S98gcstartup -> ../init.d/gcstartup
  • /etc/rc.d/rc3.d/S98lockgcstartup -> ../init.d/lockgcstartup
  • /etc/rc.d/rc3.d/K19unlockgcstartup -> ../init.d/unlockgcstartup
  • /etc/rc.d/rc3.d/K19gcstartup -> ../init.d/gcstartup
  • /etc/rc.d/rc4.d/S98lockgcstartup -> ../init.d/lockgcstartup
  • /etc/rc.d/rc4.d/S98unlockgcstartup -> ../init.d/unlockgcstartup
  • /etc/rc.d/rc4.d/S98gcstartup -> ../init.d/gcstartup
  • /etc/rc.d/rc5.d/S98lockgcstartup -> ../init.d/lockgcstartup
  • /etc/rc.d/rc5.d/K19unlockgcstartup -> ../init.d/unlockgcstartup
  • /etc/rc.d/rc5.d/K19gcstartup -> ../init.d/gcstartup
  • /etc/rc.d/rc5.d/S98gcstartup -> ../init.d/gcstartup
  • /etc/rc.d/rc6.d/K19lockgcstartup -> ../init.d/lockgcstartup
  • /etc/rc.d/rc6.d/K19unlockgcstartup -> ../init.d/unlockgcstartup
  • /etc/rc.d/rc6.d/K19gcstartup -> ../init.d/gcstartup

 

Criarei um outro blog post em breve explicando como corrigir este problema, já que o objetivo desse blog post é criar um shell script que monitora se o agente está rodando em health state, e, caso não esteja em execução ou caso tenha algum problema, um e-mail será enviado.

 

Além disso, toda execução do script fará o append num log de execução dessa monitoria.

 

Basicamente o script fará algumas verificações:

 

  • Quantos (count) processos do agente estão rodando.
  • Qual é o status do agente.

 

Após isso, teremos um IF que verificará duas condições:

 

  • Se o count é maior que zero (aqui queremos que o count seja 1);
  • Se o status do agente é Agent is Running and Ready.

 

Se as duas condições forem verdadeiras, vai simplesmente adicionar uma linha no log de monitoria como o exemplo abaixo, no formato:

 

YYYYMMDD-HH24MI:OK

 

Se uma das duas condições (ou todas) não forem verdadeiras, significa que:

 

  • A contagem é zero;
  • Mesmo que a contagem seja 1, o agente pode estar rodando com algum problema e não é listado como Running and Ready.

 

Se isso acontecer, um email será enviado informando que o agente está down, além de adicionar uma linha no log de monitoria como o exemplo abaixo:

 

YYYYMMDD-HH24MI:NOK

 

Por fim, por favor, substitua o valor da variável EMAIL_ID de your_email@your_domain.com para o seu endereço de e-mail ou de alguma lista de distribuição do seu time.

 

OK, vamos ao script!

 

#!/bin/bash

###################################################
#
# Script to check if OEM agent is running
#
###################################################

export ORACLE_HOME=/oracle/PE1/OEM_13c_Agent/agent_13.4.0.0.0
export AGENT_INSTANCE_HOME=/oracle/PE1/OEM_13c_Agent/agent_inst
export AGENT_BASE_DIR=/oracle/PE1/OEM_13c_Agent
export PATH=${AGENT_INSTANCE_HOME}/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/oracle/PE1:.:/opt/VRTSvcs/bin
export NAME_PATTERN=OEM_Agent_Check
export WORK_DIR=/oracle/PE1/SCRIPT/${NAME_PATTERN}
export TZ=America/Chicago
export DATE_EXEC=$(date +"%Y%m%d-%H%M")
export EMAIL_ID=your_email@your_domain.com
AGENT_PROCESS_COUNT=$(ps -ef |grep ${AGENT_INSTANCE_HOME} |grep -v grep | wc -l)
AGENT_STATUS=$(${AGENT_INSTANCE_HOME}/bin/emctl status agent |grep -i running)
if [ ${AGENT_PROCESS_COUNT} -gt 0 ] && [ "${AGENT_STATUS}" == "Agent is Running and Ready" ]; then
echo ${DATE_EXEC}:"OK" >> ${WORK_DIR}/.execution_history.log
exit
else
mail-s "PE1 OEM Agent is down - ${DATE_EXEC} CST" ${EMAIL_ID} < /dev/null
echo ${DATE_EXEC}:"NOK" >> ${WORK_DIR}/.execution_history.log
fi

 

Espero que seja útil.

 

Um abraço,

 

Vinicius