root / snf-cyclades-gtools / collectd / plugins / ganeti-cpustats.py @ 2439c9d6
History | View | Annotate | Download (1 kB)
1 | 2439c9d6 | Stratos Psomadakis | #!/usr/bin/env python
|
---|---|---|---|
2 | 2439c9d6 | Stratos Psomadakis | |
3 | 2439c9d6 | Stratos Psomadakis | import os |
4 | 2439c9d6 | Stratos Psomadakis | import collectd |
5 | 2439c9d6 | Stratos Psomadakis | |
6 | 2439c9d6 | Stratos Psomadakis | from glob import glob |
7 | 2439c9d6 | Stratos Psomadakis | |
8 | 2439c9d6 | Stratos Psomadakis | |
9 | 2439c9d6 | Stratos Psomadakis | def get_vcpus(pid): |
10 | 2439c9d6 | Stratos Psomadakis | """Get a KVM instance vCPU count by looking at its fd's"""
|
11 | 2439c9d6 | Stratos Psomadakis | vcpus = 0
|
12 | 2439c9d6 | Stratos Psomadakis | for fd in glob("/proc/%d/fd/*" % pid): |
13 | 2439c9d6 | Stratos Psomadakis | # XXX: sad but trueeeeeeeeeeee
|
14 | 2439c9d6 | Stratos Psomadakis | if os.readlink(fd) == "anon_inode:kvm-vcpu": |
15 | 2439c9d6 | Stratos Psomadakis | vcpus += 1
|
16 | 2439c9d6 | Stratos Psomadakis | return vcpus
|
17 | 2439c9d6 | Stratos Psomadakis | |
18 | 2439c9d6 | Stratos Psomadakis | |
19 | 2439c9d6 | Stratos Psomadakis | def cpustats(data=None): |
20 | 2439c9d6 | Stratos Psomadakis | for file in glob("/var/run/ganeti/kvm-hypervisor/pid/*"): |
21 | 2439c9d6 | Stratos Psomadakis | instance = os.path.basename(file)
|
22 | 2439c9d6 | Stratos Psomadakis | try:
|
23 | 2439c9d6 | Stratos Psomadakis | pid = int(open(file, "r").read()) |
24 | 2439c9d6 | Stratos Psomadakis | proc = open("/proc/%d/stat" % pid, "r") |
25 | 2439c9d6 | Stratos Psomadakis | cputime = [int(proc.readline().split()[42])] |
26 | 2439c9d6 | Stratos Psomadakis | except EnvironmentError: |
27 | 2439c9d6 | Stratos Psomadakis | continue
|
28 | 2439c9d6 | Stratos Psomadakis | vcpus = get_vcpus(pid) |
29 | 2439c9d6 | Stratos Psomadakis | proc.close() |
30 | 2439c9d6 | Stratos Psomadakis | |
31 | 2439c9d6 | Stratos Psomadakis | vl = collectd.Values(type="derive")
|
32 | 2439c9d6 | Stratos Psomadakis | vl.host = instance |
33 | 2439c9d6 | Stratos Psomadakis | vl.plugin = "cpu"
|
34 | 2439c9d6 | Stratos Psomadakis | vl.type = "virt_cpu_total"
|
35 | 2439c9d6 | Stratos Psomadakis | total = sum(cputime) * 100 / (vcpus * os.sysconf("SC_CLK_TCK")) |
36 | 2439c9d6 | Stratos Psomadakis | vl.dispatch(values=[total]) |
37 | 2439c9d6 | Stratos Psomadakis | |
38 | 2439c9d6 | Stratos Psomadakis | collectd.register_read(cpustats) |
39 | 2439c9d6 | Stratos Psomadakis | |
40 | 2439c9d6 | Stratos Psomadakis | # vim: set ts=4 sts=4 et sw=4 : |