Πώς μπορούμε να λαμβάνουμε email κάθε φορά που εμφανίζεται ένα error στο Alert log της βάσης δεδομένων της Oracle

Πώς μπορούμε να λαμβάνουμε email κάθε φορά που εμφανίζεται ένα error στο Alert log της βάσης δεδομένων της Oracle
Πώς μπορούμε να λαμβάνουμε email κάθε φορά που εμφανίζεται ένα error στο Alert log της βάσης δεδομένων της Oracle

Σε ένα σύστημα βασισμένο σε βάση δεδομένων της Oracle, ότι error συμβαίνει καταγράφεται σε ένα log αρχείο το οποίο ονομάζεται Alert Log. Είναι πολύ χρήσιμο να ενημερωνόμαστε άμεσα όταν συμβαίνει κάτι και ο πιο άμεσος τρόπος δεν είναι άλλος από την αποστολή email.

Σε αυτό το άρθρο θα δούμε με ποιο τρόπο μπορούμε να ρυθμίσουμε έναν Linux server (Oracle Linux βασισμένο σε RHEL συγκεκριμένα) ώστε να πραγματοποιεί αυτή τη δουλεία.

Δημιουργία SMTP relay με gmail της Google

Αν έχουμε δικό μας relay στον exchange server με ρυθμισμένο το smtp που θα στέλνει τα emails, αυτό το βήμα δεν το χρειαζόμαστε.

Θα δούμε τώρα όμως τι κάνουμε σε περίπτωση που θέλουμε να στέλνουμε τα emails μέσω Gmail.

Για αρχή θα πρέπει να συνδεθούμε στο gmail account security.

Εκεί θα πρέπει να ενεργοποιήσουμε το two factor authentication και έπειτα να δημιουργήσουμε application password.

Πώς μπορούμε να λαμβάνουμε email κάθε φορά που εμφανίζεται ένα error στο Alert log της βάσης δεδομένων της Oracle

Αφού πάρουμε τον κωδικό από το gmail, πάμε στον server μας και προσθέτουμε στο mail configuration το email μας μαζί με τον κωδικό που πήραμε:

[oracle@dp-gr ~]$ sudo vi /etc/mail.rc 
account gmail {
    set smtp-use-starttls
    set ssl-verify=ignore
    set smtp-auth=login
    set smtp=smtp://smtp.gmail.com:587
    set from="info@dataplatform.gr"
    set smtp-auth-user=dataplatform.gr@gmail.com
    set smtp-auth-password="edw_vazoume_to_app_password"
    set ssl-verify=ignore
    set nss-config-dir=/etc/pki/nssdb
}

Είμαστε έτοιμοι να κάνουμε δοκιμή ότι μπορούμε να στείλουμε email:

[oracle@dp-gr ~]$ echo "Test" | /usr/bin/mail -A gmail -s "dokimastiko" ToEmailMas@outlook.com

Πώς θα βρίσκουμε τα Alerts που έχουν συμβεί τα τελευταία 5 λεπτά

Φτιάχνουμε το παρακάτω script που θα μας πίανει ότι error έχει εμφανιστεί στο Alert Log ή διαδικασία Shutdown:

[oracle@dp-gr ~]$ vi check_alertlog.sql
set echo off
set pagesize 0
set feedback off

select 
     'TIMESTAMP: '|| originating_timestamp
      || ' ---- INSTANCE_NAME: ' || (select instance_name from v$instance)
      || ' ---- HOST_NAME: ' || host_id
      ||' ---- MESSAGE: ' || message_text
from v$diag_alert_ext
where 1=1
and CAST(SUBSTR(originating_timestamp,1,LENGTH(originating_timestamp)-7) AS TIMESTAMP) > CAST (sysdate-interval '5' minute AS TIMESTAMP)
and 
(message_text like '%ORA-%' OR message_text like '%Shutting down instance%' or message_text like '%archival error%' or message_text like '%Cannot allocate log, archival required%')
and message_text not like 'ORA-00060%' --ignore deadlocks
and message_text not like 'ORA-01555%' --ignore snapshot too old
and message_text not like '%ORA-1013%' --operation canceled by user
and message_text not like '%ORA-3136%' --inbound connection timeout
and message_text not like '%ORA-235 %' --unlocked control file
and message_text not like '%Result = ORA-0%'
and message_text not like '%Result = ORA-31%'
and message_text not like '%Result = ORA-30%'
and message_text not like '%ORA-609%' --process abort
;


