Comment utiliser le module psutil pour récupérer des informations sur le processus et le système sur les équipements exécutant Junos OS
Le psutil
module Python est disponible sur certains équipements qui prennent en charge les scripts d’automatisation Python et qui exécutent Junos OS Evolved ou Junos OS avec FreeBSD mis à niveau. Vous pouvez utiliser le psutil
module dans les scripts Python pour récupérer des informations sur les processus en cours d’exécution et l’utilisation du système sur l’équipement, par exemple des informations sur le processeur, la mémoire, les disques et les processus. Le module implémente les fonctionnalités de nombreux outils de ligne de commande tels que ps
et uptime
, entre autres.
Le tableau 1 présente les fonctions prises en charge psutil
. Pour plus d’informations sur le psutil
module et ses fonctions, consultez la documentation officielle sur https://psutil.readthedocs.io/en/latest/.
Catégorie de fonction |
Fonctions prises en charge |
Fonctions prises en charge |
---|---|---|
CPU |
|
|
Disque |
|
|
Mémoire |
|
|
Réseau |
– |
|
Processus |
|
|
Capteurs |
– |
– |
Informations système |
|
|
L’exemple de script python op suivant illustre les psutil
appels aux fonctions pour récupérer des informations sur le système et les processus sur l’équipement donné exécutant Junos OS :
import psutil import datetime ### *** CPU FUNCTIONS *** # Number of logical CPUs in the system print ("psutil.cpu_count() = {0}".format(psutil.cpu_count())) ### *** DISK FUNCTIONS *** # List of named tuples containing all mounted disk partitions dparts = psutil.disk_partitions() print("psutil.disk_partitions() = {0}".format(dparts)) # Disk usage statistics du = psutil.disk_usage('/') print("psutil.disk_usage('/') = {0}".format(du)) ### *** MEMORY FUNCTIONS *** # System memory usage statistics mem = psutil.virtual_memory() print("psutil.virtual_memory() = {0}".format(mem)) THRESHOLD = 100 * 1024 * 1024 # 100MB if mem.available <= THRESHOLD: print("warning, available memory below threshold") ### *** PROCESS FUNCTIONS *** # List of current running process IDs. pids = psutil.pids() print("psutil.pids() = {0}".format(pids)) # Check whether the given PID exists in the current process list. for proc in psutil.process_iter(): try: pinfo = proc.as_dict(attrs=['pid', 'name']) except psutil.NoSuchProcess: pass else: print(pinfo) ### *** SYSTEM INFORMATION FUNCTIONS *** # System boot time expressed in seconds since the epoch boot_time = psutil.boot_time() print("psutil.boot_time() = {0}".format(boot_time)) # System boot time converted to human readable format print(datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S")) # Users currently connected on the system users = psutil.users() print("psutil.users() = {0}".format(users))
Lorsque vous exécutez le script op, le script imprime les informations demandées sur l’équipement. Certains des résultats de l’échantillon ont été tronqués pour des fins de concision.
user@host> op psutil-test.py psutil.cpu_count() = 4 psutil.disk_partitions() = [sdiskpart(device='/dev/md0.uzip', mountpoint='/', fstype='cd9660', opts='ro'), sdiskpart(device='devfs', mountpoint='/dev', fstype='devfs', opts='rw,multilabel'), ...] psutil.disk_usage('/') = sdiskusage(total=20609945600L, used=12531843072L, free=6429306880L, percent=66.099999999999994) psutil.virtual_memory() = svmem(total=4230012928L, available=7632039936L, percent=-80.400000000000006, used=658825216L, free=4325273600L, active=59793408L, inactive=3306766336L, buffers=289771520L, cached=0L, shared=249659392L, wired=599031808L) psutil.pids() = [43521, 43134, 33616, 33610, 33609, 33608, 33605, 33604, 33603, 33602, 33599, 33598, 33597, 33596, 33593, 8356, 7893, 7871, 7870, 7869, 7868, 7867, 7866, 7865, 7864, 7863, 7862, 7861, 7860, 7859, 7858, 7857, 7856, 7854, 7853, 7851, 7850, 7849, 7848, 7847, 7846, 7845, 7844, 7842, 7841, 7840, 7839, 7838, 7837, 7836, 7835, 7834, 7833, 7832, 7831, 7830, 7829, 7828, 7826, 7825, 7824, 7823, 7822, 7821, 7820, 7819, 7817, 7807, 7627, 7560, 7410, 7370, 7362, 7359, 7345, 7344, 7343, 7342, 7340, 7336, 7335, 7328, 7327, 7322, 7320, 7319, 7318, 7314, 7313, 7312, 7308, 7307, 7304, 7303, 7301, 7299, 7296, 7295, 7293, 7282, 7267, 7266, 7262, 6278, 6276, 6275, 5886, 5493, 5492, 4015, 4014, 3954, 3953, 3895, 3894, 3835, 3834, 3776, 3775, 3717, 3716, 3660, 3659, 3601, 3600, 3541, 3540, 3481, 3480, 3423, 3422, 3364, 3363, 3304, 3303, 3160, 3159, 3091, 3090, 3032, 3031, 2973, 2972, 2916, 2915, 2857, 2856, 2798, 2797, 2707, 2650, 2649, 2591, 2590, 2532, 2531, 2464, 2463, 2407, 2406, 2348, 2347, 2289, 2220, 2219, 2161, 2160, 2102, 2101, 2043, 2042, 1984, 1983, 1925, 1924, 1865, 1782, 1781, 1671, 1670, 1564, 1563, 1089, 1088, 1032, 1031, 973, 972, 916, 915, 859, 858, 803, 802, 483, 482, 164, 163, 54, 53, 52, 51, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 9, 8, 7, 6, 5, 4, 3, 2, 11, 1, 10, 0] {'pid': 0, 'name': 'kernel'} {'pid': 1, 'name': 'init'} {...} psutil.boot_time() = 1570456872.0 2019-10-07 07:01:12 psutil.users() = [suser(name='user', terminal='pts/0', host='198.51.100.1', started=1570552539.0)]