PDA

Bekijk Volledige Versie : Nagios HTTPD checks



snaaps
22/01/08, 10:47
Geachte mede wht gebruikers,

Ik zit met een probleem welke te maken heeft met nagios.
Wij hebben nagios al geruime tijd naar alle tevredenheid draaien.

Echter komt het wel eens voor dat er ergens een server gedeeltelijk is vast gelopen en de webpagina's niet meer kunnen worden opgevraagd.
Nagios controleert doormiddel van de check_http alleen of apache reageert en/of poort 80 bereikbaar is.

Helaas controleert nagios niet of bijvoorbeeld http://ipadres/check.php opgevraagd kan worden.
Dit resulteert dat wij nu al meerdere keren een downtime van een paar uur heben gehad die niet werd opgemerkt door nagios.

Graag informeer ik welke mogelijkheden er zijn op nagios zoals hierboven beschreven daadwerkelijk probeert een pagina op te vragen.
In de pagina zelf staat dan een tekst al "OK", Indien nagios geen tekst "OK" kan opvragen zal nagios dit afhandelen als een downtime.

Wie kan ons hiermee helpen?

rayden
22/01/08, 10:52
Documentatie lezen...

check_http heeft meerdere syntaxes:

@ je services.cfg


define service{
use generic-service
host_name server1.aleto.nl
service_description HTTP
is_volatile 0
check_period 24x7
max_check_attempts 3
normal_check_interval 5
retry_check_interval 1
contact_groups aleto,sms
notification_interval 60
notification_period 24x7
notification_options u,c,r
check_command check_http!/phpinfo.php
}


@ je checkcommands.cfg



# 'check_http' command definition
define command{
command_name check_http
command_line $USER1$/check_http -H $HOSTADDRESS$ -u $ARG1$
}

almar
22/01/08, 11:08
Dit is inderdaad de beste manier om je probleem op te lossen. In principe doet Nagios altijd een check op de returncode. Bij een 404 of 403 krijg je ook een alert.

DutchTSE
22/01/08, 11:24
denk dat je het beste de volgende http check kunt maken. Even uit het hoofd:

"$USER1$/check_http -H *URL* -u "*path/naar/bestand" -s "OK" -t 30"

Hierbij controleert hij of op een bepaalde pagina de string OK voorkomt, als er iets/niets anders voorkomt dan krijg je een critical.

snaaps
22/01/08, 12:25
Documentatie lezen...

check_http heeft meerdere syntaxes:

@ je services.cfg


@ je checkcommands.cfg

In onze commands.cfg staat het volgende:

# 'check_http' command definition
define command{
command_name check_http
command_line $USER1$/check_http -I $HOSTADDRESS$ $ARG1$
}

Geen H maar een I?

Betreft de service.cfg, ja deze wijkt bij ons wel heel erg af van jouw voorbeeld.
EDIT: Post ff de volledige service.cfg:

define host{
host_name s16.ccchosting.nl
alias Server 16
address 84.243.235.56
notifications_enabled 1
event_handler_enabled 1
flap_detection_enabled 1
failure_prediction_enabled 1
process_perf_data 1
retain_status_information 1
retain_nonstatus_information 1
notification_period 24x7
check_period 24x7
max_check_attempts 5
check_command check-host-alive ; Default command to check Linux hosts
notification_interval 120
notification_options d,u,r
contact_groups admins
register 1
}

# Local service definition template - This is NOT a real service, just a template!

define service{
name local-service ; The name of this service template
use generic-service ; Inherit default values from the generic-service definition
check_period 24x7 ; The service can be checked at any time of the day
max_check_attempts 5 ; Re-check the service up to 4 times in order to determine it$
normal_check_interval 5 ; Check the service every 5 minutes under normal conditions
retry_check_interval 1 ; Re-check the service every minute until a hard state can be$
contact_groups admins ; Notifications get sent out to everyone in the 'admins' group
notification_options w,u,c,r ; Send notifications about warning, unknown, critical, and re$
notification_interval 60 ; Re-notify about service problems every hour
notification_period 24x7 ; Notifications can be sent out at any time
register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUS$
}
# Define a service to "ping" the local machine

define service{
use local-service ; Name of service template to use
host_name s16.ccchosting.nl
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}
define service{
use local-service ; Name of service template to use
host_name s16.ccchosting.nl
service_description HTTP
check_command check_http
}
#define service{
# use local-service ; Name of service template to use
# host_name s16.ccchosting.nl
# service_description DNS
# check_command check_dns
# }
define service{
use local-service ; Name of service template to use
host_name s16.ccchosting.nl
service_description SMTP
}
define service{
use local-service ; Name of service template to use
host_name s16.ccchosting.nl
service_description POP3
check_command check_pop
}
define service{
use local-service ; Name of service template to use
host_name s16.ccchosting.nl
service_description FTP
check_command check_ftp
}
define service{
use generic-service
host_name s16.ccchosting.nl
service_description Remote Load
check_command check_nrpe!check_load
}



De optie die DutchTE noemt weet ik ff niet te plaatsen, dit kan niet in command omdat je een url moet invoeren?

bakkerl
22/01/08, 12:49
In onze commands.cfg staat het volgende:

# 'check_http' command definition
define command{
command_name check_http
command_line $USER1$/check_http -I $HOSTADDRESS$ $ARG1$
}

Geen H maar een I?
Zie de http_check command's voor het verschil..


-H <vhost>
-I <IP-address>


Met een -I test je dus de (default) apache of deze werkt. Wil je echter gaan testen of een bepaalde site het doet, dan zul je de -H moeten meegeven.
Een -H geeft dus een hostheader in het request mee.





Betreft de service.cfg, ja deze wijkt bij ons wel heel erg af van jouw voorbeeld.


Elke *.cfg file kan verschillen. Zo vind je in mijn check_commands (bijna) nergens een $ARG1$ terug. Dit omdat mijn mening is dat de check_command specifiek iets moet testen en niet iets afhankelijk van de parameters die hij mee krijgt (zo kan ik heel makkelijk de check_command's aanpassen zonder conflicten te krijgen over de mogenlijk parameters die er zijn).

Zoals in bovenstaande voorbeeld in mijn check_http nog anders:


define command {
command_name check_http
command_line $USER1$/check_http -H $HOSTADDRESS$
}


Mochten de standaard checks niet voldoen, kun je ook altijd op http://www.nagiosexchange.org/ zoeken of er een check is die meer voldoet aan jou eisen. Als laatste kun je een check zelf maken. De structuur/eisen van de checks zijn vrij simpel. Een (shell)scriptje /php/perl/python/... kan allemaal gebruikt worden.

Pur
23/01/08, 11:16
Je kan ook webinject gebruiken als je bepaalde handelingen die een user moet doen wilt simuleren.

Op die manier kun je in nagios een script hangen wat bijvoorbeeld inlogged op een pagina, daar een handeling uitvoert en vervolgens weer uitlogged. Inclusief timeouts op alle handelingen etc.

Best vernuftig iets. Maar kost wel klein beetje tijd voor je het door hebt.