Jan 11 2009

Jak nainstalovat Monitorix na Debian

Tag: Debian,Linuxadmin @ 23:00

Nedávno jsem objevil další zajímavý nástroj na monitorování systémuMonitorix. Né že by to byla nějaká novinka na poli monitorovacích nástrojů různých systém, těch existuje celá řada, kvalitních a vyzkoušených, co monitorují kde co. Monitorix mě zaujal ale svými screenshoty, které vypadaly z dálky velmi dobře, tak jsem to zkusil nainstalovat. Jelikož to vypadá, že je to poměrně mladý projekt, tak mě bylo jasné že v Debianu balíček určitě nebude, i když používám současný testing (Lenny). Takže klasická instalace ze zdrojáků.

Monitorix monitoruje:

  • CPU: vytížení, procesy, pamět, teplotu
  • Časy procesů user, nice, system, idle a i/o wait)
  • Teploty pomcí LM-Sensors a HDDtemp
  • Využití disků (max. 5 mount-pointů)
  • Síťová rozhraní input/output (max. 5)
  • Aktivitu na uživatelsky definovatelných portech sítového rozhraní
  • Aktivitu přerušení sytému
  • Monitorování služeb SMTP, SSH, FTP, Telnet, Samba, NetAtalk, VirusMail, FAX, POP3 a HTTP
  • … a možná i další


Příprava instalace

V době psaní tohoto článku byla aktuální verze Monitorixu 1.2.2, na oficiálních stránkách je uveden návod na instalaci v Ubuntu, který bohužel se nezdá příliš aktuální. Monitorix používá pro vykreslování grafů nástroj RDDtool, takže před vlastní instalací Monitorixu bude třeba ještě nainstalovat balíček rddtool a knihovnu rddtool librrds-perl pro Perl – protože Monitorix je napsán celý v Perlu.

# apt-get install rrdtool librrds-perl

Instalace Monitorixu ze zdrojáků

# wget http://www.monitorix.org/monitorix-1.2.2.tar.gz
# tar xfz monitorix-1.2.2.tar.gz
# cd monitorix-1.2.2
# ./install.sh

Až se vás to zeptá, jakou distribuci chce instalovat, zvolte: 3 – Debian a poté už další otázky jen potvrďte (případně postupujte dle uvážení).

Příprava na spuštění

V tuto chvíli by teoreticky mohlo být vše připraveno na spuštění, ale to by autor musel odstranit všechny mušky příslušné verze. V první řadě je třeba vytvořit adresář, kam se budou logovat stavy systému aby se z nich následně daly vytvořit grafy.

# mkdir -p /var/lib/monitorix

Dále, ač jsme sice zvolili instalaci pro Debian, tak se nainstaluje defaultní verze konfiguračního souboru /etc/monitorix.conf, proto je třeba jej upravit (jedná se především o řádek 34our $OSTYPE="Linux-RHFC" přepsat na our $OSTYPE="Linux-Debian", další parametry pak podle uvážení a potřeby, včetně sekce vybraných grafů.

our $TITLE="Jens.cz";                   # your company name
our $HOSTNAME="";                       # hostname of this server
our $OSTYPE="Linux-Debian";             # choose your OS type (see below)
our $IDATE="01 Jan 2009";               # initial statistics date
our $SAMBAVER="3";                      # Samba version (2 or 3)
our $MULTIHOST="N";                     # Enable multihost feature
our $MULTIHOST_FOOTER="Y";              # (multihost) display URL in image
our $MULTIHOST_IMGPERLINE="2";          # (multihost) # of images per line
our $REPORT_LANG="en";                  # Report language
our $THEME_COLOR="black";               # Default is "black", none is "white"
our $EMAIL="root@localhost";           # Generic email for reports
our $REFRESH_RATE="150";                # Web stats' refresh rate in seconds
our $ENABLE_CROND_MAIL="N";             # Error messages are sent by crond

Poslední věc co musíte udělat je ověřit nastavení případně přenastavit Apache tak, aby jste měli přes nějakou adresu dostupnou složku /var/www/monitorix (já jsem použil do svého virtual-hostu Alias, protože nemám DocumentRoot ve /var/www) a poté přístup k CGI skriptům přes klasickou URL ../cgi-bin/...

Alias /monitorix/ /var/www/monitorix/

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
</Directory>

Spuštění

A konečně můžete Monitorix spustit. On se sice tváří jako daemon, a spouští přes /etc/init.d/monitorix, ale to je jen skript, který vytvoří minutový cron /etc/cron.d/monitorix, který provádí monitorování systému.

# /etc/init.d/monitorix start

V případě že vám to při spuštění napíše nějakou chybu, tak máte nejspíše špatně nastaven konfigurační soubor a nebo nemáte vytvořené příslušné adresáře (/var/lib/monitorix, /var/www/monitorix).

Zhodnocení

Monitorix lze nainstalovat velmi rychle, jeho konfigurace je taktéž poměrně jednoduchá (v defaultním stavu jsou zobrazeny všechny grafy). Vypnuté jsou pouze statistiky z lm-sensors a hddtemp, které umožňují monitorování hardwaru – teplot, otáček atd. Grafické výstupy jsou obstojné, na úvodní stránce s výběrem zobrazovaného intervalu by se dalo zapracovat a doplnit možnost hodinového zobrazení a možnost zobrazení konkrétního intervalu od – do. Po nahlédnutí do zdrojáku musím říci, že je na celém nástroji ještě hodně práce, spousta věcí je tam jaksi „natvrdo“ a chtělo byt to lepší dokumentaci jak na webu, tak v kódu.

monitorix tool cpu screenshot

Jinak ještě upozorním, že v defaultní konfiguraci se Monitorix pokouší provádět monitorování různých portu síťového rozhraní, to dělá tak, že si přidá vlastní „pravidla“ pomocí iptables. Toto chování se konkrétně mě silně nelíbí, a proto doporučují vypnout před prvním spuštěním monitorování portů pomocí proměnné $ENABLE_PORT na „N“.


Jan 08 2009

GoogleBot a HTTP status 503

Tag: PHP,SEO,Zend FrameworkJens @ 23:55

Občas je třeba provést na stránkách údržbu tak, že je třeba na chvíli zastavit zobrazování webu – ať už je to údržba databáze nebo cokoliv jiného. V takovém případě se změní například index.php aby zobrazoval „nějakou hlášku o údržbě“. Problém ale může nastat, když zrovna v tu chvíli indexuje váš obsah třeba GoogleBot. Vaše hláška o údržbě pro něj bude obyčejná informace vrácená typicky s hlavičkou HTTP statusu 200 (viz. RFC HTTP status 200) a GoogleBot stránku pěkně zaindexuje a pak se nestačíte divit co že to google vrací za výsledky na vašem webu :)

