Monitoring mit SNMP und MRTG Teil 2/2
(Zurück zum Inhaltsverzeichnis)
Beginnen wir mit der Einrichtung von MRTG auf dem Server, Vorausetzung ist hier, das SNMP bereits installiert wurde.
Installation
Paketdatenbank aktualisieren und MRTG installieren:
Danach mit
erstmal die Originaldatei sichern.
Da ich z.Z. ca. 30 Geräte überwache, habe ich die Vorgehensweise "etwas" geändert.
Daher erfolgt ab hier meine Art MRTG zu modular konfigurieren. Hintergrund ist,
das viele Anwendungen gleich sind und ich keine Lust habe bei einer Änderung 30 Dateien zu editieren.
Meistens bleibt es dann bei einer Datei.
Das setzt allerdings voraus, das jedes Gerät einen eigenen Ordner (WorkDir) auf dem Webserver erhält. Dazu später mehr.
Die "Grundausstattung" ist bei fast allen Geräten gleich:
Dazu wird noch eine Übersichtsseite erstellt, damit man die Geräte auch wiederfindet
Konfiguration
Dorthinein kommt das erste Steuer-File für mrtg:
mit dem Inhalt:
######################################################################
# This file is for use with mrtg-2.5.4c
# Global configuration
WorkDir: /var/www/mrtg/raspi02
PNGTitle[_]: raspi02
Include: Global.inc
Title[^]: Analysis
#---------------------------------------------------------------
# Raspberry Pi - CPU load
#---------------------------------------------------------------
Target[raspi-CPU]: 100 * (.1.3.6.1.4.1.2021.10.1.3.1&.1.3.6.1.4.1.2021.10.1.3.2:public@raspi02)
PageTop[raspi-CPU]: <H1>raspi02 - CPU load</H1>
Title[raspi-CPU]: raspi02 CPU load
Include: CPU-Load_Jessie.inc
#---------------------------------------------------------------
# Raspberry Pi - CPU temperature
#---------------------------------------------------------------
Target[raspi-CPU-temp]: .1.3.6.1.2.1.25.1.8&.1.3.6.1.2.1.25.1.7.0:public@raspi02
PageTop[raspi-CPU-temp]: <H1>raspi02 - CPU Temperature</H1>
Title[raspi-CPU-temp]: raspi02 - CPU temperature
Include: raspi-CPU-temp.inc
#---------------------------------------------------------------
# Raspberry Pi - Memory
#---------------------------------------------------------------
Target[raspi-mem]: .1.3.6.1.4.1.2021.4.6.0&.1.3.6.1.4.1.2021.4.11.0:public@raspi02
PageTop[raspi-mem]: <H1>raspi02 - Memory Usage</H1>
Title[raspi-mem]: raspi02 - Memory Usage
Include: raspi-MEM.inc
#---------------------------------------------------------------
# Raspberry Pi - Network eth0
#---------------------------------------------------------------
Target[eth0_1]: 2:public@192.168.2.2:
SetEnv[eth0_1]: MRTG_INT_IP="192.168.2.2" MRTG_INT_DESCR="eth0"
Title[eth0_1]: raspi02 - Traffic Analysis for eth0
PageTop[eth0_1]: <h1>raspi02 - Traffic Analysis for eth0</h1>
MaxBytes[eth0_1]: 12500000
Alles anzeigen
Hier stehen fast nur noch die Informationen, die den entsprechenden Client betreffen,
alles was man nochmal gebrauchen kann steht jetzt in den Include-Dateien.
Das hat den Vorteil, wenn man etwas ändern will/muß, braucht man nur eine Datei anpassen.
Die Include-Dateien
Diese legt das grundsätzliche Aussehen für alle Diagramme fest.
WriteExpires: Yes
# Nur für die Diagramme, die keine "Options" haben (Netzwerk)
Options[_]: growright, nobanner pngdate
# 10 Unterteilungen
YTics[_]: 10
# Größe des Diagramms
XSize[_]: 600
YSize[_]: 200
# Spitzenwerte auch in den Jahr, Monats- und Wochendiagramme anzeigen
WithPeak[_]: ymw
# Die Farbauswahl
Colours[_]: BLUE#0033FF, RED#FF0000, DARK GREEN#006600, VIOLET#ff00ff
# Hintergrundfarbe grau
Background[_]: #a0a0a0a
# Ist nicht schwer zu erraten
Language: german
Alles anzeigen
Speziell für CPU-Load (Und nicht nur für Raspberrys) ausgelegt
AbsMax[raspi-CPU]: 1000
MaxBytes1[raspi-CPU]: 200
MaxBytes2[raspi-CPU]: 100
Factor[raspi-CPU]: 1
YTicsFactor[raspi-CPU]: 1
Options[raspi-CPU]: integer, gauge, nopercent, unknaszero, growright, nobanner, pngdate
YLegend[raspi-CPU]: CPU %
ShortLegend[raspi-CPU]: %
LegendI[raspi-CPU]: CPU Load 1min
LegendO[raspi-CPU]: CPU Load 5min
Legend1[raspi-CPU]: CPU usage Load 1min
Legend2[raspi-CPU]: CPU usage Load 5min
Legend3[raspi-CPU]: Max. CPU usage Load 1min
Legend4[raspi-CPU]: Max. CPU usage Load 5min
Alles anzeigen
Hier wird das Script für die CPU-Temperatur ausgewertet
AbsMax[raspi-CPU-temp]: 100000
MaxBytes1[raspi-CPU-temp]: 80000
MaxBytes2[raspi-CPU-temp]: 50000
Options[raspi-CPU-temp]: gauge, nopercent, unknaszero, growright, nobanner, pngdate, noo
YLegend[raspi-CPU-temp]: Temperature °C
ShortLegend[raspi-CPU-temp]: °C:
kMG[raspi-CPU-temp]: ,
Factor[raspi-CPU-temp]: 0.001
YTicsFactor[raspi-CPU-temp]: 0.001
LegendO[raspi-CPU-temp]: CPU temperature °C:
LegendI[raspi-CPU-temp]: CPU temperature °C:
Legend1[raspi-CPU-temp]: CPU temperature in °C:
Legend2[raspi-CPU-temp]: CPU temperature in °C:
Legend3[raspi-CPU-temp]: Max. CPU temperature in °C:
Alles anzeigen
Die Auswertung des RAM-Speichers
AbsMax[raspi-mem]: 903954432
MaxBytes1[raspi-mem]: 204800000
MaxBytes2[raspi-mem]: 100524288
Options[raspi-mem]: integer, gauge, nopercent, growright, unknaszero, pngdate, nobanner
YLegend[raspi-mem]: Mem
Factor[raspi-mem]: 1024
YTicsFactor[raspi-mem]: 1024
ShortLegend[raspi-mem]: B
LegendI[raspi-mem]: Free
LegendO[raspi-mem]: Used
Legend1[raspi-mem]: Free Memory
Legend2[raspi-mem]: Used Memory
Legend3[raspi-mem]: Max. Free Memory
Legend4[raspi-mem]: Max. Used Memory
Alles anzeigen
Die Diagramme haben eine dynamische Anpassung bis "AbsMax". Alles was darüber hinausgeht wird gekappt.
Das Arbeitsverzeichniss und das Index-File
Nun muss das Arbeitsverzeichnis (für jedes Gerät) angelegt werden:
Dann das Index-File erstellen:
Damit mrtg die Diagramme füllen kann, müssen noch zwei Files geändert bzw. erstellt werden:
Dort wird die ursprüngliche Zeile auskommentiert und dafür diese Zeile eingefügt:
Das nächste File ruft dann wirklich MRTG auf:
Mit dem Inhalt:
#! /bin/bash
if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg/raspi02_mrtg.cfg ] && [ -d "$(grep '^[[:space:]]*[^#]*[[:space:]]*WorkDir' /etc/mrtg/raspi02_mrtg.cfg | awk '{ print $NF }')" ]; then env LANG=C /usr/bin/mrtg /etc/mrtg/raspi02_mrtg.cfg 2>&1 | tee -a /var/log/mrtg/raspi02_mrtg.log ; fi
Dann noch ausführbar machen:
Warum?
Wenn mehrere (bei mir ca. 30) Clients abgefragt werden, startet crontab die Abfragen parallel, und dann geht der Raspberry alle 5 min in die Knie.
Das ist ungefähr so als wenn Dir Haggrid (aus Harry Potter) alle 5 min mehrmals wohlwollend auf die Schulter klopft.
So aber werden bei dieser Vorgehensweise alle Clients nacheinander abgefragt, das verteilt die Last auf einen längeren Zeitraum.
Bei einem weiteren Client einfach die Zeile kopieren und den Rechnernamensteil austauschen (Ja, ich weiß, es geht auch eleganter).
Jetzt sollte nach etwa 10 bis 15 min die ersten Werte erscheinen.
Weil ich ein bißchen faul bin erstelle ich noch noch eine einfache Übersichtsseite:
<!doctype html public "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
</head>
<body>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<meta http-equiv="Refresh" content="300" >
<h2>MRTG</h2>
<table border=0 cellpadding=0 cellspacing=10>
<tr>
<td>
<p><h3>raspi02 DCF77</h3></p>
<p><a href="raspi02/index.html"><img alt="raspi02" src="raspi02/raspi-cpu-day.png" border="0"></a></p>
</td>
<td>
<!--
<p><h3>raspi03 CAM01</h3></p>
<p><a href="raspi03/index.html"><img alt="raspi03" src="raspi03/raspi-cpu-day.png" border="0"></a></p>
-->
</td>
</tr>
<!--
<tr>
<td>
<p><h3>raspi04 CAM02</h3></p>
<p><a href="raspi04/index.html"><img alt="raspi04" src="raspi04/raspi-cpu-day.png" border="0"></a></p>
</td>
<td>
<p><h3>raspi05 CAM03</h3></p>
<p><a href="raspi04/index.html"><img alt="raspi04" src="raspi04/raspi-cpu-day.png" border="0"></a></p>
</td>
</tr>
-->
</table>
</body>
Alles anzeigen
Wie man sieht, ist raspi03 bis raspi05 bereits vorbereitet, aber noch auskommentiert.
Edit: Fiptehler und zusätzliche Links