26 Şubat 2009

Nagios e-posta bildirimleri

Kurduğum ve yönettiğim linux proxy&firewall'ı kullanan kurumdan telefon geldi. İnternet susmuş ama MSN'de sorun yokmuş. Daha önce de başıma geldiğinden disklerin dolduğunu tahmin ettim ve temizlemek için sisteme her zamanki gibi ssh ile bağlandım. Evet, tahmin ettiğim gibi disk bölümlerinin biri %100 görünüyordu. Aslında kurduğum sistemlere Nagios'u mutlaka kurarım ve disklerin %90 sınırını aştığında linux sistemimin e-posta ile bildirim yapmasını sağlarım. Bir taraftan diskleri temizlerken nagios loglarına ve e-postalarıma baktım. Nagios aksatmadan (her zamanki gibi) işini yapmış ve 5 gün önce e-posta ile beni uyarmış. E-posta kalabalığında bu bildirimi kaçırmışım. Bunu kaçırmamın sebebini biliyorum; benzer e-postalar farklı sistenlerden de geliyor ve bildirim e-postalarının içeriğinde hangi sistemden geldiğini belirten bir ifade olmadığı için karışıklığa sebep olabiliyor. Bunu nagios ayarlarını fazla kurcalamadan her kurulum yaptığım kurum/şirket için yeni bir gmail hesabı açarak hallediyordum aslında. E-postalar bu hesaplardan geldiği için hangi sistemde sorun var kolay anlaşılabiliyordu. Son zamanlarda 1-2 sistemi tek e-posta hesabına göre ayarlayınca karışıklık oldu böyle. Bende nagios ayarlarına bir bakayım dedim. E-posta içeriğine, hangi sistemden geldiğinin bilgisini koyarsam karışıklık çözülür böylece. Farklı yolu vardır mutlaka ama ben en kolay şu şekilde çözdüm:

/etc/nagios2/commands.cfg

dosyası, e-posta bildirimlerinin komutları olan dosya. İçeriğindeki ilgili bölüm şöyle:

--------------------------------------------------------------------
# 'host-notify-by-email' command definition
define command{                           
        command_name    host-notify-by-email
        command_line    /usr/bin/printf "%b" "***** Nagios*****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTALIAS$\nState: $HOSTSTATE$ for $HOSTDURATION$\nAddress: $HOSTADDRESS$\nInfo:\n\n$HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n\nACK by: $HOSTACKAUTHOR$\nComment: $HOSTACKCOMMENT$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ alert $NOTIFICATIONNUMBER$ - $HOSTALIAS$ host is $HOSTSTATE$ **" $CONTACTEMAIL$                                                    
        }                                                                                                                                                        


# 'host-notify-by-epager' command definition
define command{                            
        command_name    host-notify-by-epager
        command_line    /usr/bin/printf "%b" "Host '$HOSTALIAS$' is $HOSTSTATE$\nInfo: $HOSTOUTPUT$\nTime: $LONGDATETIME$" | /usr/bin/mail -s "$NOTIFICATIONTYPE$ alert - Host $HOSTNAME$ is $HOSTSTATE$" $CONTACTPAGER$                                                                                            
        }                                                                                                                                                        

# 'notify-by-email' command definition
define command{                      
        command_name    notify-by-email
        command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nState: $SERVICESTATE$ for $SERVICEDURATION$\nAddress: $HOSTADDRESS$\n\nInfo:\n\n$SERVICEOUTPUT$\n\nDate/Time: $LONGDATETIME$\n\nACK by: $SERVICEACKAUTHOR$\nComment: $SERVICEACKCOMMENT$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ alert $NOTIFICATIONNUMBER$ - $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$                                                                                                                                                              
        }                                                                                                                                                        


# 'notify-by-epager' command definition
define command{
        command_name    notify-by-epager
        command_line    /usr/bin/printf "%b" "Service: $SERVICEDESC$\nHost: $HOSTNAME$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\nInfo: $SERVICEOUTPUT$\nDate: $LONGDATETIME$" | /usr/bin/mail -s "$NOTIFICATIONTYPE$: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$" $CONTACTPAGER$
        }
---------------------------------------------------

Ben de aşağıdaki gibi ekleme yaptım. (Koyu renk olan bölümler)

---------------------------------------------------
# 'host-notify-by-email' command definition
define command{                           
        command_name    host-notify-by-email
        command_line    /usr/bin/printf "%b" "***** ABC KURUMU - Nagios*****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTALIAS$\nState: $HOSTSTATE$ for $HOSTDURATION$\nAddress: $HOSTADDRESS$\nInfo:\n\n$HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n\nACK by: $HOSTACKAUTHOR$\nComment: $HOSTACKCOMMENT$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ alert $NOTIFICATIONNUMBER$ - $HOSTALIAS$ host is $HOSTSTATE$ **" $CONTACTEMAIL$                                                    
        }                                                                                                                                                        


# 'host-notify-by-epager' command definition
define command{                            
        command_name    host-notify-by-epager
        command_line    /usr/bin/printf "%b" "
ABC KURUMU - Host '$HOSTALIAS$' is $HOSTSTATE$\nInfo: $HOSTOUTPUT$\nTime: $LONGDATETIME$" | /usr/bin/mail -s "$NOTIFICATIONTYPE$ alert - Host $HOSTNAME$ is $HOSTSTATE$" $CONTACTPAGER$                                                                                            
        }                                                                                                                                                        

# 'notify-by-email' command definition
define command{                      
        command_name    notify-by-email
        command_line    /usr/bin/printf "%b" "*****
ABC KURUMU - Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nState: $SERVICESTATE$ for $SERVICEDURATION$\nAddress: $HOSTADDRESS$\n\nInfo:\n\n$SERVICEOUTPUT$\n\nDate/Time: $LONGDATETIME$\n\nACK by: $SERVICEACKAUTHOR$\nComment: $SERVICEACKCOMMENT$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ alert $NOTIFICATIONNUMBER$ - $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$                                                                                                                                                              
        }                                                                                                                                                        


# 'notify-by-epager' command definition
define command{
        command_name    notify-by-epager
        command_line    /usr/bin/printf "%b" "
ABC KURUMU - Service: $SERVICEDESC$\nHost: $HOSTNAME$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\nInfo: $SERVICEOUTPUT$\nDate: $LONGDATETIME$" | /usr/bin/mail -s "$NOTIFICATIONTYPE$: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$" $CONTACTPAGER$
        }
-----------------------------------------------------

E-posta programımda (Thunderbird) da gerekli filtreleme işlemlerini yaparsam bu tip bildirim e-postalarını kaçırmam artık diye düşünüyorum.