RMLL-nagios.tex
source .tex
Size 19.6 kB - File type text/x-texFile contents
\documentclass[11pt]{beamer}
\usepackage[latin1]{inputenc} % pour les accents
\usepackage[T1]{fontenc} % pour les accents
\usepackage{pgf,pgfarrows,pgfnodes,pgfautomata,pgfheaps}
\usepackage{times, amsmath,amssymb}
\usepackage{graphicx}
\DeclareGraphicsExtensions{.jpg,.png,.eps}
% THEME BEAMER j'aime bien Berkeley pas mal Copenhagen
% pas mal Goettingen (menu à droite, clair) -
% pas mal Marburg (menu à droite, sombre degradé)
% Pas mal Montpellier (mais rappel des sections serait bien)
% pas mal Singapore (menu en haut, clair)
%\usetheme{Berkeley}
\usetheme{Berkeley}
% PACKAGE CONTENANT LES MACROS
%\usepackage{macroLMAC}
%\logo(){\insertframenumber/\inserttotalframenumber}
%I DONT WANT TO SEE THOSE NAVIGATION SYMBOLS
\setbeamertemplate{navigation symbols}{}
\setbeamertemplate{footline}[frame number]
% INFO DOCUMENT - TITRE, AUTEUR, INSTITUTION
\title{Monitoring de serveurs}
\subtitle{Utilisation de Nagios et nrpe}
\author[Aurélie Chaumat]{Aurélie Chaumat (zopeuse$@$gmail.com)}
\institute[LinuxChix]{
Coordinatrice de LinuxChix en France \textbf{http://linuxchixfrance.org}
\and
Membre de ALDIL : Association Lyonnaise pour le développement\\
de l'Informatique Libre
}
\date{Les nocturnes - RMLL 2007}
%------------------------------------------------------------------------------
\begin{document}
% PAGE D'ACCUEIL
\frame{\titlepage}
\section<presentation>*{Introduction}
% ANNONCE DU PLAN
\frame{
\frametitle{Plan}
\tableofcontents[part=1,pausesections]
}
% Avec cette commande, le plan sera rappelé
% à chaque changement de sous-section
\AtBeginSection[]{
\frame<handout:0>{
\frametitle{Plan}
\tableofcontents[current,currentsection]
}
}
% PRESENTATION 'VISIBLE' (HORS ANNEXES)
\part<presentation>{Main Talk}
%%%%%%%%%%% section %%%%%%%%%%%%%
\section[Présentation]{Présentation de Nagios}
\frame{
\frametitle{Présentation de Nagios}
\begin{itemize}
\item C'est un outil de monitoring avec interface web et un système de
notifications
\item En GPL
\item Avec un système de plugins
\item Afin de superviser des ressources et des services réseaux.
\end{itemize}
}
\begin{frame}[fragile]
\frametitle{Tactical Overview}
\begin{figure}
\includegraphics[scale=0.4]{nagios-tactical-overview.jpg}%
\end{figure}
\end{frame}
\begin{frame}[fragile]
\frametitle{Disponibilité réseau}
\begin{figure}
\includegraphics[scale=0.5]{nagios-availability.jpg}%
\end{figure}
\end{frame}
\frame{
\frametitle{Comment fonctionne Nagios}
\begin{itemize}
\item Un moteur pour ordonnancer la supervision
\item Les plugins pour savoir quoi superviser
\item Une interface web pour visualiser rapidement ce que l'on monitore
\end{itemize}
}
\frame{
\frametitle{La théorie des plugins }
\begin{center}
\begin{figure}
\includegraphics[scale=0.5]{nagios-plugintheory.png}%
\end{figure}
\end{center}
}
\begin{frame}[fragile]
\frametitle{Chaque test pour un hôte ou un service renvoie un état}
\begin{tabular}{cc}
\begin{minipage}[c]{4cm}
\begin{enumerate}
\item PENDING (en attente de check, aucune valeur disponible)
\item UP (ouf :) )
\item DOWN (zut alors...)
\item UNKNOWN (problème sur l'hôte ?)
\end{enumerate}
\end{minipage}
&
\begin{minipage}[c]{5.5cm}
\begin{enumerate}
\item OK (valeur inférieure au seuil d'alerte)
\item WARNING (seuil d'alerte dépassé)
\item CRITICAL (seuil d'alerte critique dépassé)
\item UNKNOWN (état du service inconnu)
\item UNREACHABLE (innacessible)
\end{enumerate}
\end{minipage}
\end{tabular}
\end{frame}
\begin{frame}[fragile]
\frametitle{Les problèmes pour les hôtes}
\begin{figure}
\includegraphics[scale=0.4]{nagios-host-problems.jpg}%
\end{figure}
\end{frame}
\begin{frame}[fragile]
\frametitle{Les problèmes pour les services}
\begin{figure}
\includegraphics[scale=0.4]{nagios-service-problems.jpg}%
\end{figure}
\end{frame}
\begin{frame}[fragile]
\frametitle{Les états pour les groupes}
\begin{figure}
\includegraphics[scale=0.4]{nagios-hostgroup.jpg}%
\end{figure}
\end{frame}
%%%%%%%%%%% section %%%%%%%%%%%%%
\section[Le serveur Nagios]{Configuration du serveur Nagios}
\frame{
\frametitle{On a besoin de}
\begin{itemize}
\item De Nagios et Nagios-plugins http://www.nagios.org/download/
\item Lire les README et INSTALL
\item Des dépendances de ces paquets
\item D'un serveur smtp
\end{itemize}
}
\frame{
\frametitle{Installation}
\begin{itemize}
\item Paquets de votre distribution ou compilation manuelle (./configure, make, make install )
\item Installation d'un serveur smtp (pour les notifications)
\item Créer un utilisateur pour l'interface : htpasswd.users
sudo htpasswd /etc/nagios/htpasswd.users username
\end{itemize}
}
\begin{frame}[fragile]
\frametitle{La configuration}
\begin{itemize}
\item /etc/nagios/
\item /etc/nagios/nagios.cfg
\item Fichiers séparés dans /etc/nagios/ (soit /etc/nagios/conf.d/)
\item Les plugins : /usr/lib/nagios/plugins/
\end{itemize}
\end{frame}
\frame{
\frametitle{Dans nagios.cfg 1/3}
\begin{itemize}
\item Command definitions
\begin{itemize}
\item Soit cfg\_file=/etc/nagios/commands.cfg
\item Soit cfg\_dir=/etc/nagios/conf.d
\end{itemize}
\item Plugins : cfg\_dir=/usr/lib/nagios/plugins/
\item Stockage des données :
\begin{itemize}
\item comment\_file=/var/log/nagios/comments.dat
\item downtime\_file=/var/log/nagios/downtime.dat
\end{itemize}
\end{itemize}
}
\frame{
\frametitle{Dans nagios.cfg 2/3}
\begin{itemize}
\item RUN AS : nagios\_user=nagios et nagios\_group=nagios
\item Logs : log\_file=/var/log/nagios/nagios.log
\item log\_rotation\_method=d (daily, none, hourly, weekly, monthly (?))
\item log\_archive\_path=/var/log/nagios/archives
\item log\_notifications=1
\item log\_service\_retries=1
\item ...
\item log\_passive\_checks=1
\end{itemize}
}
\frame{
\frametitle{Dans nagios.cfg 3/3}
\begin{itemize}
\item enable\_notifications=1
\item PROCESS PERFORMANCE DATA OPTION
\item ...
\end{itemize}
}
\frame{
\frametitle{Dans nagios/conf.d}
\begin{itemize}
\item 1 fichier par machine à monitorer host-hostname\_nagios2.cfg
\item contacts\_nagios2.cfg
\item extinfo\_nagios2.cfg
\item 1 fichier par modèle d'hôte : generic-host\_nagios2.cfg
\item 1 fichier par modèle de service : generic-service\_nagios2.cfg
\item services\_nagios2.cfg
\item localhost\_nagios2.cfg
\item timeperiods\_nagios2.cfg
\item hostgroups\_nagios2.cfg
\end{itemize}
}
\begin{frame}[fragile]
\frametitle{Un fichier host-hostname\_nagios2.cfg }
\begin{block}{host-serveur01\_nagios2.cfg}
\begin{verbatim}
# a host definition
define host {
host_name serveur01
alias DHCP-01
address X.X.X.2
use generic-host
parents gateway01
}
\end{verbatim}
\end{block}
\end{frame}
\begin{frame}[fragile]
\frametitle{Les parents}
\begin{tabular}{cc}
\begin{minipage}[c]{5.5cm}
\begin{figure}
\includegraphics[scale=0.5]{srv-sw.pdf}%
\end{figure}
\end{minipage}
&
\begin{minipage}[c]{4.5cm}
\begin{block}{Les hôtes}
\begin{scriptsize}
\begin{verbatim}
define_host{
host_name gateway-1 }
define_host{
host_name switch-00
parents gateway-1 }
define_host{
host_name switch-10
parents switch-00 }
define_host{
host_name server-11
parents switch-10 }
...
\end{verbatim}
\end{scriptsize}
\end{block}
\end{minipage}
\end{tabular}
\end{frame}
\begin{frame}[fragile]
\frametitle{Le schéma selon Nagios}
\begin{figure}
\includegraphics[scale=0.5]{nagios-map1.jpg}%
\end{figure}
\end{frame}
\begin{frame}[fragile]
\frametitle{Un modèle d'hôte generic-host\_nagios2.cfg}
\begin{scriptsize}
\begin{verbatim}
# Generic host definition template -
# This is NOT a real host, just a template!
define host{
name generic-host ; host template
notifications_enabled 1 ; Host notifications
event_handler_enabled 1 ; Host event handler
flap_detection_enabled 1 ; Flap detection
failure_prediction_enabled 1 ; Failure prediction
process_perf_data 1 ; Process performance data
retain_status_information 1 ; Retain status information
retain_nonstatus_information 1 ; Retain non-status information
check_command check-host-alive
max_check_attempts 10
notification_interval 0
notification_period 24x7
notification_options d,u,r
contact_groups admins
register 0 ; DONT REGISTER THIS DEFINITION
}
\end{verbatim}
\end{scriptsize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Un modèle de service : host-service\_nagios2.cfg}
\begin{tiny}
\begin{verbatim}
define service{
name generic-service ; The 'name' of this template
active_checks_enabled 1 ; Active service checks are enabled
passive_checks_enabled 1 ; Passive service checks are accepted
parallelize_check 1 ; Active service checks should be parallelized
obsess_over_service 1 ; We should obsess over this service
check_freshness 0 ; Default is to NOT check service 'freshness'
notifications_enabled 1 ; Service notifications are enabled
event_handler_enabled 1 ; Service 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_interval 0 ; Only send notifications on status change by default.
is_volatile 0
check_period 24x7
normal_check_interval 5
retry_check_interval 1
max_check_attempts 4
notification_period 24x7
notification_options w,u,c,r
contact_groups admins
register 0 ; DONT REGISTER THIS DEFINITION
- ITS NOT A REAL SERVICE, JUST A TEMPLATE!
}
\end{verbatim}
\end{tiny}
\end{frame}
\begin{frame}[fragile]
\frametitle{Hostgroups }
\begin{block}{hostgroups\_nagios2.cfg}
\begin{verbatim}
# A list of the GRID project servers
define hostgroup {
hostgroup_name grid-servers
alias GRID servers pool 1
members grid01,grid02,grid03,[...]
}
\end{verbatim}
\end{block}
\end{frame}
\begin{frame}[fragile]
\frametitle{Résumé pour tous les groupes}
\begin{figure}
\includegraphics[scale=0.4]{nagios-hostgroup-sum.jpg}%
\end{figure}
\end{frame}
\begin{frame}[fragile]
\frametitle{Liste des services}
\begin{block}{services\_nagios2.cfg}
\begin{verbatim}
# check that web services are running
define service{
hostgroup_name http-servers
service_description HTTP
check_command check_http
use generic-service
}
\end{verbatim}
\end{block}
\end{frame}
\begin{frame}[fragile]
\frametitle{Timeperiods}
\begin{block}{timeperiods\_nagios2.cfg}
\begin{scriptsize}
\begin{verbatim}
define timeperiod{
timeperiod_name 24x7
alias 24 Hours A Day, 7 Days A Week
sunday 00:00-24:00
monday 00:00-24:00
tuesday 00:00-24:00
wednesday 00:00-24:00
thursday 00:00-24:00
friday 00:00-24:00
saturday 00:00-24:00
}
# This one is a favorite: never :)
define timeperiod{
timeperiod_name never
alias Never
}
\end{verbatim}
\end{scriptsize}
\end{block}
\end{frame}
\begin{frame}[fragile]
\frametitle{Contacts }
\begin{block}{contacts\_nagios2.cfg}
\begin{scriptsize}
\begin{verbatim}
define contact{
contact_name achaumat
alias NagiosUser01
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r,f
host_notification_options d,r
service_notification_commands notify-by-email
host_notification_commands host-notify-by-email
email xxxxxxx_AT_xxxxxxxx.xxx
}
\end{verbatim}
\end{scriptsize}
\end{block}
\end{frame}
%%%%%%%%%%% section %%%%%%%%%%%%%
\section[Hôtes distants - NRPE]{Configuration de NRPE}
\frame{
\frametitle{A distance}
\begin{itemize}
\item Nrpe ou Nsca
\item Dépôt de plugins et d'un agent passif sur la machine distante
\item Le serveur central intérroge l'agent passif
\item Liaison via SSL, SSH
\item Ici on va prendre comme exemple nrpe : plugin : check\_nrpe
\end{itemize}
}
\begin{frame}[fragile]
\frametitle{Sur les clients on rajoute }
\begin{block}{les paquets}
\begin{verbatim}
fping
perl-Net-SNMP
perl-Digest-SHA1
perl-Socket6
perl-Crypt-DES
perl-Digest-HMAC
nagios-plugins
nagios-nrpe
\end{verbatim}
\end{block}
\end{frame}
\begin{frame}[fragile]
\frametitle{Configuration du client}
\begin{block}{Le client sera interrogé par le serveur nagios}
Ici j'ai pris comme example de l'espace utilisé des disques durs
\end{block}
\end{frame}
\begin{frame}[fragile]
\frametitle{Sur le serveur nagios }
\begin{itemize}
\item On rajoute un groupe d'hôtes ressources-nrpeclients
\item On rajoute les services pour les hôtes de ce groupe
\end{itemize}
\begin{block}{Dans les services on rajoute}
\begin{scriptsize}
\begin{verbatim}
define service {
use generic-service
hostgroup_name ressources-nrpeclients
service_description /
check_command check_nrpe!check_slash
name check_slash
}
\end{verbatim}
\end{scriptsize}
\end{block}
\end{frame}
\begin{frame}[fragile]
\frametitle{On va configurer le client nrpe sur l'hôte distant}
\begin{itemize}
\item Faire un df, noter les devices pour / et /var. / = /dev/mapper/VolGroup00-LogVol00 et /var = /dev/sda2
\item Dans le fichier de configuration : /etc/nagios/nrpe.cfg ne rien toucher
(configuration par défaut pour un unique serveur distant) SAUF :\begin{scriptsize}
\begin{verbatim}command[check_var]=/usr/lib/nagios/plugins/check_disk
-w 20 -c 10 -p /dev/sda2
\end{verbatim}
\end{scriptsize}
\item Dans /etc/services : nrpe 5666/tcp
\item Dans le fichier /etc/hosts.allow rajouter la ligne : nrpe : X.X.X.X
\item Ensuite sur le serveur, tester en console : \begin{scriptsize} \begin{verbatim}/usr/lib/nagios/plugins/check_nrpe -H machineXX.blabla.fr -c check_var
DISK OK - free space: /var 1875 MB (40\% inode=96\%);|/var=2800MB;4905;4915;0;4925 \end{verbatim}
\end{scriptsize}
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Exemple de services monitorables : hardware}
\begin{itemize}
\item utilisation du swap / ram / disques durs
\item sensors
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Exemple de services monitorables : software}
\begin{itemize}
\item Services ntp, ssh, http, dhcp (renvoie le temps pour obtenir un dhcpoffer), smtp, ldap, UPS, ...
\item Systèmes : nb processes, nb users connectés, charge (load), ...
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Exemple de services monitorables}
\begin{exampleblock}{Configuration pour le service de ntp}
\begin{scriptsize}
\begin{verbatim}
define service {
use generic-service
hostgroup_name nrpe-clients
service_description time
check_command check_nrpe!check_ntp
name check_time
}
\end{verbatim}
\end{scriptsize}
\end{exampleblock}
\end{frame}
\frame{
\frametitle{Liste des services pour un groupe}
\begin{center}
\begin{figure}
\includegraphics[scale=0.45]{nagios-hostgroup-grid.jpg}%
\end{figure}
\end{center}
}
\frame{
\frametitle{Liste des hôtes et de leurs services}
\begin{center}
\begin{figure}
\includegraphics[scale=0.45]{nagios-services-details.jpg}%
\end{figure}
\end{center}
}
%%%%%%%%%%% section %%%%%%%%%%%%%
\section[Notifications]{Aperçu des notifications dans Nagios}
\frame{
\frametitle{Les notifications}
\begin{itemize}
\item Etre prévenu
\item Avoir une trace de l'activité : détecter, planifier
\item Pouvoir donner des tendances, générer des rapports de disponibilités
\item C'est vrai que comme les adminsys passent leurs journées à attendre une panne
devant leur écran, on peut se demander à quoi sert cette fonctionnalité ;)
\end{itemize}
}
\begin{frame}[fragile]
\frametitle{Trends - Tendances}
\begin{figure}
\includegraphics[scale=0.4]{nagios-trends.jpg}%
\end{figure}
\end{frame}
\frame{
\frametitle{Les emails reçus - problem}
\begin{center}
\begin{figure}
\includegraphics[scale=0.5]{nagios-mails.jpg}%
\end{figure}
\end{center}
}
\frame{
\frametitle{Les emails reçus - recovery }
\begin{center}
\begin{figure}
\includegraphics[scale=0.7]{nagios-mails-2.jpg}%
\end{figure}
\end{center}
}
\begin{frame}[fragile]
\frametitle{Escalade de notifications pour un hôte (UP/DOWN)}
\begin{itemize}
\item http://nagios.sourceforge.net/docs/2\_0/escalations.html
\item escalations.cfg
\end{itemize}
\begin{exampleblock}{HOST}
\begin{scriptsize}
\begin{verbatim}
define hostescalation{
host_name gateway20
first_notification 5 ;nbre de notifications avant contact
last_notification 10
notification_interval 60
contact_groups all-gateway-admins
}
\end{verbatim}
\end{scriptsize}
\end{exampleblock}
\end{frame}
\begin{frame}[fragile]
\frametitle{Escalade de notifications pour un service}
\begin{scriptsize}
\begin{verbatim}
define serviceescalation{
host_name ourwebserver
service_description HTTP
first_notification 3
last_notification 5
notification_interval 90
contact_groups webadmins,managers
}
define serviceescalation{
host_name ourwebserver
service_description HTTP
first_notification 6
last_notification 10
notification_interval 60
contact_groups webadmins,managers,all
}
\end{verbatim}\end{scriptsize}
\end{frame}
\frame{
\frametitle{Le plugin Nagios checker pour mozilla-\*}
Téléchargeable : https://addons.mozilla.org/fr/thunderbird/addon/3607
et https://addons.mozilla.org/en-US/firefox/addon/3607
\begin{center}
\begin{figure}
\includegraphics[scale=0.25]{checker-1.jpg}%
\end{figure}
\end{center}
}
\frame{
\frametitle{Détail des actions pour un hôte}
\begin{center}
\begin{figure}
\includegraphics[scale=0.45]{nagios-detail-host.jpg}%
\end{figure}
\end{center}
}
\frame{
\frametitle{Acquittements : acknowledgement}
\begin{center}
\begin{figure}
\includegraphics[scale=0.45]{nagios-acknol.jpg}%
\end{figure}
\end{center}
}
%%%%%%%%%%% section %%%%%%%%%%%%%
\section[À Lire]{À lire sur Nagios}
\frame{
\frametitle{Versions actuelles en juillet 2007}
\begin{itemize}
\item Nagios 2.9
\item Nrpe 2.8.1
\item Plugins 1.4.9
\item -----------------
\item English : Nagios system and network monitoring by Wolfgang Barth
\item http://nagios.sourceforge.net/docs/
\end{itemize}
}
% la licence
\frame{
\frametitle{Echanges}
\begin{itemize}
\item Merci pour votre attention
\item La présentation est en GFDL
\item La présentation et le .tex sont sur
\href{http://www.zopeuse.org/conferences}{{\color{blue}http://www.zopeuse.org/conferences}}
\item \scriptsize
Copyright (c) 2007 Aurelie CHAUMAT \\
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
\end{itemize}
}
\end{document}