Introduction

Le système de supervision utilisant checkmk est installé sur gaffe.

Ajouter un nouvel utilisateur de check_mk

L'authentification de check_mk est commune avec celle de nagios (check_mk utilise nagios pour fonctionner). L'authentification est faite par le biais du REMOTE_USER d'apache.

Les identifiants et mots de passe sont stockés dans le fichier htpasswd /etc/nagios3/htpasswd.users

USER=#<mon_utilisateur>

[ -n $USER ] && sudo htpasswd /etc/nagios3/htpasswd.users $USER

Surveiller un nouvel équipement

À la différence de nagios, check_mk dispose d'un mécanisme d'autoconfiguration. Il permet de "détecter" un bon nombre de services automatiquement.

L'autoconfiguration repose sur l'installation d'un agent sur les équipements que l'on souhaite surveiller. Il est aussi possible d'utiliser les sondes habituelles (sondes distantes, snmp, etc.).

Nous faisons en sorte que check_mk utilise ssh pour joindre les machines.

Installation de l'agent check_mk sur le nouvel équipement

Note : L'installation et la configuration de l'agent check_mk est automatisée via Ansible.

# /!\ Utiliser la version depuis squeeze-backports ou supérieur
apt-get install check-mk-agent

avec xinetd (deprecated)

apt-get install xinetd

# activer check-mk dans xinetd
sed -e 's/^\([[:space:\]]only_from[^=]*=\).*/\1 127.0.0.1 91.216.110.7/' -i /etc/xinetd.d/check_mk
sed -e 's/^\([[:space:\]]disable[^=]*=.*\)/#\1/' -i /etc/xinetd.d/check_mk
service xinetd reload

avec ssh

# Créer un utilisateur check_mk_agent
adduser --system --home /var/lib/check_mk_agent --group check_mk_agent --shell /bin/sh

# Créer un fichier `/etc/sudoers.d/check_mk_agent`
cat > /etc/sudoers.d/check_mk_agent <<EOF
check_mk_agent        ALL=NOPASSWD: /usr/bin/check_mk_agent
EOF

# Rajouter la clé de gaffe dans le fichier `/var/lib/check_mk_agent/.ssh/authorized_keys`
mkdir /var/lib/check_mk_agent/.ssh
cat >> /var/lib/check_mk_agent/.ssh/authorized_keys <<EOF
command="sudo /usr/bin/check_mk_agent",no-port-forwarding,no-agent-forwarding,no-X11-forwarding ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDiyusB/Xk1LVNoBNfgsPk9kNRP1nlwsjWdv78FOOjXEyPZoPeGSMtfeMLcxLhEZdTwcIIsx9BjOmE1Lz5b90dJLa5bXu76f0ZWkyaC2bEbCxfCIx0DjLeOCoQmyeBoCqowWS0Bwb58pn8UziYXwZU3GPlGNiDU4J/kllq2zepg2FpTrfdhGpOIZMHzoKqZbEwSUGmKnISv/Bl6h3DUYZuKGjvIivhaP7OOKYYq3U8IzifAQvR3NeRheQK1Wd7qRnZGsjBnLd5wwrNpyR3XZnm45rRB1GXBYfzBoQWfA6jNsxq98jfKAuNng2LTRbAymJnK3G1BXk6DOz4XKU+MDt6d1PYTphpqjQhGmsram1LFJUzg2vyc/J4bkx6Rs+HigQ2rqBmEDkdySy4qj+d+F4eSoZ6Hhj9Or3S1xwsQpnaNAzpZ9eRDL7ZUKN/1rfBVG4S5dJXdfGxgDciaCDdLHF8fe83VQriLklIUtevvH9tAm0Zg1VemvP8Omx6+SEi8GkYrBEuunRlxgW81LnL2UIrgHF6rra4v9Cz/Vk7Vw0bAoe0nr++6LbMIuWzA58swO4JzoTu0P8QFu4norIjp3YWHaBnYrOxbCp87Pcrd6/286oUOcpeO9w4EBENJydUWAegPcSEeoy2CLmkour/ec26izKwHfUJzLh8DEYLiKZdy/w== nagios@gaffe.grenode.net
EOF
chmod 700 /var/lib/check_mk_agent/.ssh
chown check_mk_agent:check_mk_agent /var/lib/check_mk_agent/.ssh

Les machines doivent être rajoutées dans check_mk avec le tag ssh.

Ajout dans la conf du serveur check_mk

