From 13273356dce10fee04c3e043592ca9ac810ed090 Mon Sep 17 00:00:00 2001 From: Kekskurse Date: Mon, 30 Dec 2019 16:18:42 +0100 Subject: [PATCH] Stuff --- .gitignore | 2 ++ exporter/__init__.py | 0 exporter/cli.py | 8 +++++++ exporter/statsd.py | 0 monitors/__init__.py | 0 monitors/cpu.py | 14 ++++++++++++ monitors/hdd.py | 17 +++++++++++++++ monitors/load.py | 12 +++++++++++ monitors/network.py | 50 +++++++++++++++++++++++++++++++++++++++++++ monitors/processes.py | 11 ++++++++++ monitors/ram.py | 25 ++++++++++++++++++++++ monitors/user.py | 9 ++++++++ requirements.txt | 2 ++ run.py | 28 ++++++++++++++++++++++++ 14 files changed, 178 insertions(+) create mode 100644 .gitignore create mode 100644 exporter/__init__.py create mode 100644 exporter/cli.py create mode 100644 exporter/statsd.py create mode 100644 monitors/__init__.py create mode 100644 monitors/cpu.py create mode 100644 monitors/hdd.py create mode 100644 monitors/load.py create mode 100644 monitors/network.py create mode 100644 monitors/processes.py create mode 100644 monitors/ram.py create mode 100644 monitors/user.py create mode 100644 requirements.txt create mode 100644 run.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5a77a27 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.pyc +*__pycache__ diff --git a/exporter/__init__.py b/exporter/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/exporter/cli.py b/exporter/cli.py new file mode 100644 index 0000000..6f2b3c3 --- /dev/null +++ b/exporter/cli.py @@ -0,0 +1,8 @@ +import socket +class Cli: + def __init__(self): + self.servername = socket.gethostname() + def gauge(self, name, value): + print("g|server."+self.servername+"."+name+" "+str(value)) + def incr(self, name, value): + print("i|server."+self.servername+"."+name+" "+str(value)) diff --git a/exporter/statsd.py b/exporter/statsd.py new file mode 100644 index 0000000..e69de29 diff --git a/monitors/__init__.py b/monitors/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/monitors/cpu.py b/monitors/cpu.py new file mode 100644 index 0000000..56ed451 --- /dev/null +++ b/monitors/cpu.py @@ -0,0 +1,14 @@ +import psutil +class CPU: + interval = 10; + loopCount = 0 + + def __init__(self, exporter): + self.exporter = exporter + + def run(self): + cpus = psutil.cpu_percent(interval=1, percpu=True) + i = 0 + for cpu in cpus: + i = i + 1 + self.exporter.gauge("cpu."+str(i), cpu) diff --git a/monitors/hdd.py b/monitors/hdd.py new file mode 100644 index 0000000..2e53ba0 --- /dev/null +++ b/monitors/hdd.py @@ -0,0 +1,17 @@ +import os +import psutil +class HDD: + interval = 10; + loopCount = 0 + def __init__(self, exporter): + self.exporter = exporter + + def run(self): + discs = psutil.disk_partitions() + for disc in discs: + name = disc.device.split("/")[-1] + usage = psutil.disk_usage(disc.mountpoint) + self.exporter.gauge("hdd."+name+".total", usage.total) + self.exporter.gauge("hdd."+name+".used", usage.used) + self.exporter.gauge("hdd."+name+".free", usage.free) + self.exporter.gauge("hdd."+name+".percent", usage.percent) diff --git a/monitors/load.py b/monitors/load.py new file mode 100644 index 0000000..255018b --- /dev/null +++ b/monitors/load.py @@ -0,0 +1,12 @@ +import os +class Load: + interval = 10; + loopCount = 0 + def __init__(self, exporter): + self.exporter = exporter + + def run(self): + load1, load5, load15 = os.getloadavg() + self.exporter.gauge("load.1min", load1) + self.exporter.gauge("load.5min", load5) + self.exporter.gauge("load.11min", load15) diff --git a/monitors/network.py b/monitors/network.py new file mode 100644 index 0000000..80d2896 --- /dev/null +++ b/monitors/network.py @@ -0,0 +1,50 @@ +import psutil +class Network: + interval = 1; + loopCount = 0 + def __init__(self, exporter): + self.exporter = exporter + self.last = {} + + def run(self): + data = psutil.net_io_counters(True, False) + for device in data: + if device in self.last: + bytes_sent = data[device].bytes_sent - self.last[device]["bytes_sent"] + bytes_recv = data[device].bytes_sent - self.last[device]["bytes_recv"] + packets_sent = data[device].packets_sent - self.last[device]["packets_sent"] + packets_recv = data[device].packets_recv - self.last[device]["packets_recv"] + errin = data[device].errin - self.last[device]["errin"] + errout = data[device].errout - self.last[device]["errout"] + dropin = data[device].dropin - self.last[device]["dropin"] + dropout = data[device].dropout - self.last[device]["dropout"] + self.exporter.incr("net."+device+".bytes_sent", bytes_sent) + self.exporter.incr("net."+device+".bytes_recv", bytes_recv) + self.exporter.incr("net."+device+".packets_sent", packets_sent) + self.exporter.incr("net."+device+".packets_recv", packets_recv) + self.exporter.incr("net."+device+".errin", errin) + self.exporter.incr("net."+device+".errout", errout) + self.exporter.incr("net."+device+".dropin", dropin) + self.exporter.incr("net."+device+".dropout", dropout) + else: + self.last[device] = {} + self.last[device]["bytes_sent"] = data[device].bytes_sent + self.last[device]["bytes_recv"] = data[device].bytes_recv + self.last[device]["packets_sent"] = data[device].packets_sent + self.last[device]["packets_recv"] = data[device].packets_recv + self.last[device]["errin"] = data[device].errin + self.last[device]["errout"] = data[device].errout + self.last[device]["dropin"] = data[device].dropin + self.last[device]["dropout"] = data[device].dropout + self.exporter.gauge("net."+device+".bytes_sent", data[device].bytes_sent) + self.exporter.gauge("net."+device+".bytes_recv", data[device].bytes_recv) + self.exporter.gauge("net."+device+".packets_sent", data[device].packets_sent) + self.exporter.gauge("net."+device+".packets_recv", data[device].packets_recv) + self.exporter.gauge("net."+device+".errin", data[device].errin) + self.exporter.gauge("net."+device+".errout", data[device].errout) + self.exporter.gauge("net."+device+".dropin", data[device].dropin) + self.exporter.gauge("net."+device+".dropout", data[device].dropout) + #print(device) + #print(data[device].bytes_sent) + #print(data) + #self.exporter.gauge("users", len(psutil.users())) diff --git a/monitors/processes.py b/monitors/processes.py new file mode 100644 index 0000000..efd7ce1 --- /dev/null +++ b/monitors/processes.py @@ -0,0 +1,11 @@ +import os +class Processes: + interval = 10; + loopCount = 0 + def __init__(self, exporter): + self.exporter = exporter + + def run(self): + stream = os.popen('ps fax | wc -l') + output = stream.read() + self.exporter.gauge("processes", int(output)) diff --git a/monitors/ram.py b/monitors/ram.py new file mode 100644 index 0000000..67bbe15 --- /dev/null +++ b/monitors/ram.py @@ -0,0 +1,25 @@ +from psutil import virtual_memory, swap_memory +class Ram: + interval = 10; + loopCount = 0 + def __init__(self, exporter): + self.exporter = exporter + + def run(self): + mem = virtual_memory() + self.exporter.gauge("ram.total", mem.total) + self.exporter.gauge("ram.available", mem.available) + self.exporter.gauge("ram.percent", mem.percent) + self.exporter.gauge("ram.used", mem.used) + self.exporter.gauge("ram.free", mem.free) + self.exporter.gauge("ram.active", mem.active) + self.exporter.gauge("ram.inactive", mem.inactive) + self.exporter.gauge("ram.buffers", mem.buffers) + self.exporter.gauge("ram.cached", mem.cached) + self.exporter.gauge("ram.shared", mem.shared) + self.exporter.gauge("ram.slab", mem.slab) + mem = swap_memory() + self.exporter.gauge("swap.total", mem.total) + self.exporter.gauge("swap.percent", mem.percent) + self.exporter.gauge("swap.used", mem.used) + self.exporter.gauge("swap.free", mem.free) diff --git a/monitors/user.py b/monitors/user.py new file mode 100644 index 0000000..dcf7d6c --- /dev/null +++ b/monitors/user.py @@ -0,0 +1,9 @@ +import psutil +class User: + interval = 10; + loopCount = 0 + def __init__(self, exporter): + self.exporter = exporter + + def run(self): + self.exporter.gauge("users", len(psutil.users())) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..cd5cf23 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +psutil==5.6.7 +statsd==3.3.0 diff --git a/run.py b/run.py new file mode 100644 index 0000000..18fcec3 --- /dev/null +++ b/run.py @@ -0,0 +1,28 @@ +import time +from exporter.cli import Cli +from monitors.load import Load +from monitors.hdd import HDD +from monitors.processes import Processes +from monitors.ram import Ram +from monitors.cpu import CPU +from monitors.user import User +from monitors.network import Network + +exporter = Cli() + +checks = [] +checks.append(Load(exporter)) +checks.append(HDD(exporter)) +checks.append(Processes(exporter)) +checks.append(Ram(exporter)) +checks.append(CPU(exporter)) +checks.append(User(exporter)) +checks.append(Network(exporter)) + +while True: + for check in checks: + if check.loopCount > check.interval: + check.run() + check.loopCount = -1; + check.loopCount = check.loopCount + 1 + time.sleep(1)