Jul
23
2008
Es gibt Dienste wie Nagios oder Cacti, die es einem Admin ermöglichen von extern sämtliche Dienste und Zustände eines Servers zu überwachen.
Heute möchte ich ein Tool vorstellen, dass nicht nur überwacht, sondern aktiv in das Geschehen eingreift.
Monit bietet verschiedene Kernfunktionen an: Überwachung von Ports, von Diensten, von Prozessen. Sowie Aktives Restarten dieser Dienste nach vorgegebenen Kriterien und Benachrichtigung via E-Mail.
Wer mehr wissen will besucht am Besten die offizielle Webseite.
Ich empfehle dringend das Tool selbst zu kompilieren, da die in Debian bereit gestellte Version buggy ist.
Installation von benötigen Libs und Paketen:
apt-get install gcc make libc6-dev flex libssl-dev openssl byacc btyacc bison
Installation von Monit:
cd /usr/src
wget http://www.tildeslash.com/monit/dist/monit-4.10.1.tar.gz
tar xvfz monit-4.10.1.tar.gz
cd monit-4.10.1
./configure
make
make install
mkdir -p /var/lib/monit/monit.state
Nun fehlt nur noch eine Konfigurationsdatei um Monit zu sagen, was es tun soll.
Als Randbemerkung sei angemerkt dass die E-Mail Benachrichtigung nur funktioniert, wenn ein Mailserver plus das Paket mailx installiert ist.
Erstellen der Konfiguration:
nano /etc/monit/monitrc
# dort können alle auf der Webseiten von monit gennanten Funktionen eingetragen werden
# Als kleines Beispiel dient folgende Konfiguration:
## E-Mail Formatierung
set mail-format {
from: monit@meinem-server.de
subject: $SERVICE $EVENT at $DATE
message: Monit $ACTION $SERVICE at $DATE on $HOST: $DESCRIPTION.
}
## Einstellen der E-Mail Adresse für Alarme. Die "but not on { changed }" Section bedeutet
## dass bei einem Neustart des Dienstes (Verändertes Pid-File) keine E-Mail versendet wird
set alert alarm-postfach@meine-domain.de but not on { changed }
## Überwachung des MySQL Daemons
check process mysql with pidfile /var/run/mysqld/mysqld.pid
group mysql
start program = "/etc/init.d/mysql start"
stop program = "/etc/init.d/mysql stop"
if failed host 127.0.0.1 port 3306 protocol mysql then restart
if 5 restarts within 5 cycles then timeout
Anschließend kann Monit gestartet werden (Hier wird alle 180Sekunden geprüft):
/usr/local/bin/monit -d 180 -c /etc/monit/monitrc -s /var/lib/monit/monit.state
Wer möchte kann dies natürlich auch in einem init-Script erledigen.
Dies ist natürlich nur eine minimal Überwachung, es finden sich jedoch unter http://www.tildeslash.com/monit/doc/examples.php sehr gute Beispiele, die es einem ermöglichen nahezu alles zu überwachen.
Jul
21
2008
Szenario:
Es wird ein Webserver mit jeweils neustem Apache, MySQL und PHP benötigt. Distribution Debian Etch. Zyniker sagen: “Falsche Distribution gewählt”. Dem ist nichts hinzuzufügen.
mysql-5.0.51a-linux-i686-icc-glibc23.tar.gz ist installiert nach /usr/local/mysql. MySQL läuft.
Nun wurde PHP gegen die Files unter /usr/local/mysql/include kompiliert. Die configure Zeilen sahen so aus:
'--with-mysql=/usr/local/mysql' \
'--with-pdo_mysql=/usr/local/mysql' \
Nachdem ich fertig war spuckte sowohl der Apache als auch “make test” Fehler aus:
Beim Starten von Apache:
Syntax error on line 417 of /usr/local/apache/conf/httpd.conf: Cannot load /usr/local/apache/modules/libphp5.so into server: /usr/local/apache/modules/libphp5.so: symbol floor, version libmysqlclient_15 not defined in file libmysqlclient.so.15 with link time reference
Bei “make test”:
/usr/src/php-5.2.6/sapi/cli/php: relocation error: /usr/src/php-5.2.6/sapi/cli/php: symbol isinf, version libmysqlclient_15 not defined in file libmysqlclient.so.15 with link time reference
Als Workaround habe ich libmysqlclient15-dev installiert und gegen die Debian Libs kompiliert:
'--with-mysql=/usr' \
'--with-pdo_mysql=/usr' \
Resultat: Keine Fehler mehr
Wer weiß woher der Fehler kommt, darf sich gerne melden. Auf jedenfall war das eine Version früher (sowohl MySQL als auch PHP) nicht der Fall.
Jul
10
2008
Jedem der einen DNS-Cache in Betrieb sei ans Herz gelegt djbdns zu verwenden. Er ist sicher, einfach zu konfigurieren und sehr stabil.
Die Installation des DNS-Cache Servers gestaltet sich unter Debian Etch wiefolgt:
/etc/apt/sources.list checken ob “contrib” mit aufgenommen ist. Beispiel:
deb http://ftp2.de.debian.org/debian/ etch main contrib
deb-src http://ftp2.de.debian.org/debian/ etch main contrib
deb http://security.debian.org/ etch/updates main contrib
deb-src http://security.debian.org/ etch/updates main contrib
Installation des Debian-Installerpaketes:
apt-get update
apt-get install djbdns-installer
Daemontools und djbdns compilieren mit dem Debian Installer:
(/tmp muss exec sein):
build-daemontools # djb auswählen, ansonsten ist der Rest dieses Dokument ungültig
get-djbdns
build-djbdns
Anlegen von Gruppen und USern für den DNS Server oder Cache:
groupadd Gdnslog
useradd -d /etc/dnscache -g Gdnslog -r -s /bin/bash Gdnscache
useradd -d /etc/dnscache -g Gdnslog -r -s /bin/bash Gdnslog
Anlegen der Konfiguration:
dnscache-conf Gdnscache Gdnslog /etc/dnscache
Konfiguration des dnscache Servers:
nano /etc/dnscache/env/IP # IP einstellen auf der der Service lauscht
cd /etc/dnscache/root/ip # Ordner mit allen freigegeben Netzwerken
touch 192.168 # Alles mit 192.168.x.x darf zugreifen
Aktualisierung der DNS Rootserver:
mv /etc/dnsroots.global /etc/dnsroot.global.old
dnsip `dnsqr ns . | awk '/answer:/ { print $5; }' |sort` \ > /etc/dnsroots.global
cp /etc/dnsroots.global /etc/dnscache/root/servers/@
Starten des dnscache Servers:
ln -s /etc/dnscache /service
sleep 5
svstat /service/dnscache
Nun noch ggf. die Datei /etc/resolv.conf anpassen, damit der Rechner den eigenen DNScache zum auflösen von Hostnamen verwendet.
Viel Spaß !