Sur le serveur de supervision, les fichiers de configuration se trouvent dans le répertoire /etc/check_mk/conf.d. La syntaxe des fichiers est en python. En terme d'organisation de la configuration :

  • 00_contact-common.mk : contient les informations de contact pour les notifications.
  • 00_hosts-{grenode,gresille}.mk : contient les informations concernant les hôtes.
  • 30_check-{common,grenode,gresille}.mk : contient les informations concernant les services/check.
  • 99_extra-common.mk

Inventaire du nouvel équipement

Rajouter si besoin l'IP du nouvel équipement dans /etc/ssh/ssh_config (pour définir le bon port SSH).

Ensuite, on peut faire l'inventaire initial check_mk :

# avec ssh
sudo -u nagios check_mk -v -I <host>

Une fois que ça a fonctionné et qu'on est content des services détectés, recharger la conf nagios :

# avec reload de nagios
check_mk -O

Ajout d'un plugin mrpe/check_mk

L'équivalent de nrpe pour check_mk est mrpe. Le principe de fonctionnement est le même et les plugins nrpe sont compatibles avec mrpe.

Les plugins à installer sur Grenode

ipsec (mrpe plugin)

On commence par récupérer les plugins :

SRC=https://www.grenode.net/Documentation_technique/Divers/Supervision-checkmk/mrpe_plugins/check_ipsec2
DST=/usr/local/lib/nagios/plugins/check_ipsec2
sudo curl -o $DST $SRC
sudo chmod +x $DST
sudo mkdir /etc/check_mk
SRC=https://www.grenode.net/Documentation_technique/Divers/Supervision-checkmk/mrpe_plugins/utils.sh
DST=/usr/local/lib/nagios/plugins/utils.sh
sudo curl -o $DST $SRC
sudo chmod +x $DST
sudo etckeeper commit "Installation plugins mrpe"
sudo apt-get install fping

Ensuite on demande le status des tunnels, par exemple sur ?radeau :

ipsec status
Security Associations (2 up, 0 connecting):
estran_via_ldn_edx[4]: ESTABLISHED 15 minutes ago, 80.67.188.193[C=FR, ST=France, L=Nancy, O=Grenode, CN=radeau-13.grenode.net]...149.7.4.180[C=FR, ST=France, L=Lyon, O=Grenode, CN=estran-13.grenode.net]
estran_via_ldn_edx{1}:  INSTALLED, TUNNEL, ESP SPIs: cab905f6_i ce35dac0_o
estran_via_ldn_edx{1}:   10.13.50.8/32 === 10.13.50.6/32
estran_via_ldn_ielo[3]: ESTABLISHED 17 minutes ago, 80.67.188.193[C=FR, ST=France, L=Nancy, O=Grenode, OU=grenode, CN=radeau-ldn.grenode.net, E=noc@grenode.net]...212.85.148.234[C=FR, ST=France, L=Grenoble, O=Grenode, OU=Grenode, CN=estran.grenode.net]
estran_via_ldn_ielo{2}:  INSTALLED, TUNNEL, ESP SPIs: cb88db4e_i c01ef4b1_o
estran_via_ldn_ielo{2}:   10.8.50.8/32 === 10.8.50.6/32

Pour chacun des tunnels (ici, estran_via_ldn_edx et estran_via_ldn_ielo), on ajoute un check au fichier /etc/check_mk/mrpe.cfg :

check_gre_ipsec_estran_via_ldn_ielo /usr/local/lib/nagios/plugins/check_ipsec2 -c estran_via_ldn_ielo
check_gre_ipsec_estran_via_ldn_edx  /usr/local/lib/nagios/plugins/check_ipsec2 -c estran_via_ldn_edx

On peut tester la config pour être sûr (avec X étant le nombre de tunnels) :

sudo /usr/local/lib/nagios/plugins/check_ipsec2 -a X

smart (check_mk plugin)

(Cf http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=649677)

USER=<login>
SRC=https://www.grenode.net/Documentation_technique/Divers/Supervision-checkmk/checkmk_plugins/smart
DST=/usr/lib/check_mk_agent/plugins/smart
sudo curl --user $USER  -o $DST $SRC
sudo chmod +x $DST
sudo apt-get install smartmontools

Après l'ajout de plugins il faut refaire l'inventaire sur le serveur.

# avec xinetd
check_mk -v -I <host>

# avec ssh
sudo -u nagios check_mk -v -I <host>

Et recharger la conf nagios

# avec reload de nagios
check_mk -O

# avec restart de nagios
check_mk -R

Il est possible de suprimer l'inventaire d'une machine et de le reconstruire complètement :

