OVH Cloud OVH Cloud

Supervision Windows Urgent

27 réponses
Avatar
DarkPearl
Bonjour a vous,

j'ai besoin d'aide en ce qui concerne de la supervision de windows. (XP
2000 NT)

Je desire faire un programme en python qui recupere toutes les 5
minutes certaines informations sur le pc ou il est install=E9.
Ces informations sont pour l'instant : charge CPU, capacit=E9 de toutes
les partitions ainsi que l'utilisation, liste de tous les processus qui
tournent, upTime, utilisationde la RAM.

J'ai deja bien regard=E9 WMI mais c assez mal document=E9 et puis surtout
extremement lent via python.
Sinon vous ne connaitriez pas ou se situent les compteurs dans la base
de registre (compteur CPU, RAM,...).

Bref aidez moi s'il vous plait, j'en ai besoin dans les plus bref delais

10 réponses

1 2 3
Avatar
Bruno Desthuilliers
DarkPearl wrote:
Bonjour a vous,

j'ai besoin d'aide en ce qui concerne de la supervision de windows. (XP
2000 NT)

Je desire faire un programme en python qui recupere toutes les 5
minutes certaines informations sur le pc ou il est installé.
Ces informations sont pour l'instant : charge CPU, capacité de toutes
les partitions ainsi que l'utilisation, liste de tous les processus qui
tournent, upTime, utilisationde la RAM.

J'ai deja bien regardé WMI mais c assez mal documenté et puis surtout
extremement lent via python.
Sinon vous ne connaitriez pas ou se situent les compteurs dans la base
de registre (compteur CPU, RAM,...).


C'est un problème spécifique à ton système, pas à Python. Tu aura a
priori de meilleures réponses sur un ng consacré au système en question.


--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in ''.split('@')])"

Avatar
jean-michel bain-cornu
Bonjour,
j'ai besoin d'aide en ce qui concerne de la supervision de windows. (XP
2000 NT)


Bref aidez moi s'il vous plait, j'en ai besoin dans les plus bref delais

A mon avis, si tu veux faire quelque chose de rapide et sérieux, il vaut

mieux te baser sur de l'existant. Voir par exemple nagios :
http://www.nagios.org/faqs/viewfaq.php?faq_id2&expandúlse&showdescúlse
plutôt que de réinventer.
Le pilotage du logiciel de supervision peut très bien se faire avec
python, avec lequel tu peux écrire un plugin pour le système à
surveiller, ou simplement exécuter des commandes de contrôle.
A+
jm

Avatar
MC
Bonsoir !

Si WMI est lent, c'est pour certaines choses seulement, et ça reste
parfaitement jouable ; d'autant plus que l'on peut gérer ça dans un
thread.
(au passage, WMI n'est pas lent qu'avec Python ; preuve en est le
fonctionnement avec la commande standard WMIC)

Et puis, WMI donne beaucoup d'informations.

Autre possibilité, Pywin32. C'est rapide, et il y a pas mal de
fonctions intéressantes.
Et, rien n'empêche un fonctionnement mixte. Par exemple, j'ai un script
Python qui surveille les processus. La liste des processus est réalisée
avec des appels à Pywin32 ; et, lorsque certains processus sont
présents, un appel à WMI est réalisé. Pour info, je faisais une analyse
toutes les 10 s, avec une consommation processeur oscillait entre 2 %
et 5 % (toutes les 10 s).

Enfin, je signale la possibilité de wrapper l'invite de commande
(subprocess, popenX, ...). Contrairement à une idée reçue, c'est (très)
rapide. Il n'y a qu'à faire un test avec TASKLIST, pour s'en
convaincre.

--
@-salutations

Michel Claveau
Avatar
MC
Bonsoir !

WMI, c'est l'implémentation, sous Windows, du standard WBEM (voir :
http://www.dmtf.org/standards/wbem).

Ce standard étant indépendant de l'OS, l'idée/besoin exprimé par
DarkPearl pourrait très bien intéresser beaucoup de monde.

Par contre, pour linux, je sais seulement que ça existe, et ne connait
pas les implémentations (en Python).

--
@-salutations

Michel Claveau
Avatar
DarkPearl
OK je vous remercie de vos réponses. Alors je reformule ma demande :
est ce que quelqu'un pourrait m'indiquer comment avec python + pyWin32
récuperer :
-la liste des processus qui tournent
-la charge CPU pour tous les processeurs (si multiproc)
-les stats de la ram
-les debits reseaux ou le Nombre d'octets qui est entrée/sortie
depuis le demarrage, par toutes les interfaces reseaux
-les stats des DD

Maintenant, si quelqu'un me propose une solution avec python +pyWin32 +
WMI, il n'y a aucun probleme.
Avatar
jean-michel bain-cornu
Le pilotage du logiciel de supervision peut très bien se faire avec
python, avec lequel tu peux écrire un plugin pour le système à
surveiller, ou simplement exécuter des commandes de contrôle.
Quand je disais qu'on peux écrire un plugin de surveillance (sans parler

de ce qui est déjà fait), j'avais en tête quelque chose de simple du style :

