#!/usr/bin/env python
import os
for param in os.environ.keys():
print "%20s %s" % (param,os.environ[param])
About Python
Python consistently ranks as one of the most popular programming languages.
Python is a high-level, general-purpose programming language. Its design philosophy emphasizes code readability with the use of significant indentation.
Python is dynamically typed and garbage-collected. It supports multiple programming paradigms, including structured (particularly procedural), object-oriented and functional programming. It is often described as a „batteries included“ language due to its comprehensive standard library.
Guido van Rossum began working on Python in the late 1980s as a successor to the ABC programming language and first released it in 1991 as Python 0.9.0.[35] Python 2.0 was released in 2000. Python 3.0, released in 2008, was a major revision not completely backward-compatible with earlier versions. Python 2.7.18, released in 2020, was the last release of Python 2.
The Python Methods
Methods on objects are functions attached to the object’s class; the syntax instance.method(argument) is, for normal methods and functions, syntactic sugar for Class.method(instance, argument). The Python methods have an explicit self parameter to access instance data, in contrast to the implicit self (or this) in some other object-oriented programming languages (e.g., C++, Java, Objective-C, Ruby). Python provides methods, often called dunder methods (due to their names beginning and ending with double-underscores), to allow user-defined classes to modify how they are handled by native operations including length, comparison, in arithmetic operations and type conversion.
Python Libraries
Python’s large standard library provides tools suited to many tasks and is commonly cited as one of its greatest strengths. For Internet-facing applications, many standard formats and protocols such as MIME and HTTP are supported. It includes modules for creating graphical user interfaces, connecting to relational databases, generating pseudorandom numbers, arithmetic with arbitrary-precision decimals, manipulating regular expressions, and unit testing.
Most Python implementations (including CPython) include a read–eval–print loop (REPL), permitting them to function as a command line interpreter for which users enter statements sequentially and receive results immediately.
Also Python comes with an Integrated development environment (IDE) called IDLE, which is more beginner-oriented.
Other shells, including IDLE and IPython, add further abilities such as improved auto-completion, session state retention, and syntax highlighting.
Python Development
As well as standard desktop integrated development environments, there are web browser-based IDEs, including SageMath, for developing science- and math-related programs; PythonAnywhere, a browser-based IDE and hosting environment; and Canopy IDE, a commercial IDE emphasizing scientific computing.
Nagios Open Source Monitoring für die Überwachung komplexer IT-Infrastrukturen.
Nagios besteht aus einer Sammlung von Modulen zur Überwachung von Netzwerken, von Hosts und deren spezifischen Diensten, sowie ein Webinterface um Abfragen der gesammelten Daten darzustellen. Nagios steht unter der GNU GPL, ist also freie Software und läuft unter zahlreicher Unixoiden Betriebssysteme. Nagios ist wegen seiner großen Verbreitung auch im professionellen Einsatz ein Quasi-Standard geworden.
Nagios-Überwachung mit Raspberry
Raspberry Pi mit seinem lüfterlosen Design, den minimalen Ausmaßen und seinem geringen Stromverbrauch eignet sich der Raspberry Pi als Einplatinen-Computer hervorragend für einen Nagios-Monitoring-Server, der sich sogar selbst überwachen kann.
INSTALLATION
Die Installation von Nagios Core 4 auf dem Raspberry eigenen OS Raspbian, welches auf Debian basiert, ist unspektakulär. Hier in dieser Anleitung wird die Vorgehensweise für ein Raspberry Pi 3 Model B aufgezeigt, auf einer 32 GB microSD Card Typ Class 10, eine 16 GB microSD Card würde ebenfalls genügen.
SanDisk Ultra SDHC I 16 GB bis zu 80 /Sek, Class 10 Speicherkarte.
Zur Bereitstellung von Raspbian auf einer microSD Card wird hier nicht näher eingegangen. Nach boot eines Raspbian Desktop Image, wird das LXTerminal auf dem Raspbian X-Desktop geöffnet und die root shell gestartet, bei Headless Betrieb kann mit VNCViewer eine VNC Session gestartet werden, mit der Anmeldung als Benutzer pi und dem default Passwort raspberry. Möchte man das Raspbian Minimal Image einsetzen, bietet sich die Authentifizierung über SSH zum Raspberry Pi an.
Nach der Anmeldung als User pi wollen wir root werden.
pi@raspberrypi:~ $ sudo su
Zunächst werden alle benötigten Pakete als Voraussetzung aus dem Repository installiert.
Herunterladen und entpacken der Nagios Core 4 Source Pakete. Hier findet man das letzte Release, auf Github steht das Core Release sowie die Agenten und Plugins zur Verfügung.
$ cd /tmp
$ wget -O nagioscore.tar.gz https://github.com/NagiosEnterprises/nagioscore/archive/nagios-4.4.3.tar.gz
$ tar xzf nagioscore.tar.gz
Compilieren
$ cd /tmp/nagioscore-nagios-4.4.3
$ ./configure --with-httpd-conf=/etc/apache2/sites-enabled
$ make all
Erstellen des Benutzer nagios und der Gruppe. Der Apache-Benutzer www-data wird auch der nagios-Gruppe hinzugefügt.
$ useradd nagios
$ usermod -a -G nagios www-data
Die Binaries Installieren.
$ make install
Das Installieren der Service-Daemon-Dateien und das konfigurieren für den Bootvorgang.
$ make install-init
$ systemctl enable nagios.service
Installiert und konfiguriert die externe Befehlsdatei.
$ make install-commandmode
Nun werden die * SAMPLE * Konfigurationsdateien installiert. Diese sind erforderlich, da Nagios um zu starten einige Konfigurationsdateien benötigt.
$ make install-config
Es werden die Apache-Webserver-Konfigurationsdateien installiert und die Apache-Einstellungen für Nagios konfiguriert.
$ make install-webconf
$ a2enmod rewrite
$ a2enmod cgi
Es muss Port 80 für den eingehenden Datenverkehr auf der lokalen Firewall zugelassen werden, damit die Webschnittstelle von Nagios Core erreicht werden kann.
Es muss der Apache Webserver neu gestartet werden.
$ systemctl restart apache2.service
Nun wird Nagios Core gestartet.
$ systemctl start nagios.service
Nagios ist jetzt bereit und kann getestet werden.
https://10.10.10.84/nagios/
Es kommt die Aufforderung sich mit Benutzernamen und Passwort anzumelden. Der Benutzername ist nagiosadmin (du hast ihn in einem vorherigen Schritt erstellt) und das Passwort ist das, was du zuvor angegeben hast.
Nach erfolgreicher Anmeldung erscheint die Nagios Core Web-Oberfläche. Herzlichen Glückwunsch, Du hast es geschafft.
Nagios Core ist nun installiert, zum Betrieb werden noch die Nagios Plugins benötigt. Es erscheint die Fehler Meldung: (No output on stdout) stderr: execvp(/usr/local/nagios/libexec/check_load .. das ist normal, in den folgenden Schritten werden die Standard Plugins installiert.
Plugin Installation
Zur Voraussetzung der Installation der Plugins werden folgende Pakete aus dem Repository installiert.
$ apt-get install -y autoconf gcc libc6 libmcrypt-dev make libssl-dev wget bc gawk dc build-essential snmp libnet-snmp-perl gettext
Die Source Pakete herunterladen und entpacken. Auf nagios-plugins.org sind die letzten Plugin Release.
$ cd /tmp
$ wget --no-check-certificate -O nagios-plugins.tar.gz https://github.com/nagios-plugins/nagios-plugins/archive/release-2.2.1.tar.gz
$ tar zxf nagios-plugins.tar.gz
Pakete compilieren und installieren.
$ cd /tmp/nagios-plugins-release-2.2.1/
$ ./tools/setup
$ ./configure
$ make
$ make install
Gehe zu einem Host- oder Service Objekt und „Re-schedule the next check“ im Menü Commands. Der Fehler der zuvor erschien, sollte nun verschwinden und die korrekte Ausgabe wird auf dem Bildschirm angezeigt.
Die Daemon Kommandos für start / stop / restart / status.
Nachdem nun der Nagios Core Server betriebsbereit ist, geht es an das erstellen der Konfiguration der Host und Services die Überwacht werden sollen. Unter /usr/local/nagios/etc ist die Hauptkonfiguration nagios.cfg, hier werden mit cfg_file die Pfade zu den Konfigurationsdateien definiert, in einer Datei hosts.cfg können die zu überwachenden hosts eingetragen werden.
## Default Linux Host Template ##
define host{
name linux-box ; Name of this template
use generic-host ; Inherit default values
check_period 24x7
check_interval 5
retry_interval 1
max_check_attempts 10
check_command check-host-alive
notification_period 24x7
notification_interval 30
notification_options d,r
contact_groups admins
register 0 ; DONT REGISTER THIS - ITS A TEMPLATE
}
## Default
define host{
use linux-box ; Inherit default values from a template
host_name Diskstation ; The name we're giving to this server
alias Synology ; A longer name for the server
address 10.10.10.88 ; IP address of Remote Linux host
}
Soll es mehr strukturiert sein bietet sich die Möglichkeit die Host und Service Konfiguration in die Verzeichnisse printers, routers, servers, switches zu speichern, hierzu wird die Datei nagios.cfg editiert und die Kommentar Zeichen # (hash) entsprechend bei cfg_dir= entfernt.
$ vi /usr/local/nagios/etc/nagios.cfg
..
# Definitions for monitoring a Windows machine
cfg_file=/usr/local/nagios/etc/objects/windows.cfg
Es werden die in den Verzeichnissen angelegten .cfg Dateien ausgelesen.
Beispiel für ein Mail und Webserver bei diesem IMAP und HTTPS überprüft wird.
define host {
use linux-server
host_name mailserver
alias Exchange
address 10.10.10.15
max_check_attempts 5
check_period 24x7
notification_interval 30
notification_period 24x7
}
define service {
use generic-service
host_name mailserver
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}
define service {
use generic-service
host_name mailserver
service_description HTTPS
check_command check_tcp!443 -H 10.10.10.15 -u https://owa.banana.org
notifications_enabled 0
}
define service {
use generic-service
host_name mailserver
service_description IMAP
check_command check_imap
notifications_enabled 0
}
Nach jeder Änderung wird der Nagios Server neu gestartet.
$ systemctl restart nagios.service
Ein blick in die Nagios-Log Datei kann sich lohnen.
$ tail -30 /usr/local/nagios/var/nagios.log
Unter dem Verzeichnis objects findet man weitere Konfigurationsbeispiele für Linux, Windows, Printer Router und Switch.
Beispiel: Nagios Service Konfiguration
Mit Remote Agenten wie NCPA können Active Checks auf Windows und Linux Hosts ausgeführt werden, über NRDP und NRPE sind Passive Checks möglich, die werte über CPU last, Memory Nutzung, Prozesse, User und Disk Nutzung geben.
Nagios Notification
In der Datei nagios.cfg und in der Datei objects/contacts.cfg wird als Email Empfänger bei email hier in diesem Beispiel root@localhost belassen.
$ vi /usr/local/nagios/etc/objects/contacts.cfg
define contact{
contact_name nagiosadmin ; Short name of user
use generic-contact ; Inherit default values from generic-contact$
alias Nagios Admin ; Full name of user
email root@localhost ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS *$
}
In der Datei nagios.cfg bei admin_email.
$ vi /usr/local/nagios/etc/nagios.cfg
..
admin_email=root@localhost
Für die Nagios Email Notification wird hier Postfix als Mail Transport Agent verwendet. Dies wie folgt installiert und konfiguriert wird.
$ sudo apt-get -y install postfix
Während der Installation wird man zur Auswahl einer MailServer Konfiguration gefragt, hier wählen wir Internet Site.
Um das senden von Email später testen zu können, wird das Paket mailutils installiert.
$ sudo apt-get -y install mailutils
Die Postfix Hauptkonfiguration main.cf wird angepasst.
$ vi /etc/postfix/main.cf
..
relayhost = mailserver.banana.org
Bei relayhost wird der MailServer eingetragen dieser von Raspberry Pi erlaubt Emails zu empfangen, ist das Raspberry hinter einer Firewall mit NAT, muss beim MailServer die öffentliche IP Adresse für den Empfang berechtigt werden.
Eine Email Adresse für root einrichten, dazu wird die Datei aliases editiert.
$ vi /etc/aliases
..
root: helpdesk@banana.org
Es wird am ende eine gültige Email Adresse eingetragen, damit Mails von diesem Host zugestellt werden, hier als Beispiel ist es helpdesk@banana.org, der Doppelpunkt bei root: ist zwingend.
Die Änderungen in der Datei aliases müssen noch die Datei aliases.db erzeugen.
$ newaliases
Auch die Postfix Konfiguration muss noch eingelesen und aktiviert werden.
$ postfix reload
jetzt den Email Versand von Raspberry Pi testen, dies lässt sich wie folgt ausführen.
$ echo "hello from raspberry pi" | mail -s hello root
Das Email sollte nun im Posteingang von helpdesk@banana.org ankommen sein.
Hier kann auch das Email Log-Protokoll weiter Aufschluss geben.
$ tail /var/log/mail.log
Gibt der Sendeversuch den status=bounced zurück, ist der Empfang auf dem Mailer noch nicht berechtigt. Bei Exchange muss die IP Adresse des Raspberry Pi beim Empfangsconnector im FrontendTransport unter Bereichsdefinition bei E-Mail von Servern mit diesen Remote-IP-Adressen empfangen, eingetragen sein. Für Postfix muss in main.cf eine smtpd_client_restrictions direktive existieren.