Na toto existuje doporučení přímo od Googlu: „… nastavte server tak, aby vrátil status 503 (viz. RFC HTTP status 503) namísto statusu 200 …“. V PHP jednoduchá věc pomocí funkce header(), ideálně ještě doplníme vlastní hlášku o údržbě:

<?php
header('HTTP/1.1 503 Service Temporarily Unavailable');
header('Status: 503 Service Temporarily Unavailable');
?>
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>503 Service Temporarily Unavailable</title>
</head><body><h1>Service Temporarily Unavailable</h1>
<p>The server is temporarily unable to service your request due to maintenance downtime or
capacity problems. Please try again later.</p>
</body></html>

Retry-After hlavička

Navíc, podle RFC – Header Field Definitions je může být použito v hlavičce u statusu 503 pole Retry-After:

The Retry-After response-header field can be used with a 503 (Service Unavailable) response to indicate how long the service is expected to be unavailable to the requesting client. This field MAY also be used with any 3xx (Redirection) response to indicate the minimum time the user-agent is asked wait before issuing the redirected request. The value of this field can be either an HTTP-date or an integer number of seconds (in decimal) after the time of the response.
Retry-After = "Retry-After" ":" ( HTTP-date | delta-seconds ) Two examples of its use are Retry-After: Fri, 31 Dec 1999 23:59:59 GMT Retry-After: 120 In the latter example, the delay is 2 minutes.

Tedy, navíc ještě přidáte hlavičku Retry-After s hodnotou (v sekundách, nebo přímo časem), za kterou předpokládáte že web pojede – na příklad za 1 hodinu (3600s):

header('HTTP/1.1 503 Service Temporarily Unavailable');
header('Status: 503 Service Temporarily Unavailable');
header('Retry-After: 3600');

Zend Framework

A závěrem ještě příklad, pro odeslání statusu 503 v Zend Frameworku:

$this->getResponse()->clearBody();
$this->getResponse()->setRawHeader('HTTP/1.1 503 Service Temporarily Unavailable');
$this->getResponse()->setRawHeader('Status: 503 Service Temporarily Unavailable');
$this->getResponse()->setRawHeader('Retry-After: 3600');

$msg = '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">';
$msg.= '<html><head><title>503 Service Temporarily Unavailable</title>';
$msg.= '</head><body><h1>Service Temporarily Unavailable</h1>';
$msg.= '<p>The server is temporarily unable to service your request due to maintenance downtime or
capacity problems. Please try again later.</p>';
$msg.= '</body></html>';			

$this->getResponse()->setBody($msg);
$this->getResponse()->sendResponse();

Jan 04 2009

Apache mod_rewrite a htaccess na Debianu

Tag: Apache,Debian,LinuxJens @ 23:00

Zprovoznění mod_rewrite pro Apache2 na různých verzích debianu nebylo vždy stejné. Dřívější funkční použití a2enmod vyžadovalo (na prvních verzích Etche) předponu mod_. V současné stable verzi (Etch/6) i v testing (Lenny) se oba přístupy sjednotili a stačí tedy už jen: a2enmod rewrite. Musím připomenou že utilita a2enmod vytváří pouze symbolický link z /etc/apache2/mods-available do /etc/apache2/mods-enabled (takže se bez ní dá jednoduše obejít s využítím ln -s ...).

Celý postup pak tedy vypadá následovně (vše je třeba dělat pod rootem nebo použít sudo).

  1. Povolení modulu
  2. # a2enmod rewrite
    
  3. Nastavení konfigurace Apache pro daný adresář a (virtuální doménu):
    <Directory /var/www/projekt>
    	Options FollowSymLinks
    	AllowOverride All
    </Directory>
    
  4. A konečně, v souboru /var/www/projekt/.htaccess musí být hned na začátku:
    RewriteEngine on

Pokud by jste chtěli být úplně „precizní“, tak se doporučuje ještě v souboru .htaccess zapsat konfiguraci pro přepisovaní pomocí mod_rewrite do podmíněného bloku kde se testuje, zda-li je mod_rewrite natažen. Tedy například takto:

<IfModule mod_rewrite.c>
	RewriteEngine On
	...
	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteRule . /index.php [L]
	...
</IfModule>

Vyzkoušeno na: Lenny: Apache/2.2.9 a Etch: Apache/2.2.3.