Il est souvent facile et souvent volumineux de représenter graphiquement les données acquises régulièrement. Cependant, je pense que les obstacles sont élevés pour les personnes inexpérimentées, j'espère donc leur offrir une entrée. (Le reste est une mission python)
A titre d'exemple, nous allons facilement représenter graphiquement les informations de / proc / meminfo
acquises régulièrement avec shell et python.
On suppose que les informations meminfo sont enregistrées au format <date> / <heure, minute, seconde> / meminfo.log
(exemple: 20160224/105312 / meminfo.log
)
Le format de meminfo ressemble à ceci
MemTotal: 511476 kB
MemFree: 269240 kB
Buffers: 13936 kB
Cached: 56044 kB
SwapCached: 0 kB
Active: 36944 kB
Inactive: 47324 kB
Active(anon): 14648 kB
Inactive(anon): 208 kB
Active(file): 22296 kB
Inactive(file): 47116 kB
Unevictable: 0 kB
Mlocked: 0 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 511476 kB
LowFree: 269240 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 14304 kB
Mapped: 16548 kB
Shmem: 568 kB
Slab: 7416 kB
SReclaimable: 2600 kB
SUnreclaim: 4816 kB
KernelStack: 504 kB
PageTables: 784 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 255736 kB
Committed_AS: 195212 kB
VmallocTotal: 1548288 kB
VmallocUsed: 8428 kB
VmallocChunk: 1350896 kB
Supposons que vous vouliez représenter graphiquement la valeur de Committed_AS
dans meminfo
$ find . -name 'meminfo.log' | sort | xargs grep Committed_AS
Ensuite, la sortie suivante est obtenue.
./20160211/190409/meminfo.log:Committed_AS: 389260 kB
./20160211/191528/meminfo.log:Committed_AS: 389300 kB
./20160211/192648/meminfo.log:Committed_AS: 394600 kB
Ceci est ensuite traité par gawk pour formater le «numéro de date».
$ find . -name 'meminfo.log' | sort | xargs grep Committed_AS | gawk 'match($0, /\/([0-9]+)\/([0-9]+).*[0-9]+ kB/, a) {print a[1] a[2], $2}'
20160211190409 389260
20160211191528 389300
20160211192648 394600
Puis dessinez ceci avec matplot
plot_date.py
#!/usr/bin/env python3
import matplotlib.pyplot as plt
from datetime import datetime as dt
import sys
[date, y] = zip(*[l.split() for l in sys.stdin])
date=[dt.strptime(d, "%Y%m%d%H%M%S") for d in date]
plt.plot(date,y)
plt.show()
$ find . -name 'meminfo.log' | sort | xargs grep Committed_AS | gawk 'match($0, /\/([0-9]+)\/([0-9]+).*[0-9]+ kB/, a) {print a[1] a[2], $2}' | python3 plot_date.py
Recommended Posts