Håll koll på din Nginx servers status

Vill du veta hur många anslutningar som din nginxserver har aktiva just nu? Eller hur många anslutningar den har tagot emot totalt? Eller vill du skapa en asfet graf i ditt övervakningssystem på hur mycket last Nginx tar?

Oavsett så löser du det såhär:

location /nginx_status { 
  stub_status on;
  access_log   off;
  allow EN.IP.ADRESS;
  deny all;
}

Det ska skrivas i en site-config och inte direkt i nginx.conf. Om du inte riktigt bryr dig om vem som tittar på dina stats, eller om du kanske rent utav vill visa upp dem så kan du ju alltid sätta “allow all” och ta bort “deny all”.

Icinga + Scheduled passive checks

Jag har funderat ett tag på hur man kan använda Icinga för övervakning av maskiner som inte står i samma nät som icingaservern, jag vill även uppnå det utan att öppna några brandväggsportar mer än nödvändigt. Lösningen jag har klurat på bygger på passiva checks och ett API samt ett schemalagt script för att exekvera scriptet. Jag ska se om jag kan snickra ihop något så återkommer jag!

Op5 släpper plugin för att övervaka ESX:er/Vmware med Nagios

Idag släppte Op5 sin plugin för att övervaka Vmware ESX-servrar via Nagios, pluginen hittar du här: http://www.op5.org/community/projects/check-esx-plugin

Jag har ingen möjlighet att testa det själv, men communityn som har hunnit testa den verkar gilla det och jag är övertygad om att vi kommer få se prov på pluginen in action inom en snar framtid.

Eftersom den stödjs av Nagios så fungerar den garanterat med Icinga, och det är absolut inte dåligt! Den enda haken som jag ser det är att man behöver Vmware SDKt skrivet i perl för att använda pluginen.. Det känns sådär hett!

Mycket nu och Ninja

Det är mycket nu! Fullt upp med att dra igång www.ngweb.se, vi  är något unikt på spåren det gäller bara att få det på pränt. Vill du veta mer om hur Next Generation Web .kan ta hand om din webblösning så kolla på webbsidan eller skicka mig ett mail!

I all denna hysteri så påminde David mig om ett projekt som jag både använt och testat men hunnit glömma bort, inte för att det är dåligt utan mer för att jag haft mycket att stå i.

Projektet Ninja (Nagios is now just awesome) från det svenska Op5, det är helt enkelt ett nytt webbgränssnitt för Nagios, och för en gång skull så är det snyggt, visserligen så är Icingas nya GUI också snyggt, men inte på samma sätt! Op5 har en del andra roliga projekt kring Nagios, bla en konfigurationshanterare, väl värt att titta på!

Nginx och dess loggar

Jag kom idag på en sak som jag förbisett tidigare, nämligen debug-flaggans potential att skapa gigantiska loggfiler, debugflaggan kan man slå på för errorloggarna och då får man fram massor av fantastisk information, tex vilka regler i vhosten som slår på aktuell request eller vilka fel som php-genererar. Dock så blir det ganska stora filer, så det rekomenderas att antingen hålla ordentlig koll på filerna, eller slå av flaggan om du inte jobbar med att debugga siten.

Då jag har så många siter igång och inte orkar ändra alla vhostar så valde jag att skriva om reglerna för logrotate samt sätta maxfile size kontroller på filerna, eftersom en bra errorlog är en tom errorlog:) så nu får jag ett larm om någon fil överstiger 1Mb.

Konfigurera Icinga för NRPE

I ett tidigare inlägg  skriver jag om hur man sätter upp NRPE på maskinerna, nu ska jag gå igenom hur man konfigurerar kontrollerna.

Först måste vi definiera att kommando för nrpe_check, detta gör vi i vår command.cfg enligt nedan.

define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

Nu måste vi skapa en host som vi kan köra våra kontroller på, det gör vi i en fil som vi kallar för server02.cfg enligt nedan:

define host{
        use           linux-server                                                                    
        host_name     Server02
        alias         Server02
        address       192.168.0.1
        }

När vi har en Host uppsatt, så sätter vi upp en check som ska göras:

define service{
        use            local-service        
        host_name      Server02
        service_description  Current Load
        check_command  check_nrpe!check_load
}

Glöm inte att starta om/ ladda om konfigurationen i Icinga innan du försöker se om det funkar, kontrollen kommer nu att synas i webbgränssnittet som en vanlig check.
Anledningen till att vi kan skriva bara check_load och ändå få det att funka är att check_load redan är definierad med gränsväden i filen /usr/local/icinga/etc/nrpe.cfg på Server02

command[check_load]=/usr/local/icinga/libexec//check_load -w 15,10,5 -c 30,25,20

