2011-01-14 8 views
6

Ich (wie die meisten Tech-Administratoren denke ich) habe ziemlich viele Statusinformationen von geplanten Diensten in meinem Posteingang. Wenn jedoch eine Service-E-Mail fehlschlägt, wird offensichtlich keine E-Mail gesendet. Also möchte ich einfach einen Dienst, der meinen Posteingang ansieht und sagt: "Hey, dieser Dienst hat gestern keinen E-Mail-Bericht gesendet - irgendwas stimmt nicht!".Erhalte eine Warnung, wenn eine E-Mail mit einem erwarteten Zeitplan nicht eingetroffen ist

Dieser sollte irgendwo gelöst werden, denke ich. Vielleicht hat Gmail (oder ein anderer E-Mail-Anbieter) einen Dienst dieser Art, das wäre großartig.

Antwort

3

Wäre es nicht eine bessere Option, eine zentralisierte Überwachungslösung wie Nagios zu verwenden, die Sie so konfigurieren, dass sie nur Benachrichtigungen sendet, wenn ein Dienst seinen Herzschlag verfehlt, Hochwasser erreicht und keinen Treibstoff mehr hat? Und dann aus der Bahn einer zweiten Monitoring-Lösung, die die Haupt-Monitoring-Lösung überwacht ....

http://www.nagios.org/documentation

Ich bin keine Kenntnis von Service, den Sie beschreiben, aber eine manuelle Routine könnte so gehen:

Haben sie einen Ordner/Tag-Struktur wie folgt aus:

Services\Hourly-[NumberOfServices] (or add a folder per service) 
Services\Daily-[NumberOfServicves] 
Services\Weekly-[NumberOfServicves] 
Services\Monthly-[NumberOfServicves] 

Regeln für eingehende E-Mails jede spezifische Servicemeldung filtern und sie in den richtigen Ordner auf der Grundlage ihrer erwarteten Zeitpunkt verschieben.

Wachen Sie jede Stunde auf und prüfen Sie, ob ungelesene Nachrichten in Ihrem stündlichen Ordner vorhanden sind. Die Anzahl der ungelesenen Dateien sollte mit den im Ordner angegebenen NumberOfServices übereinstimmen. Lesen/Verarbeiten Sie sie und stellen Sie sicher, dass alle sie als gelesen markieren. Jeder Dienst, der nicht per E-Mail verschickt wurde, wird schnell gefunden.

Um 0:00 Uhr aufwachen und prüfen, ob ungelesene Nachrichten in Ihrem Daily-Ordner vorhanden sind. usw ..

Aufwachen um 0:00 Uhr und Samstag und prüfen, ob ungelesene Nachrichten in Ihrem Wöchentlichen Ordner sind. usw.

Um 0:00 Uhr am ersten des Monats wecken und prüfen, ob ungelesene Nachrichten in Ihrem Wöchentlichen Ordner sind. etc etc etc ...

Mein Ratschlag wäre es, den Lärm von den Diensten erzeugt zu reduzieren.

Wenn Sie immer noch das Gefühl, Sie einen Service brauchen kann ich nur eine sehr sehr einfache Implementierung .NET bieten etwa basierend auf dem obigen Verfahren und arbeitet mit gmail ... Dies auch tragbar ist zu Powershell ...

static void Main(string[] args) 
     { 
      var resolver = new XmlUrlResolver 
      { 
       Credentials = new NetworkCredential("yourgoolgeaccount", "yourpassword") 
      }; 

      var settings = new XmlReaderSettings(); 

      settings.XmlResolver = resolver; 

      var xr = XmlReader 
       .Create("https://mail.google.com/mail/feed/atom/[name of your filter]" 
       , settings); 

      var navigator = new XPathDocument(xr).CreateNavigator(); 

      var ns = new XmlNamespaceManager(new NameTable()); 
      ns.AddNamespace("fd", "http://purl.org/atom/ns#"); 

      var fullcountNode = navigator.SelectSingleNode(
       "/fd:feed/fd:fullcount" 
       , ns); 

      Console.WriteLine(fullcountNode.Value); 

      int fullcount = Int32.Parse(fullcountNode.Value); 
      int expectCount = 10; 

      if (expectCount > fullcount) 
      { 
       Console.WriteLine("*** NOT EVERY ONE REPORTED BACK"); 
      } 
} 
+0

Sehr interessant, danke. Ich war selbst in den Google Mail Atom Reader. Werde es ausprobieren. Nagios schien ein bisschen kompliziert zu sein in (?) – joeriks

+0

@joeriks Nun, es gibt immer einen Kompromiss zwischen Ihren Anforderungen und einem Tool, aber ich hatte Nagios auf einem debian VPC in 30 Minuten und hatte es Spam mein ganzes Team innerhalb die Stunde ... – rene

2