resultat= []
fileName= '/tmp/wma%s.tmp'%os.getpid()
for cmd in ('top -b -n 1','df -h'):
os.system(cmd+' >%s 2>&1'%fileName)
lines= file(fileName,'r').readlines()
resultat.append([cmd,lines])
os.remove(fileName)
return resultat

qui donne la charge machine et autres infos demandées, mais sous linux.

C'est sûr que sous windows, ça a l'air un peu plus gratiné. J'ai regardé
par curiosité et fait une petite recherche sur 'WMI'. Je suis tombé sur
un script (http://dotnet.developpez.com/tutoriels/wmi1/) qui me donne
l'espace libre sur les disques ; super, mais un peu léger (on a la même
chose avec 'dir c:'). J'ai continué un peu, et laissé tombé quand je
suis arrivé sur un lien microsoft qui m'a répondu 'We’re sorry, but we
were unable to service your request.'
Ya pas à dire, l'admin windows, c'est un vrai job !

jm

Avatar
Bruno Desthuilliers
Bonsoir !

WMI, c'est l'implémentation, sous Windows, du standard WBEM (voir :
http://www.dmtf.org/standards/wbem).

Ce standard étant indépendant de l'OS, l'idée/besoin exprimé par
DarkPearl pourrait très bien intéresser beaucoup de monde.


Sauf qu'il mentionne clairement que c'est une autre solution -
spécifique à l'OS en l'occurrence - qu'il recherche.

Avatar
Michel Claveau
Bonsoir !

J'ai pas mal de scripts Python exploitant WMI.
En voici quatre (presque) au hasard :


*************Processus**************

# -*- coding: cp1252 -*-

# liste les process, et en supprime certains

def wprocess(lstSuppr=[]):
import win32com,win32com.client
WMIService
=win32com.client.GetObject(r'winmgmts:{impersonationLevel=impersonate}!//.rootcimv2')
listProcess = WMIService.ExecQuery('Select * from Win32_Process')
for item in listProcess:
print ''
print 'Nom :',item.Name
print 'Ligne de commande :',item.CommandLine
print 'Descriptif :',item.Description
print 'Path d'exécution :',item.ExecutablePath
print 'Statut :',item.Status
print 'Priorité :',item.Priority
print 'Caption :',item.Caption
print 'IdProcess :',item.ProcessId
print 'IdProcess Parent :',item.ParentProcessId
if item.name in lstSuppr:
try:
item.Terminate()
except:
pass

wprocess(['notepad.exe','WINWORD.EXE']) # supprime certains process




***********Mémoire & services**************

# -*- coding: cp1252 -*-

import win32com.client

WMIService =
win32com.client.GetObject(r"winmgmts:{impersonationLevel=impersonate}!.rootcimv2")
BIOS = WMIService.ExecQuery("Select * from Win32_BIOS")
print "Nom du fabricant du BIOS :",BIOS[0].Manufacturer

WMIService
=win32com.client.GetObject(r"winmgmts:{impersonationLevel=impersonate}!//.")
obj = WMIService.InstancesOf("Win32_LogicalMemoryConfiguration")
print "memoire totale :",obj[0].TotalPhysicalMemory

WMIService
=win32com.client.GetObject(r"winmgmts:{impersonationLevel=impersonate}!//.")
obj = WMIService.InstancesOf("Win32_Service")

#for i in obj[:]:
# print i

for i in range(len(obj)):
print " "
print "Service :",obj[i].DisplayName
print "Etat :",obj[i].State
print "Lancement:",obj[i].StartMode






*************Services**************

# -*- coding: cp1252 -*-

import win32com.client
strComputer = "."
objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator")
objSWbemServices =
objWMIService.ConnectServer(strComputer,"rootcimv2")
colItems = objSWbemServices.ExecQuery("Select * from Win32_Service")
for objItem in colItems:
print "Accept Pause: ", objItem.AcceptPause
print "Accept Stop: ", objItem.AcceptStop
print "Caption: ", objItem.Caption
print "CheckPoint: ", objItem.CheckPoint
print "Creation Class Name: ", objItem.CreationClassName
print "Description: ", objItem.Description
print "Desktop Interact: ", objItem.DesktopInteract
print "Display Name: ", objItem.DisplayName
print "Error Control: ", objItem.ErrorControl
print "Exit Code: ", objItem.ExitCode
print "Install Date: ", objItem.InstallDate
print "Name: ", objItem.Name
print "Path Name: ", objItem.PathName
print "Process Id: ", objItem.ProcessId
print "Service Specific Exit Code: ",
objItem.ServiceSpecificExitCode
print "Service Type: ", objItem.ServiceType
print "Started: ", objItem.Started
print "Start Mode: ", objItem.StartMode
print "Start Name: ", objItem.StartName
print "State: ", objItem.State
print "Status: ", objItem.Status
print "System Creation Class Name: ",
objItem.SystemCreationClassName
print "System Name: ", objItem.SystemName
print "Tag Id: ", objItem.TagId
print "Wait Hint: ", objItem.WaitHint







*************Divers**************

# -*- coding: cp1252 -*-

import win32com.client
strComputer = "."
objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator")
objSWbemServices =
objWMIService.ConnectServer(strComputer,"rootcimv2")
colItems = objSWbemServices.ExecQuery("Select * from
Win32_ComputerSystem")
for objItem in colItems:
print "Admin Password Status: ", objItem.AdminPasswordStatus
print "Automatic Reset Boot Option: ",
objItem.AutomaticResetBootOption
print "Automatic Reset Capability: ",
objItem.AutomaticResetCapability
print "Boot Option On Limit: ", objItem.BootOptionOnLimit
print "Boot Option On WatchDog: ", objItem.BootOptionOnWatchDog
print "Boot ROM Supported: ", objItem.BootROMSupported
print "Bootup State: ", objItem.BootupState
print "Caption: ", objItem.Caption
print "Chassis Bootup State: ", objItem.ChassisBootupState
print "Creation Class Name: ", objItem.CreationClassName
print "Current Time Zone: ", objItem.CurrentTimeZone
print "Daylight In Effect: ", objItem.DaylightInEffect
print "Description: ", objItem.Description
print "Domain: ", objItem.Domain
print "Domain Role: ", objItem.DomainRole
print "Enable Daylight Savings Time: ",
objItem.EnableDaylightSavingsTime
print "Front Panel Reset Status: ", objItem.FrontPanelResetStatus
print "Infrared Supported: ", objItem.InfraredSupported
z = objItem.InitialLoadInfo
if z is None:
a = 1
else:
for x in z:
print "Initial Load Info: ", x
print "Install Date: ", objItem.InstallDate
print "Keyboard Password Status: ", objItem.KeyboardPasswordStatus
print "Last Load Info: ", objItem.LastLoadInfo
print "Manufacturer: ", objItem.Manufacturer
print "Model: ", objItem.Model
print "Name: ", objItem.Name
print "Name Format: ", objItem.NameFormat
print "Network Server Mode Enabled: ",
objItem.NetworkServerModeEnabled
print "Number Of Processors: ", objItem.NumberOfProcessors
print "Part Of Domain: ", objItem.PartOfDomain
print "Pause After Reset: ", objItem.PauseAfterReset
z = objItem.PowerManagementCapabilities
if z is None:
a = 1
else:
for x in z:
print "Power Management Capabilities: ", x
print "Power Management Supported: ",
objItem.PowerManagementSupported
print "PowerOn Password Status: ", objItem.PowerOnPasswordStatus
print "Power State: ", objItem.PowerState
print "Power Supply State: ", objItem.PowerSupplyState
print "Primary Owner Contact: ", objItem.PrimaryOwnerContact
print "Primary Owner Name: ", objItem.PrimaryOwnerName
print "Reset Capability: ", objItem.ResetCapability
print "Reset Count: ", objItem.ResetCount
print "Reset Limit: ", objItem.ResetLimit
print "Status: ", objItem.Status
print "System Startup Delay: ", objItem.SystemStartupDelay
print "System Startup Setting: ", objItem.SystemStartupSetting
print "System Type: ", objItem.SystemType
print "Thermal State: ", objItem.ThermalState
print "Total Physical Memory: ", objItem.TotalPhysicalMemory
print "User Name: ", objItem.UserName
print "WakeUp Type: ", objItem.WakeUpType
print "Workgroup: ", objItem.Workgroup

--
@-salutations

Michel Claveau
Avatar
MC
Salut !

C'est un problème spécifique à ton système, pas à Python. Tu aura
de meilleures réponses sur un ng consacré au système en question.


J'aimerais bien comprendre pourquoi, avec cette demande, qui concerne
explicitement Python, tu renvoie l'utilisateur, alors que pour :

Problème de synchro entre file() et os.system() sous linux


tu daignes répondre.


AMHA, du moment que ça concerne Python, même de loin, c'est méritable.
Quelque soit l'OS, et quelque soit la cible.

--
@-salutations

Michel Claveau

Avatar
DarkPearl
Ok merci pour ces scripts. Ils me serviront grandement. Il est vrai
qu'il faut bien connaitre le systeme windows pour utiliser pywin. C'est
une usine à gaz quand on ne connait que les systemes linux.

Par contre auriez vous aussi de quoi récuperer la charge CPU et
l'utilisation de la RAM ?
1 2 3