# avec xinetd
check_mk -v -II <host>

# avec ssh
sudo -u nagios check_mk -v -II <host>

Borg backup

Il est possible d'ajouter un check sur la date du dernier point de sauvegarde effectué par Borg (voir. la section Borg dans Espaces de sauvegarde).

Et ainsi envoyer une notification 'warning' si la dernière sauvegarde date de plus d'un jour, et une alerte critique si cette date est supérieure à deux jours.

SRC=https://www.grenode.net/Documentation_technique/Divers/Supervision-checkmk/mrpe_plugins/utils.sh
DST=/usr/local/lib/nagios/plugins/utils.sh
sudo curl -o $DST $SRC
sudo chmod +x $DST
SRC=https://raw.githubusercontent.com/bebehei/nagios-plugin-check_borg/884175407799c6dd4cb51621efa0a6df5c3a4ffb/check_borg
DST=/usr/local/lib/nagios/plugins/check_borg
sudo curl -o $DST $SRC
sudo chmod +x $DST
sudo etckeeper commit "Installation plugins check_borg"

Afin d'utiliser les infos relatives au repo borg (repo et mot de passe), il est nécessaire de modifier le script pour sourcer le fichier . /etc/.borg

# ajouter ``. /etc/.borg`` en haut du fichier
vi /usr/local/lib/nagios/plugins/check_borg

Et enfin on ajoute le script dans /etc/check_mk/mrpe.cfg

LDN_Backups /usr/local/lib/nagios/plugins/check_borg -w '1 day ago' -c '2 day ago'

Installation du serveur de supervision

# Installation d'apache2
apt-get install apache2-mpm-itk

# Configuration du serveur
SSL_CRT=/etc/ssl/certs/grenode-crt.pem
SSL_KEY=/etc/ssl/private/grenode-key.pem

cat > /etc/apache2/sites-availables/ << EOF
<VirtualHost *:80>

  ServerAdmin root AT grenode.net
  ServerName nagios.grenode.net

  AssignUserId nagios nagios

  Redirect permanent / https://gaffe.grenode.net/

</VirtualHost>

<VirtualHost *:443>

    ServerAdmin root AT grenode.net
    ServerName gaffe.grenode.net

    AssignUserId nagios nagios

    SSLEngine on
    SSLCertificateFile    $SSL_CRT
    SSLCertificateKeyFile $SSL_KEY

    Include /etc/apache2/sites/gaffe.grenode.net/*.conf

</VirtualHost>
EOF

mkdir -p /etc/apache2/sites/gaffe.grenode.net/

cat > /etc/apache2/sites/gaffe.grenode.net/00-base.conf << EOF
DocumentRoot /var/www/gaffe.grenode.net
EOF
mkdir -p /var/www/gaffe.grenode.net

# installation de mysql
apt-get install mysql-server mysql-client
touch /root/.my.cnf
chmod og-rwx /root/.my.cnf
vim /root/.my.cnf # rajout du mot de passe root mysql


# les prérequis (ceux choisis)
apt-get install pnp4nagios nagios3 nagios-nrpe-server ndoutils-nagios3-mysql

rm -f /etc/apache2/conf.d/nagios3.conf
rm -f /etc/apache2/conf.d/pnp4nagios.conf

ln -sf /etc/nagios3/apache2.conf /etc/apache2/sites/gaffe.grenode.net/20-nagios3.conf
ln -sf /etc/pnp4nagios/apache.conf /etc/apache2/sites/gaffe.grenode.net/20-pnp4nagios.conf

dpkg-statoverride --add --update nagios nagios 751 /var/lib/nagios3

a2dismod deflate
service apache2 restart

# installation de checkmk
apt-get install check-mk-server check-mk-livestatus check-mk-multisite check-mk-config-nagios3

# Activer le ssh pour check_mk
cat > /etc/check_mk/conf.d/500-ssh.conf <<EOF
datasource_programs = [
    ( "ssh -o 'ControlPath ~/.ssh/cmk-%r@%h:%p' -o 'ControlMaster auto' -o 'ControlPersist 600' -b 91.224.149.11 -l check_mk_agent <IP> sudo /usr/bin/check_mk_agent", ['ssh'], ALL_HOSTS ),
]
EOF

Installation du nagircbot

apt-get install nagircbot

Ensuite, la configuration se passe dans /etc/default/nagircbot :

  • on passe à ENABLED
  • on met le serveur, le chan et le nick
  • dans les options, on ajoute le mot de passe du chan, et on filtre les alertes matchant gresille