Sie haben Gmail erwähnt, Sie könnten also an googlecl interessiert sein, das Ihnen Befehlszeilensteuerelemente für Google Kalender und Google Docs zur Verfügung stellt. Leider unterstützen sie Google Mail noch nicht. Wenn Sie jedoch langfristig ein Gmail-Konto als Mittelpunkt Ihrer Statusberichte verwenden möchten, ist googlecl möglicherweise die beste Option.

Kurzfristig können Sie googlecl jetzt mit den Befehlen für Kalender, Blogger oder Google Docs ausprobieren, die alle bereits unterstützt werden. Diese Befehle fügen beispielsweise Ereignisse zu Google Kalender hinzu:

google calendar add --cal server1 "I'm still alive at 13:45 today" 
google calendar add "Server 1 is still alive at 2011-02-08 19:43" 

...und diese Befehle abfragen, um den Kalender:

google calendar list --fields title,when,where --cal "commitments" 
google calendar list -q party --cal ".*" 

Kommen Sie, daran zu denken, können Sie auch, dass die Kalender finden, Blogger oder Docs sind ein geeigneterer Ort als Google Mail für Status-Updates zu verfolgen. Zum Beispiel sollte ein Tabellenkalkulations- oder Kalenderformat es einfacher machen, eine grafische Darstellung zu erzeugen, wenn ein bestimmter Dienst hoch oder runter war.

Sie müssen noch ein kleines Programm schreiben, das googlecl verwendet, um den Kalender (oder Blog, oder docs oder was auch immer) abzufragen, aber sobald Sie einfache Befehlszeilen zur Verfügung haben, sollte der Rest ziemlich einfach sein. Hier ist ein Link zu weiteren Informationen über googlecl:

http://code.google.com/p/googlecl/

Wenn Sie wirklich von Google Mail verwenden möchten, und verwenden Sie es gerade jetzt, sie bieten eine IMAP-Schnittstelle. Mithilfe von IMAP können Sie zahlreiche einfache Vorgänge ausführen, z. B. bestimmen, ob eine Nachricht vorhanden ist, die eine angegebene Betreffzeile enthält. Hier ist ein guter Platz, um die Details zu erfahren:

http://mail.google.com/support/bin/answer.py?hl=en&answer=75725

Hier ist ein kurzes Beispiel, das IMAP und Python verwendet die zehn meist letzten E-Mails zur Liste, die eine gegebene Gmail „Label“ haben:



import getpass, imaplib 
# These gmail_* utilties are from https://github.com/drewbuschhorn/gmail_imap                         
import gmail_mailboxes, gmail_messages, gmail_message 

# Update these next lines manually, or turn them into parms or somesuch.                           
gmail_account_name = "[email protected]" # Your full gmail address.                          
mailbox_name = "StatusReports" # Use Gmail "labels" to tag the relevant msgs.                         

class gmail_imap: 
    def __init__ (self, username, password): 
     self.imap_server = imaplib.IMAP4_SSL("imap.gmail.com",993) 
     self.username = username 
     self.password = password 
     self.loggedIn = False 
     self.mailboxes = gmail_mailboxes.gmail_mailboxes(self) 
     self.messages = gmail_messages.gmail_messages(self) 
    def login (self): 
     self.imap_server.login(self.username,self.password) 
     self.loggedIn = True 
    def logout (self): 
     self.imap_server.close() 
     self.imap_server.logout() 
     self.loggedIn = False 

# Right now this prints a summary of the most-recent ten (or so) messages                          
# which have been labelled in Gmail with the string found in mailbox_name.                          
# It won't work unless you've used Gmail settings to allow IMAP access.                           
if __name__ == '__main__': 
    gmail = gmail_imap(gmail_account_name,getpass.getpass()) 
    gmail.messages.process(mailbox_name) 
    for next in gmail.messages: 
     message = gmail.messages.getMessage(next.uid) 
     # This is a good point in the code to insert some kind of search                           
     # of gmail.messages. Instead of unconditionally printing every                           
     # entry (which is what the code below does), issue some sort of                           
     # warning if the expected email (message.From and message.Subject)                           
     # did not arrive within the expected time frame (message.date).                           
     print message.date, message.From, message.Subject 
    gmail.logout() 

Wie in den Codekommentaren erwähnt, könnten Sie sie anpassen, um eine Art Warnung auszugeben, wenn die letzten Nachrichten in diesem Postfach keine erwartete Nachricht enthalten. Führen Sie dann das Python-Programm einmal pro Tag (oder in dem von Ihnen gewünschten Zeitraum) aus, um festzustellen, ob die erwartete E-Mail-Nachricht nie empfangen wurde.

+0

Ok. Ich mag die Idee, eine Tabellenkalkulation für eine schöne visuelle Darstellung zu verwenden - Google Spreadsheets API ist nett. Ich könnte vielleicht Regeln in der ersten Spalte des Blattes einrichten und einen Dienst haben, der irgendwo den Status in einer Spalte für jeden Tag ausfüllt. Und ein anderer Dienst meldet, wenn die Summe der Status nicht wie erwartet ist. Aber - ich habe wirklich auf eine fertige Lösung gehofft. – joeriks