quit;
/

Στο originating_timestamp ορίζουμε ότι θέλουμε μόνο τα τελευταία 5 λεπτά.

Φυσικά έχουμε τη δυνατότητα να περιορίσουμε σε συγκεκρίμενα μόνο errors ή και να αλλάξουμε το χρονικό διάστημα αλλάζοντας τις παραμέτρους στο where του query.

*Στο τέλος του άρθρου σας αναφέρω μια συστημική procedure με την οποία μπορούμε να δημιουργήσουμε ψεύτικα errors στο Alert Log για δοκιμή.

Πώς στέλνουμε με email τα Alerts αν υπάρχουν

Τώρα θα δημιουργήσουμε ένα εκτελέσιμο το οποίο θα τρέχει το παραπάνω query εξάγοντας τα αποτελέσματα σε ένα text file. Σε περίπτωση που το αρχείο είναι πάνω από 3 γραμμές τότε θα στείλει email με τον τίτλο “Oracle DB Alert ORCL” στα email που έχουμε ορίσει έχοντας ως κείμενο τα Alerts.

Ο λόγος που η διαδικασία ολοκληρώνεται μόνο αν το αρχείο περιέχει πάνω από 3 γραμμές είναι ώστε να μην στέλνει email στη περίπτωση που δεν υπάρχει κάποιο alert και το text file είναι κενό.

Οπότε δημιουργούμε το εκτελέσιμο με τον παρακάτω κώδικα:

[oracle@dp-gr ~]$ vi check_alert_live.sh
#!/bin/bash
sqlplus -S "/as sysdba" @/home/oracle/check_alertlog.sql > /home/oracle/alerts_formail.txt
cnt=$(wc -l </home/oracle/alerts_formail.txt)
echo $cnt
if [ $cnt -ge "4" ]
then
        /usr/bin/mail -A gmail -s "Oracle DB Alert ORCL" \
                -r info@dataplatform.gr \
                patatakia@outlook.com, dokimi@outlook.com \
         < /home/oracle/alerts_formail.txt
fi

Μπορούμε εναλλακτικά να το τρέχουμε απομακρυσμένα σε άλλο μηχάνημα με τον χρήστη SYS μέσω ezconnect:

#!/bin/bash
sqlplus -S "sys/Kwdikos@hostname:1521/ORCL as sysdba" @/home/oracle/check_alertlog.sql > /home/oracle/alerts_formail.txt
cnt=$(wc -l </home/oracle/alerts_formail.txt)
echo $cnt
if [ $cnt -ge "4" ]
then
        /usr/bin/mail -A gmail -s "Oracle DB Alert ORCL" \
                -r info@dataplatform.gr \
                patatakia@outlook.com, dokimi@outlook.com \
         < /home/oracle/alerts_formail.txt
fi

Δεν ξεχνάμε να έχουμε δώσει δικαίωμα execute πριν την εκτέλεση του:

[oracle@dp-gr ~]$ chmod +x check_alert_live.sh
[oracle@dp-gr ~]$ ./check_alert_live.sh

Πώς το κάνουμε schedule να γίνεται έλεγχος κάθε 5 λεπτά για Alerts

Αφού και το εκτελέσιμό μας είναι έτοιμο μπορούμε να προσθέσουμε μια γραμμή στο crontab στην οποία θα ορίσουμε να τρέχει και αυτή κάθε 5 λεπτά:

[oracle@dp-gr ~]$ crontab -e
#crontab
0,5,10,15,20,25,30,35,40,45,50,55 * * * * . ~/.bash_profile && (/home/oracle/check_alert_live.sh  >> /dev/null 2>&1)

Το αποτέλεσμα

Τώρα θα δούμε ότι όποτε εμφανίζεται κάποιο error θα μας έρχεται email.

Για να το δοκιμάσουμε μπορούμε να συνδεθούμε στη βάση και τρέξουμε το command το οποίο θα δημιουργήσει ένα ψεύτικο error στο Alert Log:

exec dbms_system.ksdwrt(2,'ORA-00600: This is a test error message for monitoring and can be ignored.');

Και μετά από λίγο ήρθε το παρακάτω email:

Πώς μπορούμε να λαμβάνουμε email κάθε φορά που εμφανίζεται ένα error στο Alert log της βάσης δεδομένων της Oracle
Μοιράσου το

Αφήστε μία απάντηση