| Windows Dieses Forum dient den Diskussionen rund um alle Microsoft-Betriebssysteme. |
Diskussion: Service Überwachungs Tool im Forum Windows, in der Kategorie Operating Systems; Anzeige Hallo, ich wollte fragen ob jemand ein Monitoring Tool kennt, welches überwacht ob eingetragene Prozesse noch laufen. Schön wär ...
![]() |
| | #1 (permalink) |
| Registriert seit: 11.07.07 ![]() Likes: 0 | Anzeige Hallo, ich wollte fragen ob jemand ein Monitoring Tool kennt, welches überwacht ob eingetragene Prozesse noch laufen. Schön wär es auch, wenn dieses Programm eine Benachrichtigung per Email schickt, falls ein Service ausfällt. Außerdem sollte es freeware sein. Schön wär es außerdem, wenn es nich nur auf einem 2003 Server laufen würde, sondern auch auf XP, dies ist aber nicht zwigend notwendig. |
| | |
| | #2 (permalink) |
| Registriert seit: 29.07.07 ![]() Likes: 0 | Hi, wenn das die einzige Aufgabenstellung ist, dann wuerde ich dir sowas schnell in Perl scripten, is auch freeware ;-) MfG |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Ich weis ja nicht für was für eine Umgebung du es benötigst. Wenn es allerdings in einer etwas größeren ist und evtl. in einem Betrieb eingesetzt wird empfehle ich Nagios, läuft aber auf Linux! Wenn Du aber was kleines für den Hausgebrauch suchst dann vielleicht dies hier ?!? http://www.kosiol.com/english/softwa...ecksystem.html GreetZimoe | |
| | |
| | #4 (permalink) |
| Themenstarter Registriert seit: 11.07.07 ![]() Likes: 0 | hiho, danke erstmal für die Antworten! Das Tool wird dann in kleineren Firmen laufen, aber eben auf einem Windows Server ... für Linux wüsste ich wie ich das einfach bewerkstelligen könnte ![]() Also ich hab mir das angeschaut was zimoe gepostet hat, das ist auch so in der Art wie ich es suche, aber eben nicht freeware ![]() Zurzeit lerne ich auch Python, damit ich das dann selber schreiben kann... mal schaun was draus wird. Wenn ich fertig bin werde ichs irgendwo zum download stellen. Aber falls trotzdem noch wer diesen Thread liest, der ein solches Tool kennt bin ich immernoch offen für Vorschläge ![]() p.s.:styx-cc, also wenn du soviel Zeit hast und das machen würdest wär das nett |
| | |
| | #5 (permalink) |
| Registriert seit: 29.07.07 ![]() Likes: 0 | Jap,momentan hab ich Zeit und Lust ![]() Setz ich mich geich mal ran. -Dienste auflisten -Gucken ob angegebene Dienste laufen -falls nein, email senden -falls ja alle x Minuten nochmals von Vorne |
| | |
| | #6 (permalink) |
| Themenstarter Registriert seit: 11.07.07 ![]() Likes: 0 | Jop genau so stelle ich mir das vor ![]() Werde morgen auch noch weiter an meiner python-basierten Lösung basteln... mal schaun was da noch so rauskommt. Danke schonmal im vorraus für die mühen |
| | |
| | #7 (permalink) |
| Registriert seit: 29.07.07 ![]() Likes: 0 | Holla, ich hab schon mal angefangen, alles funktioniert so weit bis auf das Versenden einer Mail, aber das mach ich morgen. Hier kannst du erstmal ein wenig spielen: procinfo.plx Code: #!/usr/bin/perl -w
use strict;
use Win32::Process::List;
$|++;
my %config = load_config();
my @required_services = split /;/, $config{'procs'};
#main loop
while (1) {
#get process-list
my $proc_list = Win32::Process::List->new();
my %list = $proc_list->GetProcesses();
#check for missing processes
my @missing;
for my $service (@required_services) {
unless (grep $service eq $list{$_}, keys %list) {
push @missing, $service;
}
}
print "\rThere're ".$proc_list->GetNProcesses()." running and ".scalar(@missing)." missed processes." if $config{'print_state'};
#send_email(\@missing) if (@missing);
select(undef,undef,undef,$config{'delay'});
}
sub send_email {
my $missing = shift;
my $message = "\nThere're some missing processes:\n";
$message .= join "\n", @$missing;
print "$message\n\n";
}
sub load_config {
my %config;
#arguments wich will accept
my @args = qw/procs print_state delay host usr pass/;
#readout configfile
open(CONF, "<procinfo_conf.conf") or die("Can't open file: $!");
for (<CONF>) {
next if ( (/^#/) or (/^\W/) ); #ignore comment-lines
chomp;
my @parts = split(/=/, $_);
my ($var, $value) = @parts;
for my $option (@args) {
if ($var eq "$option") {
$config{$var} = $value if $value;
last;
}
}
}
close CONF;
return %config;
} #sub load_config() Code: #configuration file for procinfo.plx #processes which have to watch procs=calc.exe;mspaint.exe #print out results (boolean) print_state=1 #wait time in seconds delay=5 #emal settings host=www.example.org usr=username pass=password ![]() MfG ------------------------------------------------------------------ Sooo..... habs fertig :-) procinfo.plx Code: #!/usr/bin/perl -w
use strict;
use Win32::Process::List;
use Net::SMTP;
use NET::SMTP_auth;
$|++;
my %config = load_config();
my @required_services = split /;/, $config{'procs'};
#main loop
while (1) {
#get process-list
my $proc_list = Win32::Process::List->new();
my %list = $proc_list->GetProcesses();
#check for missing processes
my @missing;
for my $service (@required_services) {
unless (grep $service eq $list{$_}, keys %list) {
push @missing, $service;
}
}
print_1 ("\rThere're ".$proc_list->GetNProcesses()." running and ".scalar(@missing)." missed processes.");
send_email(\@missing) if (@missing);
select(undef,undef,undef,$config{'delay'});
}
sub send_email {
my $missing = shift;
print_1 ("\nSending warn mail(!) and waiting 20 minutes.\n");
my $smtp = Net::SMTP_auth->new($config{'host'});
$smtp->auth('LOGIN', $config{'usr'}, $config{'pass'}) || die $!;
my($to, $subject) = ($config{'to'}, 'Process-Warning');
my $msg = "There're some missing processes:\n" . join("\n", @{$missing} );
$smtp->mail();
$smtp->to($config{'to'});
$smtp->data();
$smtp->datasend("From: $config{'from'}\n");
$smtp->datasend("To: $config{'to'}\n");
$smtp->datasend("Subject: $subject\n\n"); # end header
$smtp->datasend("$msg\n");
$smtp->dataend();
$smtp->quit;
print_1 ("Missing: ". join(',', @{$missing} ) ."\n\n");
sleep(20*60);
}
sub load_config {
my %config;
#arguments wich will accept
my @args = qw/procs print_state delay host usr pass from to/;
#readout configfile
open(CONF, "<procinfo_conf.conf") or die("Can't open file: $!");
for (<CONF>) {
next if ( (/^#/) or (/^\W/) ); #ignore comment-lines
chomp;
my @parts = split(/=/, $_);
my ($var, $value) = @parts;
for my $option (@args) {
if ($var eq "$option") {
$config{$var} = $value if $value;
last;
}
}
}
close CONF;
return %config;
} #sub load_config()
sub print_1 {print "$_[0]" if $config{'print_state'};} Code: #configuration file for procinfo.plx #processes which have to watch procs=calc.exe;mspaint.exe #print out results (boolean) print_state=1 #wait time in seconds delay=3 #email settings #smpt-server host=deinServerName.de #usr to login usr=username #pw pass=passwort #addressor from=von@email.adresse #acceptor to=an@email.adresse |
| | |
| | #8 (permalink) |
| Themenstarter Registriert seit: 11.07.07 ![]() Likes: 0 | Hiho, danke für deine Mühen, mittlerweile habe ich es aber auch schon in Python gescriptet ^^ Funktionen.py Code: # -*- coding: iso-8859-1 -*-
"""
Written by ftx with a Codesnippet from gerold
"""
#Module werden importiert
import sys
import os
import re
#Variable für den Pfad, wo die config Datei sitzt
config_pfad="./config.cfg"
def prozess_config():
cfg = {} # Dictionary initialisierung
config=open(config_pfad) #Öffnen der Configdatei
exerex = re.compile('.*\.*') # Regex initialisierung
for line in config:
line=line.strip() # Leerzeichen am Anfang und Ende entfernen
if not line:
continue # Überspringe leere Zeilen
if line.startswith("#"):
continue # Überspringe Kommentarzeilen
if(line == "[Prozesse]"): #Wenn er in er for Schleife auf den String trifft
for new_line in config: #geht die nächste vorschleife durch
new_line=new_line.strip() #Leerzeichen entfernen
if new_line.startswith("#"): #Kommentarzeilen überspringen
continue
match=exerex.match(new_line) # Regulärer Ausdruck
if new_line.startswith("["): #Wenn neue Kategorie dann raus aus der Schleife
break
if(type(match) is not type(None)): # Wenn der gematchte Type NICHT vom Typ "None" ist,
match.group() # wird er in die Match-Group aufgenommen
variable=match.group()
cfg[variable] = 0 # Alle Variablen bekommen den Wert 0
return cfg # Return des Dictionarys
def email_config():
email = {} # Dictionary initialisierung
config=open(config_pfad) #Öffnen der Configdatei
for line in config:
line=line.strip() # Leerzeichen am Anfang und Ende entfernen
if not line:
continue # Überspringe leere Zeilen
if line.startswith("#"):
continue # Überspringe Kommentarzeilen
if(line == "[Email]"): # Wenn er auf den String trifft, wird eine neue
for new_line in config: # for Schleife initialisiert
new_line=new_line.strip() # Leerzeichen am Anfang und Ende entfernen
if new_line.startswith("#"):
continue # Überspringe Kommentarzeilen
match=re.match('(.*?)\s*=\s*(.*?)$', new_line) # Regulärer Ausdruck
if new_line.startswith("["): # Schleifen-Break wenn neue Kategorie beginnt
break
if(type(match) is not type(None)): # Wenn der gematchte Type NICHT vom Typ "None" ist,
variable=match.group(1) # wird er in die Group aufgenommen
wert=match.group(2)
email[variable]=wert # Dictionary mit der vorderen Group als Key und der Hinteren als Value
return email # Rückgabe des Dictionarys
def optional_config():
optional = {} # Dictionary initialisierung
config=open(config_pfad) #Öffnen der Configdatei
for line in config:
line=line.strip() # Leerzeichen am Anfang und Ende entfernen
if not line:
continue # Überspringe leere Zeilen
if line.startswith("#"):
continue # Überspringe Kommentarzeilen
if(line == "[Optional]"): # Wenn er auf den String trifft, wird eine neue
for new_line in config: # for Schleife initialisiert
new_line=new_line.strip() # Leerzeichen am Anfang und Ende entfernen
if new_line.startswith("#"):
continue # Überspringe Kommentarzeilen
match=re.match('(.*?)\s*=\s*(.*?)$', new_line) # Regulärer Ausdruck
if new_line.startswith("["): # Schleifen-Break wenn neue Kategorie beginnt
break
if(type(match) is not type(None)): # Wenn der gematchte Type NICHT vom Typ "None" ist,
variable=match.group(1) # wird er in die Group aufgenommen
wert=match.group(2)
optional[variable]=wert # Dictionary mit der vorderen Group als Key und der Hinteren als Value
return optional # Rückgabe des Dictionarys
def get_current_processes():
retdict = {}
if sys.platform.startswith("win"):
# tasklist.exe runs on Windows XP and higher. (To parse the ouput of
# tasklist.exe is faster than WMI.)
import csv
csvlines = []
for line in os.popen("tasklist.exe /fo csv /nh"): # Für jede Zeile die der Befehl ausgibt
line = line.strip() # Leerzeichen entfernen
if line:
csvlines.append(line) # Die Zeilen werden in einem Dictionary gespeichert
for line in csv.reader(csvlines):
pid = int(line[1])
details = {
"name": line[0].decode("cp850"), # to unicode
"pid": pid,
}
value = "".join(
char for char in line[4]
if char in "0123456789"
)
details["size_kb"] = int(value)
retdict[pid] = details
return retdict or None prozesse.py Code: # -*- coding: iso-8859-1 -*-
"""
Written by ftx with a Codesnippet from gerold
"""
#Benötigte Module werden importiert
import sys
import os
import re
import smtplib
import funktionen
#Funktionsrückgabewerte werden in Variablen gespeichert
email = funktionen.email_config()
optional = funktionen.optional_config()
eintraege = funktionen.get_current_processes().items()
config = funktionen.prozess_config()
#Initialisierung eines Dictionarys für die Überprüfung, ob die Prozesse laufen,
#welche in der Config stehen.
dic={}
#Einfügen der Prozesse, die in der Config stehen, in ein Dictionary welches allen
#automatisch den Value 0 gibt
for k, v in config.iteritems():
if not (dic.has_key(k)):
dic[k] = 0 # neuen Eintrag hinzufügen
#For-Schleifen zum Testen, ob es Übereinstimmungen gibt zwischen den laufenden Prozessen
#und den in der CFG-Datei eingetragenen. Wenn übereinstimmung, wird der Value auf 1 gesetzt
for eintrag in eintraege:
for key in dic.keys():
for value in dic.values():
if(str(eintrag[1]["name"]) == str(key)):
dic[key] = 1
#Das Email Dictionary wird durchgegangen, wenn bestimmte Strings matchen, wird es
#in Variablen geschrieben
for k, v in email.iteritems():
if(k == "Empfaenger"):
empfaenger = v
if(k == "SMTPServer"):
smtpserver = v
if(k == "Absender"):
absender = v
#Das Optional Dictionary wird durchgegagen, wenn bestimmte Strings matchen, wird es
#in Variablen geschrieben
for k, v in optional.iteritems():
if(k == "Loginname"):
loginname = v
if(k == "Passwort"):
passwort = v
#Mail Server Verbindung wird aufgebaut, sollte loginname&passwort in der CFG-Datei
#eingetragen worden sein, so läuft die Schleife normal durch, wenn nicht wird so
#versucht zum SMTP-Server zu connecten
server = smtplib.SMTP(smtpserver)
try:
server.login(loginname,passwort)
except:
smtplib.SMTPAuthenticationError
else:
ausfall = "Folgende/r Dienst/e sind/ist ausgefallen:"
allesklar = "Alle Dienste laufen, super!"
zwisch = 0 # Variablen initialisierung
err = False # Variablen initialisierung
format = 0 # Variablen initialisierung
for k, v in dic.iteritems(): # Wenn es Prozesse gibt, die ausgefallen sind, wird err = True gesetzt
if(v == 0):
if(format == 0):
ausfall = ausfall + " " + k
err = True
format = 1
else:
ausfall = ausfall + " " + k + ","
ausfall = ausfall.strip(",")
#Wenn err True ist, wird ein ausfall beklagt, wenn alle Dienste laufen, wird die Var "allesklar" versendet
if (err == True):
server.sendmail(absender,empfaenger,ausfall)
else:
server.sendmail(absender,empfaenger,allesklar)
server.quit() # Server Connection Close Code: #Alle Zeilen die mit einer "#" beginnen, sind Kommentarzeilen #Unter Prozesse werden alle Prozesse eingetragen, die überwacht werden sollen #Es sollten dabei die Korrekte schreibweise beachtet werden, d.h. der Prozess #sollte so eingetragen werden, wie er im Taskmanager auftaucht (auch groß/kleinschreibung beachten [Prozesse] #Hier Prozessnamen eintragen explorer.exe eclipse.exe [Email] #Hier Email Daten einfügen und auf Korrektheit prüfen, wenn diese fehlerhaft sind, wird KEINE Email versendet! SMTPServer=smtp.****.de Empfaenger******@googlemail.com Absender=*******@web.de [Optional] #Falls Login beim smtp-Server notwendig ist, hier die Daten rein Loginname=******* Passwort=****** Das läuft super, bis jetzt auch keine Bugs gefunden... tolles Programm Bin froh das ich das so hinbekommen habe, habe erst vor 3 Tagen angefangen mit Python |
| | |
| | #9 (permalink) |
| Registriert seit: 21.06.08 ![]() Likes: 0 | Hallo Leute , Ich wollte fragen ob ihr mir helfen könnt ![]() Ich wollte das gleiche nur bei mir gehts es um Plesk wenn ein Service ausfällt z.B. falls Fehler auftauchen oder veränderungen geben will ich benarichtigt werden. Wenn es möglich ist soll es auch in den Diensten von Windows möglich sein also die überwachung z.B. in ISS 6 Dateiserver usw. oder im Plesk wenn sich jemand mehr als 2 mal falsch einloggt oder so soll ich benahrichtigt werden auch das gleiche bei dem VPN verbindung könnt ihr mir Helfen Leute?? mfg |
| | |
| | #10 (permalink) |
| Registriert seit: 29.07.07 ![]() Likes: 0 | Klar kann man dir da helfen, zeig doch mal her was du bis jetzt gemacht hast |
| | |
| | #11 (permalink) |
| Registriert seit: 21.06.08 ![]() Likes: 0 | Leider noch nix weil ich mich nicht mit Python nicht auskenne habe auch nicht viel zeit weil morgen kriegen wird die zeugnisse und danach ab in den Ferien deshalb brauch ich es dringend daher würde ich dich bitten mir zu helfen. Mfg |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Suche Überwachungs-/Protokollprogramm | Sunstepper | Windows | 7 | 09.03.08 21:15 |
| kostenloser VPN Service | Mechanius | Linux/UNIX | 0 | 03.01.08 18:26 |
| XP Service Pack 2 | SteVe_O | Windows | 16 | 20.09.04 16:29 |
| Service Pack 2 | Stanly | Umfragen | 29 | 02.09.04 15:47 |
| Service Pack 2 | Wizo | Windows | 6 | 16.08.04 15:45 |