Av säkerhetsskäl så är det smartast att fördefiniera alla kontroller på maskinen som ska kunna utföra, då behöver man bara skicka minimalt med kommandon/inkommande data via nätverket och minskar därmed risken för att någon med illvilliga avsikter tar över din maskin. Det går att skicka med gränsvärden från icinga, men det rekomenderas inte om du kör övervakningen över nätet, kör du det i ditt interna nätverk så är det en mindre risk för intrång och kan vara ett smidigare sätt att justera sina gränsvärden.

Installera NRPE för Icinga

Eftersom Icinga är fullt bakåtkompatibelt med Nagios så kan man utan problem använda sig av nagiosplugins för att göra vissa manövrar, i mitt fall övervaka en annan server, en linux VPS. Den enda nackdelen med att använda en nagiosplugin är för att den har standardanvändare och grupper, men det går som tur är att definiera
själv när man kompilerar pluginen/add-on:en.

Det vi ska göra är att kompilera addonen och pluginen NRPE(http://nagios.sourceforge.net/docs/3_0/addons.html), notera att addonen NRPE har en plugin(check) som också heter NRPE, den heter i systemet check_nrpe men ingår i samma projekt.

NRPE är en demon som körs via xinet.d och används för att låta en Icinga/Nagios installation exekvera scripts på den aktuella maskinen, man måste dock komma ihåg att alla script som ska exekveras måste finnas på den aktuella maskinen.Jag har två stycker servrar jag vill blanda in, Server01 som håller icinga installationen och Server02 som jag vill övervaka, noteras ska att båda maskinerna är Debian Stable.

Förberedelser på båda maskinerna
Börja med att ladda ner de paket som krävs, du behöver:

* Openssl samt libssl-dev
* NRPE: http://www.nagios.org/download/addons
*Nagiosplugins: http://sourceforge.net/projects/nagiosplug/files/ (behövs bara på Server02)
*Xinetd(behövs bara på server02)

Det är möjligt att kompilera in vissa kontroller direkt i NRPE, men jag väljer att inte göra det.

 
Skapa användare och grupper
För att kunna köra NRPE och Nagiosplugin så måste vi skapa en användare och en grupp på maskinen, jag väljer att kalla dessa för ‘icinganrpe’, användaren icinganrpe ska vara medlem av gruppen icinganrpe.
Vi börjar med att installera de delar som krävs på Server02.

Konfigurera och installera Nagiosplugins
 
Packa upp det nerladdade arkivet och kör:

./configure --prefix=/usr/local/icinga --with-nagios-user=icinganrpe --with-nagios-group=icinganrpe
make && make install

–prefix anger i vilken katalog nagiosplugins ska installeras, jag väljer samma katalog som icinga ligger i på Server01.
–with-nagios-user anger vilken användare pluginen ska kompileras med.
–with-nagios-group samma som ovan fast för gruppen.

Konfigurera och installera NRPE
Packa upp det nerladdade arkivet och kör:

./configure --with-nagios-user=icinganrpe --with-nagios-group=icinganrpe --with-nrpe-user=icinganrpe --with-nrpe-group=icinganrpe --enable-ssl --libexecdir=/usr/local/icinga/libexec/ --bindir=/usr/local/icinga/bin/ --sysconfdir=/usr/local/icinga/etc
make all
make install
make install-daemon
make install-daemon-config
make install-plugin
make install-xinetd

–prefix anger i vilken katalog nagiosplugins ska installeras, jag väljer samma katalog som icinga ligger i på Server01.
–with-nagios-user anger vilken användare pluginen ska kompileras med.
–with-nagios-group samma som ovan fast för gruppen.
–with-nrpe-user samma som för nagios-user och group.
–with-nrpe-group samma som ovan.
–enable-ssl eftersom vi inte vill att maskinerna ska kommunicera med varandra i klartext så installerar vi NRPE med SSL påslaget, därav Openssl som krav.
–libexecdir anger vart nagiosplugins finns installerade.
–bindir anger vart binärfilen för NRPE ska installeras.
–sysconfdir anger vart konfigurationen för NRPE ska installeras. 

Anledningen till att det blir så många flaggor är för att nrpe och nagiosplugins som standard installeras i kataloger som heter *nagios* något, och det vill jag inte när jag ska använda det med Icinga.

Konfigurera Xinetd
xinetd är en “internet superserver” som används för att starta och köra demoner och servrar som inte har några egna PID, precis som svchost i windows. När vi ovan körde make install-xinetd så gjorde den i princip allt som vi behöver göra, dock så ska vi dubbelkolla att det blev rätt, börja med /etc/Xinetd.d/nrpe här har du en flagga som heter “Only from” som standard står det 127.0.0.1 där, låt det stå kvar tillsvidare, men senare ska vi ändra det till IP:t på Icinga maskinen.
Byt fil till /etc/services och lägg till i slutet på filen:

nrpe 5666/tcp #nrpe

Starta nu om xinetd, /etc/initd./xinetd restart. om allt har gått enligt plan så ska du nu ha en nrpe-demon körandes, för att kolla det kör:

netstat -at | grep nrpe
Det borde ge dig, gör det inte det prova starta om xinted.d igen, funkar inte det kolla syslog efter felmeddelanden.

tcp        0      0 *:nrpe                  *:*                     LISTEN

För att testa om nrpe funkar,  anslut till NRPE demonen med check_nrpe:

/usr/local/icinga/libexec/check_nrpe -H localhost

Det borde ge dig något liknande:
NRPE v2.8

Konfigurera Server01 för NRPE

Ladda ner källkodspaketet för NRPE på maskinen som kör Icinga, anpassa ./configure för att använda samma användare som icinga(i mitt fall ‘icinga’).

./configure --with-nagios-user=icinganrpe --with-nagios-group=icinga --with-nrpe-user=icinga --with-nrpe-group=icinga --enable-ssl --libexecdir=/usr/local/icinga/libexec/ --bindir=/usr/local/icinga/bin/ --sysconfdir=/usr/local/icinga/etc
make all
make install-plugin

Skillnaden mot att installera på Server02 är att vi inte är intresserade av demonen utan bara pluginen, för att testa NRPE, ändra “Only From” i /etc/xinetd.d/nrpe och kör sedan samma kommando igen:

/usr/local/icinga/libexec/check_nrpe -H Server02

Det borde ge dig något liknande:
NRPE v2.8

Glöm om inte att byta ut Server02 mitt din servers IP! Om du får rätt svar så fungerar det, om den klagar på SSL, se till att du har openssl installerat och att det är samma version på båda maskinerna.

Nu är du klar med att installera NRPE på din maskiner, nu är nästa steg att konfigurera Icinga.
Läs mer om att konfa icinga med NRPE: http://abergmanse.wordpress.com/2010/05/06/konfigurera-icinga-for-nrpe/

Styr Icinga/Nagios från din iPhone

Det finns en uppsjö applikationer som låter dig ansluta och hantera din icingainstallation, men jag fastnade för en app som heter TouchMon(http://www.s-team.at/en/touchmon). Den är hyfsat dyr, då den kostar 99kr att köpa för fullversion, den låter dig ansluta till flera installationer samtidigt och den är reklamfri, men för den som vill testa så finns det en gratisversion som har reklam och är begränsad till att ansluta till en installation.

Kontrollera Vhostar och Redirects med Icinga

Vi har en webbserver med ett antal vhostar som vi vill övervaka, dock så kommer standardkonfigurationen till Icinga med en servicecheck som kontrollerar HTTP med hjälp av IP:t, så för att få den att kontrollera det jag vill så skriver jag om service checken till:

check_http -H $HOSTADRESS$

Det gör att check_http tar emot www.test.se istället för bara en ip, nu vill jag också kolla så att jag får den HTTP-status jag förväntar mig, detta då check_http tycker att både 200 och 301 är OK, men efter som min site inte ska redirecta(301) så vill jag att den bara ska tycka att 200 är ok, det åstadkommer jag med:

check_http -H $HOSTADDRESS$ -e 200

Där -e betyder “expect”, alltså förväntar sig checken HTTP-status 200. För att hålla koll på mina redirects så använder jag samma kontroll fast med 301 istället för 200.

För att underlätta för mig själv har jag definierat upp ett nytt kommando som heter just HTTP-redir och som bara accepterar 301 som http-status, sedan styr jag med hostgroups vilken sida som kontrolleras på vilket sätt.

Såhär ser det ut på en maskin som både har en HTTP-adress och en HTTP-redir:

Passiva service checks med Icinga/Nagios

Jag vill veta hur mina cronjobb går, om de går igenom eller om de failar någonstans längs vägen. För att samla ihop det med Icinga så väljer jag att skriva om mina cronjobb script så att de beroende på exit-code kör ett annat script som lägger in informationen i Icinga.

Den första delen i det är att skapa en service som du kan använda för att ta emot passive service checks, det kan vara en helt vanlig service, men den skillanden att du lägger till “active_checks_enabled 0″ i definitionen. Så den ser ut såhär:

define service{
use local-service
service_description Cron Jobs
host_name localhost-test
check_command check_mailq!10!20
active_checks_enabled 0
}

Notera att det finns ett check command i defintionen, men det kommer inte att köras pga “active_checks_enabled 0″, det måste bara vara där för sakens skull. Glöm inte att knyta check:en till en host också!

I nagios egen dokumentation finns ett litet bash-script för att skicka commandon till .cmd-filen, du hittar det här: http://nagios.sourceforge.net/docs/3_0/volatileservices.html
För att exekvera scriptet sedan så kör du bara:

# ./submit_passive_check.sh localhost-test 'Cron Jobs' 0 'Cron has run!'

Där du byter ut “localhost-test” till ditt eget hostnamn, siffran i mitten är exitcode och severitycode i Icinga, 0= OK 1= Warning 2= Critical och 3 är Unknown. Lek med det lite själv och se hur det går! Lycka till!