Manchmal kann es nötig sein in einem script die IP Adresse des Rechners zu extrahieren. Dies geht über folgende Zeile:
IP="`/sbin/ifconfig eth0 | grep 'inet addr' | awk '{print $2}' | sed -e 's/.*://'`" |
Manchmal kann es nötig sein in einem script die IP Adresse des Rechners zu extrahieren. Dies geht über folgende Zeile:
IP="`/sbin/ifconfig eth0 | grep 'inet addr' | awk '{print $2}' | sed -e 's/.*://'`" |
Einfache mails kann man von der Linux Shell ganz einfach mittels:
echo "message body" | mail -s "subject" user@example.org |
senden.
Schwieriger wirds bei attachments, da diese jeweils MIME-codiert werden müssen um beim Empfänger richtig angezeigt zu werden. – Zwar könnte man die files mittels mimeencode vor dem senden codieren, einfacher gehts jedoch mit dem Kommandozeilen tool "mutt", welches ggf. noch installiert werden muss:
mutt -s "subject" user.name@example.org -a /pfad/zum/file < /dev/null |
Anstatt /dev/null kann man natürlich auch ne textdatei angeben, die dann als message body eingefügt wird.
Windows XP gesteht Partitionen nur Laufwerksbuchstaben zwischen C und Z zu. Wenn man eine Partition auf B legen möchten, muss man etwas tricksen.
Um den Buchstaben zu ändern, öffnet man eine Kommandozeile (Start > Ausführen > cmd > OK) und tippt mountvol ein. Das Tool zeigt nun alle Geräte und den entsprechenden Mountpunkt (Laufwerksbuchstaben) an.
Nun kopiert man die Volume-ID des zu bearbeitenden Laufwerks (zum Beispiel {5ce033e0-a1a3-11db-b93c-806d6172696f}) und gibt anschliessend
mountvol Z: /D |
ein (wobei Z für den zu ändernden Laufwerksbuchstaben steht). Damit unmountet man die Partition.
Letztendlich muss man das Volume wieder als B: einhängen. Dazu gibt man mountvol B: ?Volume{VOLUME-ID} ein. Wobei VOLUME-ID für die oben notierte ID des Gerätes steht:
mountvol B: ?Volume{5ce033e0-a1a3-11db-b93c-806d6172696f} |
Nun sollte die Partition im Explorer oder Arbeitsplatz an der neuen Stelle mit der neuen Kennung stehen. Um diese Schritte rückgängig zu machen kann man die Datenträgerverwaltung verwenden oder wieder das Kommandozeilentool bemühen.
h1. Quellen
http://www.computerleben.net/artikel/Einer_Partition_B:_zuweisen-251.html
Eine Standard Linux Installation kommt in der Regel mit 10-20 "Standard User Accounts", etwa "games" oder "news". – Häufig braucht man diese jedoch gar nicht und wenn man sein System absichert ist das sogar hinderlich.
Mit folgender Shell-Zeile kann man deswegen alle Benutzer auflisten lassen denen irgendwo auf dem System Files gehören; alle die NICHT aufgelistet sind können gefahrlos gelöscht werden:
cut -f 1 -d : /etc/passwd | while read i; do find / -user "$i" | grep -q . && echo "$i"; done 2> /dev/null |
Und das selbe geht natürlich auch für die Benutzergruppen:
cut -f 1 -d : /etc/group | while read i; do find / -group "$i" | grep -q . && echo "$i"; done 2> /dev/null |
[stextbox id=“warning“ caption=“Achtung“]Ab CentOS 5.6 ist das Problem mit der glibc zwar wieder behoben; doch dann stürzt die vmware-konsole ab (vmware-hostd mit einem „Segemnation fault“), wenn der hack aktiv ist!
Um das Problem dann wieder zu lösen muss man lediglich in /usr/sbin/vmware-hostd die zweitletzte Zeile
export LD_LIBRARY_PATH=/usr/lib/vmware/lib/libc.so.6:$LD_LIBRARY_PATH |
auskommentieren oder löschen.
Diese Beschreibung bleibt deshalb nur noch als Referenz hier und für solche welche den Hack früher schon mal gemacht hatten. – Falls der Hack noch nicht ausgeführt wurde, sollte man ab jetzt gleich auf CentOS 5.6 upgraden.[/stextbox]
Nach dem upgrade von CentOS 5.3 auf 5.4 oder eine höhere Version stürzt die vmware web-konsole mit einem "HTTP error code" ab.
Grund ist ein bug in vmware, der mit der aktuellen glibc nicht zurecht kommt.
Glücklicherweise lässt sich dies aber sehr einfach lösen, indem man die alte glibc herunter lädt und diese mit vmware verlinkt.
Folgendes script löst das Problem automatisch:
#!/bin/bash ########################################### # This may help using the vmware-server2 # # on a CentOS 5.4 x86_64 Host. # # There is a problem with the the libc # # More informations: # # <a href="http://bugs.centos.org/view.php?id=3884" target="blank">http://bugs.centos.org/view.php?id=3884</a> # #-----------------------------------------# # Version 0.1 # # This script will get the 'old' libc # # from the CentOS 5.3 repositories and # # configures vmware-server2 to use this # # The original libc (for the 5.4-system) # # will not be replaced or touched. # #-----------------------------------------# # License: Do with the code whatever you # # want. This came without any warrenty. # ########################################### LIBC_DIR="/usr/lib/vmware/lib/libc.so.6" TEMP_DIR="/tmp/vmw_glibc" VMWARE_CONFIGFILE="/usr/sbin/vmware-hostd" VMWARE_CONFIGFILE_BAK=$VMWARE_CONFIGFILE.bak # Checking for root if <span class="keys"> $EUID -ne 0 </span>; then echo "This script must be run as root" exit 1 fi # We test for the commands we need: echo "Looking for some commands I need..." which wget if [ $? != 0 ]; then echo "I can't find wget but need it to download the files. Please install." fi which rpm2cpio if [ $? != 0 ]; then echo "I can't find rpm2cpio but need it to extract Files from a .rpm-file. Please install." fi # Creating a directory for the 'old' glibc mkdir -p $LIBC_DIR if [ $? != 0 ]; then echo "Can't create directory $LIBC_DIR" exit 2 fi # Removing and creating a temporary directory for the rpm, # downloading it, extracting the old glibc and copy # the them to our new directory rm -rf $TEMP_DIR mkdir -p $TEMP_DIR if [ $? != 0 ]; then echo "Can't create directory $TEMP_DIR" exit 2 fi cd $TEMP_DIR wget <a href="http://vault.centos.org/5.3/os/x86_64/CentOS/glibc-2.5-34.x86_64.rpm" target="blank">http://vault.centos.org/5.3/os/x86_64/CentOS/glibc-2.5-34.x86_64.rpm</a> if [ $? != 0 ]; then echo "Something was wrong while downloading" exit 2 fi rpm2cpio glibc-2.5-34.x86_64.rpm | cpio -ivd mv lib64/libc-2.5.so $LIBC_DIR/libc.so.6 if [ $? != 0 ]; then echo "Can't move the libc into directory $LIBC_DIR" echo "Removing temporary files..." echo -rf $TEMP_DIR exit 2 fi echo "The file libc-2.5.so from the centOS 5.3 rep. was saved in: $LIBC_DIR as libc.so.6" echo "Removing temporary files..." rm -rf $TEMP_DIR # Now we editing the start-config of the vmware-server echo "I must change $VMWARE_CONFIGFILE now, you will find a backup in $VMWARE_CONFIGFILE_BAK" mv $VMWARE_CONFIGFILE $VMWARE_CONFIGFILE_BAK cat $VMWARE_CONFIGFILE_BAK | grep -v 'eval exec "$DEBUG_CMD" "$binary" "$@"' > $VMWARE_CONFIGFILE echo export LD_LIBRARY_PATH=$LIBC_DIR/libc.so.6:'$LD_LIBRARY_PATH' >> $VMWARE_CONFIGFILE echo '' >> $VMWARE_CONFIGFILE echo 'eval exec "$DEBUG_CMD" "$binary" "$@"' >> $VMWARE_CONFIGFILE # Ensuring the script is executable chmod 555 $VMWARE_CONFIGFILE echo "Everything is done, please restart your vmware-server2" |
Nach dem ausführen des scriptes sollte überprüft werden ob das file: /usr/sbin/vmware-hostd ausführbar ist.
Weiter öffnet man am besten mal: /usr/sbin/vmware-hostd und prüft die unterste export Zeile; dabei muss man darauf achten, dass LD_LIBRARY_PATH auf das Verzeichnis zeigt wo die "libc.so.6" liegt und nicht das File selbst!
So ist es falsch:
export LD_LIBRARY_PATH=/usr/lib/vmware/lib/libc.so.6/libc.so.6:$LD_LIBRARY_PATH |
So sieht die korrekte export-Zeile aus:
export LD_LIBRARY_PATH=/usr/lib/vmware/lib/libc.so.6:$LD_LIBRARY_PATH |
(Dies wird manchmal vom script durcheinander gebracht)
Nach einem vmware-neustart sollte sich dann die Konsole wieder öffnen lassen.
[stextbox id=“note“ caption=“Hinweis“]Seit der Firefox-Version 3.6 lässt sich die vmware Web-Konsole nicht mehr korrekt öffnen; dies ist jedoch nicht mit diesem bug relevant, sondern ein Bug im Firefox-Plugin.[/stextbox]
Bei OpenVPN kann es vorkommen, dass jedes mal wenn sich ein Client reconnected versucht er sich auf einen neuen Port; aufsteigend ab 2048 zu Verbinden, d.h.: 2048,2049,2050,2051,usw., was natürlich die Firewall blockt. Die Meldungen im log sehen dann so aus:
openvpn[1388]: MULTI: multi_create_instance called openvpn[1388]: XX.XX.XX.XX:<B>2056</B> Re-using SSL/TLS context openvpn[1388]: XX.XX.XX.XX:2056 LZO compression initialized openvpn[1388]: XX.XX.XX.XX:2056 Control Channel MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ] openvpn[1388]: XX.XX.XX.XX:2056 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ] openvpn[1388]: XX.XX.XX.XX:2056 Local Options hash (VER=V4): '530fdded' openvpn[1388]: XX.XX.XX.XX:2056 Expected Remote Options hash (VER=V4): '41690919' openvpn[1388]: XX.XX.XX.XX:2056 TLS: Initial packet from XX.XX.XX.XX:<B>2056</B>, sid=355db726 61057e4d openvpn[1388]: XX.XX.XX.XX:2056 write UDPv4 []: Operation not permitted (code=1) openvpn[1388]: XX.XX.XX.XX:2056 write UDPv4 []: Operation not permitted (code=1) openvpn[1388]: XX.XX.XX.XX:2056 write UDPv4 []: Operation not permitted (code=1) openvpn[1388]: XX.XX.XX.XX:2056 write UDPv4 []: Operation not permitted (code=1) openvpn[1388]: XX.XX.XX.XX:2056 write UDPv4 []: Operation not permitted (code=1) openvpn[1388]: XX.XX.XX.XX:2056 write UDPv4 []: Operation not permitted (code=1) openvpn[1388]: XX.XX.XX.XX:2056 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity) openvpn[1388]: XX.XX.XX.XX:2056 TLS Error: TLS handshake failed |
Entsprechend auf den client:
daemon.notice openvpn(custom_config)[995]: SIGUSR1[soft,tls-error] received, process restarting daemon.notice openvpn(custom_config)[995]: Restart pause, 2 second(s) daemon.notice openvpn(custom_config)[995]: Re-using SSL/TLS context daemon.notice openvpn(custom_config)[995]: LZO compression initialized daemon.notice openvpn(custom_config)[995]: Control Channel MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ] daemon.notice openvpn(custom_config)[995]: Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ] daemon.notice openvpn(custom_config)[995]: Local Options hash (VER=V4): '41690919' daemon.notice openvpn(custom_config)[995]: Expected Remote Options hash (VER=V4): '530fdded' daemon.notice openvpn(custom_config)[995]: UDPv4 link local: [undef] daemon.notice openvpn(custom_config)[995]: UDPv4 link remote: 178.83.21.126:1194 daemon.err openvpn(custom_config)[995]: TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity) daemon.err openvpn(custom_config)[995]: TLS Error: TLS handshake failed daemon.notice openvpn(custom_config)[995]: TCP/UDP: Closing socket |
Schuld daran ist der nobind-Parameter, der manchmal in OpenVPN Dokumentationen bei Verbindungen mit dynamischer IP-Adresse empfohlen wird. – Denn ist dieser aktiviert bindet sich OpenVPN zwar nicht mehr an die IP-Adresse, aber eben auch nicht mehr an einen Port, was sehr mühsam ist.
Das herausnehmen des nobind-parameters löst dieses Problem dann.
Nachdem ich mein Postfix für die Verwendung mit mysql Tabellen konfiguriert hatte, bekam ich auf einmal beinahe täglich mails, die den Text: "451 4.3.0 Error: queue file write error" und/oder: "Temporary lookup failure" enthielten:
Transcript of session follows. Out: 220 mail.domain.tld ESMTP Postfix In: EHLO [X.X.X.X] Out: 250-mail.domain.tld Out: 250-PIPELINING Out: 250-SIZE 10240000 Out: 250-VRFY Out: 250-ETRN Out: 250-AUTH PLAIN LOGIN Out: 250-AUTH=PLAIN LOGIN Out: 250-ENHANCEDSTATUSCODES Out: 250-8BITMIME Out: 250 DSN In: AUTH PLAIN XXXXXXXXXXXXXXXXXXXXXXX Out: 235 2.0.0 Authentication successful In: MAIL FROM:<sender@example.org> SIZE=1037 Out: 250 2.1.0 Ok In: RCPT TO:<empfaenger@example.org> Out: 250 2.1.5 Ok In: DATA Out: 354 End data with <CR><LF>.<CR><LF> Out: 451 4.3.0 Error: queue file write error Session aborted, reason: lost connection |
Zwar schien alles zu funktionieren und die mails kamen auch immer noch rein, ich wollte jedoch der Meldung nachgehen.
Im maillog wurde ich dann fündig, denn folgende Fehlermeldung tauchte ziemlich oft auf:
warning: mysql query failed: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '= |
Dies kam davon, weil ich die postfix Datenbank noch auf dem alten Server angelegt hatte und auf dem der Zeichensatz: latin1_swedish_ci standardmässig eingestellt war, beim neuen Server war jedoch UTF8 standard.
Das Problem kann man dann lösen, wenn man die Postfix Datenbank wie folgt konvertiert:
Login auf mysql:
mysql -uroot -p |
dann für jede Tabelle:
ALTER TABLE tbl_name CHARACTER SET utf8 COLLATE utf8_general_ci; |
und für jedes Textfeld:
ALTER TABLE tbl_name MODIFY email varchar(255) CHARACTER SET utf8; |
Sobald man eine Anzahl Server und andere Netzwerkgeräte zu administrieren hat, kommt man beim Thema monitoring nicht vorbei. Damit lässt sich beispielsweise überwachen ob ein Webserver noch läuft, ob der Toner im Drucker schon verbraucht ist und vieles mehr. Wir werden hier einen Nagios monitoring Host aufsetzen und schritt-für-schritt dessen Funktionalität erklären.
todo
Die Standard-Konfiguration in Nagios ist jedoch etwas suboptimal aufgebaut und sieht vor, dass man für jeden Host eine Konfigurationsdatei hat in der die Services gleich definiert sind. Dies hat dann jedoch den Nachteil, dass man häufig verwendete Servicechecks bei jedem Host wieder neu definieren muss, was mit der Zeit sehr unübersichtlich und mühsam wird.
Wir werden deshalb ein besonderes Augenmerk auf eine professionelle Konfiguration richten, die auch in grossen, professionellen Umgebungen hält.
In Nagios ist alles als ein sogenanntes „Objekt“ definiert; diese kann man sich wie die Objekte bei der Programmierung vorstellen.
Man definiert zuerst ein sog. „Objekt-Template“; dieses hat dann schon mal die Grundlegenden Eigenschaften, wie Benachrichtigungs-Intervall, Kontaktgruppen an den die Benachrichtigung gesendet wird, usw.
Dann erstellt man für die verschiedenen Subtypen weitere Objekte, die dann die Eigenschaften des vorherigen Objektes „erben“. Diese Eigenschaften kann man dann überschreiben und/oder noch zusätzliche Eigenschaften hinzufügen.
Die Standard-Definitionen befinden sich in der Datei „templates.cfg“.
Hier findet man Objekt-Vorlagen (templates) zu den typen: contacts, contactgroups, hosts, hostgroups und services.
Schauen wir uns mal ein Beispiel für einen Host an:
define host{
name generic-host ; The name of this host template
notifications_enabled 1 ; Host notifications are enabled
event_handler_enabled 1 ; Host event handler is enabled
flap_detection_enabled 1 ; Flap detection is enabled
failure_prediction_enabled 1 ; Failure prediction is enabled
process_perf_data 1 ; Process performance data
retain_status_information 1 ; Retain status information across program restarts
retain_nonstatus_information 1 ; Retain non-status information across program restarts
notification_period 24x7 ; Send host notifications at any time
register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
}
Wir möchten nun einen Host für die Linux-Server machen, der genau so eingestellt ist wie „generic-host“, mit zwei Ausnahmen:
Dies würde dann so aussehen:
define host{
name linux-server
use generic-host
notification_period workhours
contact_groups linux-admins
register 0
}
Mit dem Keyword „use“ sagt man hier, dass man alles von „generic-host“ übernehmen will, danach definiert man „notification_period“ neu und fügt „contact_groups“ hinzu.
Und bei der Definition eines Hosts verwendet man dann dieses template, wieder mit „use“ (aber ohne „register“ am Schluss!) wie folgt:
define host{
use linux-server
host_name host1
alias host1
address XX.XX.XX.XX
}
Nun noch eine kurze Beschreibung der verschiedenen Objekttypen:
Jede Person, die nagios benutzt muss als ein Kontakt-Objekt definiert sein; die grunsätzlichen Parameter sind: name, email und evtl. pager (handy/sms) Nummer.
Mehrere Kontakte können in einer Kontakgruppe zusammen gefasst werden, z.B. „linux-admins“.
Nagios benutzt diese Informationen hauptsächlich um Benachrichtigungen zu versenden; als Benachrichtigungsempfänger kann man entweder nur einen einzelnen Kontakt oder eine ganze Kontaktgruppe angeben.
[stextbox id=“note“ caption=“Hinweis“]Jede Person, die auch das Nagios-Frontend verwenden möchte, muss zusätzlich in der Datei: /etc/nagios/htpasswd.users stehen.
Um nun einen Benutzeraccount fürs Frontend zu erstellen benutzt man am besten das Programm htpasswd:
htpasswd /etc/nagios/htpasswd.users USERNAME |
[/stextbox]
Wie die Kontakte muss jeder Host, den man überwachen möchte als Host-Objekt definiert sein. – Man kann hier auch wieder mehrere Hosts in einer Hostgruppe zusammenfassen; dies macht vor allem da Sinn wo man gewisse checks für mehrere Hosts gleichzeitig machen mcöhte.
[stextbox id=“note“ caption=“Hinweis“]Eine gute Idee ist es deshalb für alle Hosts die ähnlich konfiguriert sind eine Gruppe zu machen, beispielsweise „centos“ oder „ubuntu“.[/stextbox]
Für jeden „Service“ (z.B. http, ssh oder backup) den man überwachen möchte, muss man nun noch ein Service-Objekt definieren.
In diesem Objekt kann man auch wieder definieren an wen die Benachrichtigungen gehen sollen (contact,contactgroup) und auf welchen Host der Service überwacht werden soll.
Man kann hier auch wieder „Service-Gruppen“ machen, doch das wird in der Regel sehr selten verwendet.
Die Installation wurde auf einem CentOS-System gemacht, kann aber natürlich für alle weiteren Systeme 1:1 umgsetzt werden; lediglich Paketmanager und Paketnamen unterscheiden sich jeweils geringfügig.
Zuerst installieren wir nagios, nagios-plugins und nrpe:
yum install icinga icinga-gui icinga-idoutils nagios-plugins nagios-plugins-setuid nagios-plugins-nrpe
Da die Konfiguration eines Nagios-Systems bereits nach kurzer Zeit sehr komplex werden kann, macht es Sinn eine gescheite Struktur aufzubauen.
Grundsätzlich werden wir alle Konfigurations-Dateien in Verzeichnis /etc/conf.d/ haben; möchte man nun aber noch externe Netzwerke (z.B. die von Kunden) überwachen sollte man diese nicht mit den „eigenen“ mischen; stattdessen würde man ein Verzeichnis /etc/conf.d.KUNDE anlegen und diese in der Datei /etc/nagios/nagios.cfg als cfg_dir eintragen.
Danach gibt es zwei sinnvolle Konfigurationen, welche man nimmt hängt von den individuellen Vorlieben ab; diese werde ich hier kurz erklären:
Bei dieser Konfiguration würde man eine Datei für alle Kontakte-, eine für alle Hosts-, eine für alle Hostgruppen-, eine für alle Services- und eine Datei erstellen die dann die Checks den Hosts zuweist.
Diese Struktur würde so aussehen:
/etc/nagios/ |-- cgi.cfg |-- conf.d | |-- checks.cfg | |-- commands.cfg | |-- contacts.cfg | |-- hostgroups.cfg | |-- hosts.cfg | |-- services.cfg | |-- templates.cfg | `-- timeperiods.cfg |-- htpasswd.users |-- nagios.cfg |-- nrpe.cfg `-- resource.cfg
Bei der zweiten Konfiguration würde man für Kontakte-, Hosts-, Hostgruppe- und Services je ein Verzeichnis erstellen und darin für jeden Service eine Datei. Dies sähe dann so aus:
/etc/nagios/ |-- cgi.cfg |-- conf.d | |-- contactgroups | | |-- admins.cfg | | `-- linux-admins.cfg | |-- contacts | | |-- Hans_Muster.cfg | | |-- John_Doe.cfg | | `-- nagiosadmin.cfg | |-- hostgroups | | `-- linux.cfg | |-- hosts | | |-- host1.cfg | | |-- host2.cfg | | `-- host3.cfg | |-- misc | | |-- commands.cfg | | |-- templates.cfg | | `-- timeperiods.cfg | `-- services | |-- backup.cfg | |-- http.cfg | |-- load.cfg | |-- ping.cfg | |-- ssh.cfg | `-- yum.cfg |-- htpasswd.users |-- nagios.cfg |-- nrpe.cfg `-- resource.cfg
Für welche der beiden Varianten man sich entscheidet ist egal, beide sind sehr flexibel und auch in grossen Umgebungen noch übersichtlich. Ich werde später die Konfiguration beider Varianten erklären, machen muss/kann man natürlich nur eine. 😉
Zuerst jedoch erstellen wir mal die Basisstruktur.
Da wir die Konfiguration von vorne beginnen, ist es ratsam, sich das Originalverzeichnis erst mal zu kopieren; dies kann später wieder gelöscht werden, wenn die neue Konfiguration läuft:
cp -pvR /etc/nagios /etc/nagios.orig
Nun erstellen wir die neue Struktur:
mkdir -pv /etc/nagios/conf.d/ cd /etc/nagios/objects/ mv -v commands.cfg templates.cfg timeperiods.cfg /etc/nagios/conf.d/ cd ~ rm -rfv /etc/nagios/objects rm -fv /etc/nagios/command-plugins.cfg
Nun öffnen wir die Datei: /etc/nagios/nagios.cfg
Darin wird erstmal alles was „cfg_dir“ und „cfg_file“ ist gelöscht, oder auskommentiert; dann fügen wir die Zeile:
cfg_dir=/etc/nagios/conf.d
hinzu.
Nun muss man sich für eine der beiden Varianten entscheiden:
Erstellen wir zuerst die Verzeichnisstruktur:
mkdir -pv /etc/nagios/conf.d/{contactgroups,contacts,hostgroups,hosts,misc,services}
cd /etc/nagios/conf.d/
mv -v commands.cfg templates.cfg timeperiods.cfg /etc/nagios/conf.d/misc/
Für jeden Benutzer, der nagios benutzen soll, erstellen wir nun eine contacts-Datei (der „Standardkontakt“ nagiosadmin sollte auch erstellt werden):
/etc/nagios/contatcs/nagiosadmin.cfg
define contact{
contact_name nagiosadmin ; Short name of user
use generic-contact ; Inherit default values from generic-contact template (defined above)
alias Nagios Admin ; Full name of user
email admin@localhost ; <<__* CHANGE THIS TO YOUR EMAIL ADDRESS ____
}
Nun erstellen wir eine Kontaktgruppe:
/etc/nagios/contactgroups/admins.cfg
define contactgroup{
contactgroup_name admins
alias Nagios Administrators
members nagiosadmin
}
Für jeden Host, den wir Monitoren wollen, erstellen wir eine Hosts-Datei:
/etc/nagios/conf.d/hosts/host1.cfg
define host{
use linux-server
host_name host1
alias FileServer
address XX.XX.XX.XX ; << IP-Adresse des Servers
}
Nun erstellen wir noch eine Hostgruppe für alle Linux-Server:
/etc/nagios/hostgroups/linux.cfg
define hostgroup{
hostgroup_name linux ; The name of the hostgroup
alias Linux Servers ; Long name of the group
members host1, host2, host3 ; Comma separated list of hosts that belong to this group
}
Und zu guter Letzt erstellen wir noch für jeden Service, den wir überwachen wollen eine Datei in: /etc/nagios/services/
Hier ein Beispiel für check_http, der überprüft ob ein Server per HTTP erreichbar ist:
/etc/nagios/conf.d/services/http.cfg
define command{
command_name check_http
command_line $USER1$/check_http -H $HOSTADDRESS$ -I $HOSTADDRESS$
}
define service{
use generic-service
host_name server1
service_description HTTP
check_command check_http
}
[stextbox id=“note“ caption=“Hinweis“]Anstatt host_name könnten wir den Check mit hostgroup_name auch auf der ganzen Gruppe-, oder mit „host_name *“ auf sämtlichen Hosts ausführen.[/stextbox]
Um dieser Konfiguration einen neuen Host hinzu zu fügen müssen wir:
[stextbox id=“note“ caption=“Hinweis“]Falls der neue Host bereits in einer Hostgruppe ist, die mit einem Service verbunden ist, muss dieser nicht noch einzeln für den Host definiert werden.[/stextbox]
Mit pnp4nagios lassen sich die performancedaten der plugins in schöne Graphen darstellen.
Zuerst bereiten wir als root die Umgebung vor:
yum install rrdtool rrdtool-perl mkdir -v /usr/local/src/icinga && chown -v icinga:icinga /usr/local/src/icinga
Nun wechseln wir zum icinga user:
cd /usr/local/src/icinga/ wget http://sourceforge.net/projects/pnp4nagios/files/PNP-0.6/pnp4nagios-0.6.21.tar.gz/download tar -xvzf pnp4nagios-0.6.21.tar.gz && rm -v pnp4nagios-0.6.21.tar.gz cd pnp4nagios-0.6.21/ ./configure --with-nagios-user=icinga --with-nagios-group=icinga --bindir=/usr/local/bin --libexecdir=/usr/local/libexec/pnp4nagios --sysconfdir=/etc/icinga/pnp4nagios --localstatedir=/var/local/pnp4nagios --libdir=/usr/local/lib/pnp4nagios --datarootdir=/usr/local/share/pnp4nagios make all
Nach dem configure script sollte man die Ausgabe kontrollieren, insbeosndere ob die Pfade stimmen.
Danach noch (als root) installieren:
sudo make fullinstall
Nun sollte man die Datei: /etc/httpd/conf.d/pnp4nagios.conf kontrollieren, ggf. anpassen und apache neu starten:
/etc/init.d/httpd restart
Nun muss man die zwei (schon vorhandenen) commands in: icinga/commands.cfg kontrollieren (Pfade!):
define command {
command_name process-service-perfdata
command_line /usr/bin/perl /usr/local/libexec/pnp4nagios/process_perfdata.pl
}
define command {
command_name process-host-perfdata
command_line /usr/bin/perl /usr/local/libexec/pnp4nagios/process_perfdata.pl -d HOSTPERFDATA
}
Nun kann man mittels Aufruf von: http://example.net/pnp4nagios die Ausgabe kontrollieren.
Ist alles ok, können wir noch das install.php file disablen:
mv -v /usr/local/share/pnp4nagios/install.php /usr/local/share/pnp4nagios/install.php.ignore
Um bereits im GUI eine vorschau zu erhalten, muss noch ein SSI-File kopiert werden:
cp -v /usr/local/src/icinga/pnp4nagios-0.6.21/contrib/ssi/status-header.ssi /usr/share/icinga/ssi/
Nun erstellen wir ein template um die Graphen einzufügen in icinga/templates.cfg:
define service {
name pnp-link-popup
icon_image ../invisible.png' border="0"</a> <A target="_blank" href="/pnp4nagios/graph?host=$HOSTNAME
amp;srv=$SERVICEDESC
quot; class="tips" rel="/pnp4nagios/popup?host=$HOSTNAME
amp;srv=$SERVICEDESC
amp;view=0"><img src="../images/trends.gif" register 0 }
Um nun einen Service für die Performance-Auswertung zu aktivieren, reicht es das template „pnp-link-popup“ hinzuzufügen:
use OTHER_TEMPLATES, pnp-link-popup
Nagios ist ein grandioses Tool um diverse Dinge zu monitoren, beispielseise backups.
Ich monitore diese meist mit dem Plugin check_file_age. – Doch was macht man, wenn man Backup files in der form: /backup/wichtiges_file-2010-05-18-2.zip hat?
Die Lösung ist die einfachste überhaupt und hat mich selbst auch überrascht: Denn man kann in Nagios durchaus auch shell-kommandos mitgeben.
So löst man dieses Problem mit einem check:
command[check_backup]=/usr/local/nagios/libexec/check_file_age -c 86400 -w 86400 -C 500000 -W 500000 -f /backup/wichtiges_file-`date +"%Y-%b-%d"`*.zip |
http://optimalops.blogspot.com/2010/01/fun-with-nagios-part-2-check-yer.html
Einige Besitzer von Lenovo Notebook aus der Baureihe: T50, T51, T60, T61 (und vermutlich noch andere) werden nach einer Neuinstallation von Windows und durchführen der ersten Windows Updates entrüstet feststellen, dass das TouchPad oder das Keyboard nur noch sporadisch funktioniert, manchmal klingt auch der Windows-Startsound etwas zerstückelt.
Das Problem liegt am Treiber Update, dass Lenovo über die Windowsupdates zur Verfügung stellt – Die Lösung: Den Lenovo treiber einfach nicht updaten. 😉
Dazu wählt man bei Windows Update die benutzerdefinierte Installation und wählt das häckchen bei: Synaptics Thinkpad UltraNav Pointing Devices ab. Dann noch Bestätigen, dass dieses update nicht mehr angezeigt werden soll und gut ist!
{img fileId="62" thumb="y" alt="" rel="box[g]"}
{img fileId="63" thumb="y" alt="" rel="box[g]"}