Outils pour utilisateurs

Outils du site


zabbix

Zabbix

Vérification

Montage d'une vm (baratine) avec un client actif et vérification des différents trigger:

  1. verif espace disque : OK
  2. mysql: ok après correction du fichier userparameter qui ne vérifiait pas correctement l'état de mysql
  3. verif service sur port 9000

Installation sur Centos:

yum install –enablerepo=epel zabbix-web-mysql zabbix-server-mysql mysql-server

créer une base de donnée et un compte sql dédié

intégrer les fichiers sql présent dans /usr/share/doc/zabbix-server-mysql-1.8.22 /create

créer le fichier /etc/php.d/zabbix.ini :

memory_limit = 256M
post_max_size=16M
max_execution_time=300
max_input_time=300

Démarrer le service

Aller sur http://serveur/zabbix

login with “admin” / “zabbix

Monitoring "passif"

En fait d'un point de vue vocabulaire, c'est l'inverse: zabbix travail par défaut en “passif”, ce qu'on veut (pour pouvoir traverser les parefeu, c'est faire de l'actif).

Pour ce faire (cf http://www.fontenay-ronan.fr/zabbix-monitor-a-device-behind-a-nat-firewall/ ):

  1. cloner le template de notre choix (par ex Template OS Linux )
  2. modifier tous les items pour utiliser le type “ZabbixAgent (active)” (on peut le faire via un mass update)
  3. rajouter les hosts au template
  4. enjoy

Enregistrement automatique de nouvelles machines

re: https://www.zabbix.com/documentation/3.0/manual/discovery/auto_registration

Il faut créer une nouvelle action auto-registration

Dans les conditions, on peut se baser sur les metadata, en mettant en place une clé partagée

Au niveau de la config de l'agent:

PidFile=/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=infra2.opendoor.fr
ServerActive=infra2.opendoor.fr:10051
HostnameItem=system.hostname
RefreshActiveChecks=60
HostMetadata=Linux SHARED_SECRET
Include=/etc/zabbix/zabbix_agentd.d/

Tester ses items

On peut utiliser la commande zabbix_get (paquet du même nom):

zabbix_get -s gelatine -k 'system.run[/etc/nagios/check_age.py /srv/nas/groupers/ 2]'

On peut utiliser la commande zabbix_agentd -p pour afficher tous les items connus localement.

On peut utiliser la commande

zabbix_agentd -R log_level_increase

Pour augmenter dynamiquement la verbosité des logs de l'agent.

Ne pas oublier de faire un log_level_decrease ensuite.

Sans zabbix_get on peut utiliser directement l'agent:

zabbix_agent -t vfs.file.contents[c:\foo\bar]

Exécution de scripts distants

Via le type d'item system.run sachant que l'agent doit autoriser ce type: EnableRemoteCommands=1

Installer le client sur Windows

Le zip dans ~/Documents/Opendoor/Technique fait ça très bien

Installer le client sur MacOSX

Je ne me souviens plus de l'origine des sources. voir https://apple.stackexchange.com/questions/202766/zabbix-agent-installation

Pour le service: créer un compte utilisateur

dscl . -create /Groups/_zabbix
dscl . -create /Users/_zabbix PrimaryGroup _zabbix 

Créer le fichier /Library/LaunchAgents/org.macports.zabbix_agent.plist

                                                                                                                        
<?xml version="1.0" encoding="UTF-8"?>                                                                                                                                                                             
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>org.macports.zabbix_agent</string>

        <key>ProgramArguments</key>
        <array>
                <string>/Users/Administrateur/zabbix_agent/sbin/zabbix_agentd</string>
                <string>   -c /Users/Administrateur/zabbix_agent/conf/zabbix_agentd.conf</string>
        </array>

        <key>OnDemand</key>     <false />
        <key>Disabled</key>     <false />
</dict>
</plist>

Activer et lancer le service

launchctl load -w /Library/LaunchAgents/org.macports.zabbix_agent.plist

Vérifier les backup windows

Vérifier l'espace disque sur windows

perf_counter["\Disque logique(C:)\% Espace libre"]

Vérifier un service

Le plus simple est de créer un item:

net.tcp.service[tcp,,#port]

MySQL

  1. créer un utilisateur mysql pour zabbix avec les droits USAGE
  2. créer un fichier ~/.my.cnf dans /var/lib/zabbix contenant les informations ci-dessus.
  3. créer le fichier /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf contenant:
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -N | awk '{print $$2}'
UserParameter=mysql.size[*],bash -c 'echo "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema=\"$1\"")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name=\"$2\"");" | HOME=/var/lib/zabbix mysql -N'
UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive
UserParameter=mysql.version,mysql -V

Vérifier l'âge d'une sauvegarde

Le principe consiste à identifier le fichier le plus récent et émettre une alerte s'il y a une trop grande différence avec la date du jour.

On s'appuie sur le script ~/Documents/Opendoor/Developpement/Scripts/Backupscheck_age_quiet.py

(Il faut que l'utilisateur zabbix dispose d'un accès en lecture sur le répertoire à surveiller)

On définit un script personnalisé sur le client:

cat /etc/zabbix/zabbix_agentd.d/userparameter_backup_age.conf
UserParameter=check_age[*],sudo /etc/zabbix/check_age_quiet.py $1

Puis sur le serveur on définit un item et un trigger basé dessus, où l'on spécifiera la différence (en jour) max autorisée avant de générer une alerte.

problème On peut être confronté à des problèmes de timeout (dans le cas d'une arborescence trop importante) et de permissions. Il peut dans ce cas être préférable d'utiliser une solution basée sur les logs, ou un fichier de status.

Vérifier un disque externe sous Windows

Déployer le script bat suivant dans c:\zabbix

@echo off


if -%1-==--  echo 5

vol %1 > nul 2>&1
echo %errorlevel%

Rajouter dans la configuration de l'agent zabbix la ligne suivante:

UserParameter=custom.vfs.drive.exist[*],c:\zabbix\check_drive.bat

Relancer le service Zabbix.

S'assurer que la machine soit liée au template DISK E ou F

Ce template vérifie la présence et l'espace disque disponible sur le disque correspondant.

Vérifier un point de montage sous linux

Rajouter un fichier /etc/zabbix/zabbix_agentd.d/userparameret_mountpoint.conf avec le contenu suivant:

UserParameter=check_mountpoint[*],grep -q "$1" /proc/mounts ; echo $?

qui permet de définir une nouvelle clé check_mountpoint['/foo'] qui renvoie 0 si foo est monté, 1 dans le cas contraire

Surveiller les sauvegardes rsnapshot via les logs

Créer un item de type log[/var/log/rsnapshot.log] qui va remonter toutes les lignes de logs contenant le terme error.

Créer un trigger utilisant cet item avec la fonction str(error)

Le trigger va repasser dans le vert une fois une nouvelle ligne (propre) insérée dans le log

Monitorer l'âge d'un fichier

On peut imaginer un script qui enregistre dans un fichier de status son code de retour:

  1. en examinant le contenu du fichier, on vérifie le bon fonctionnement du script.
  2. en examinant la date de dernière modif du fichier, on s'assure de la bonne exécution régulière du script.

Pour ce faire, il faut créer 2 items, utilisant respectivement vfs.file.time et vfs.file.contents.

Il faut ensuite créer un trigger utilisant l'expression suivante:

{lune-www:vfs.file.time[/var/run/zabbix/mysql.status].now()}-{lune-www:vfs.file.time[/var/run/zabbix/mysql.status].last()}> 3600
or
{lune-www:vfs.file.contents[/run/zabbix/mysql.status].last()}<>0

Ce trigger doit raler si la date de dernière modif de /var/run/zabbix.mysql.status est > 1h ou s'il contient une valeur différente de 0

Item calculés

On peut créer des items en combinant des items existants entre eux.

il faut créer un item de type calculated , on a ensuite la possibilité de faire combiner plusieurs items entre eux (en les passant notamment comme paramètre de la fonction last)

Attention toutefois aux erreurs de syntaxe. Penser à jeter un œil sur les logs serveurs

Macros

les macros sont des variables que l'on peut associer à différents objets (template, host, etc)

Utilisé par exemple pour la vérification des disques externes. On définit 1 seul template avec un seul item (et un seul trigger) qui va vérifier {$EXT_DRIVER_LETTER}, macro définie au niveau du host.

TODO: comment gérer le cas où on a plusieurs items à utiliser ?

Vérifier la rotation d'un disque externe

But: s'assurer que dans le cadre d'une sauvegarde externe basée sur la rotation de 2 disques, cette rotation soit faite à intervalle régulier.

Idée: l'insertion du disque entraîne la création / mise à jour d'un fichier de status dont l'âge / mtime est modifié par zabbix.

modope:

Créer une règle udev

Gestion des prototypes

Idée: adapter la surveillance de l'âge et contenu d'un fichier pour que cela fonctionne quelque soit le nombre de fichier.

Création du script de découverte

Mettre au point un script qui va renvoyer la liste des fichiers à surveiller au format json:

 cat /etc/zabbix/scripts/lld_backup_status_file.py
#!/usr/bin/python
import glob
import json

if __name__ == "__main__":
    data=[]
    files=(file for file in glob.glob( "/var/run/zabbix/*.status" ))
    data = [{"{#STATUSFILE}": file} for file in files]
    print(json.dumps({"data": data}, indent=4))

Cela va nous permettre de bénéficier de la macro #STATUSFILE dans nos prototypes

Création d'un item personnalisé

Création d'un item key:

cat /etc/zabbix/zabbix_agentd.d/userparameter_backup_age.conf
UserParameter=status_file.discovery,/etc/zabbix/scripts/lld_backup_status_file.py

zabbix_get -s localhost -k status_file.discovery
{
    "data": [
        {
            "{#STATUSFILE}": "/var/run/zabbix/toto.status"
        },
        {
            "{#STATUSFILE}": "/var/run/zabbix/bar.status"
        },
        {
            "{#STATUSFILE}": "/var/run/zabbix/foo.status"
        }
    ]
}

Puis création d'une règle de découverte faisant référence à la clé définie ci-dessus.

Concernant la fréquence de vérification: on peut la mettre à une petite valeur (30s) pendant la phase de mise au point et l'augmenter une fois en production (12h)

Enfin on embrayse sur la création d'un item prototype. C'est la même chose qu'un item classique, sauf qu'on utilisera comme argument la variable récupérée par le script de découverte, à savoir {#STATUSFILE}:

item name: Backup status file age - {#STATUSFILE}
item key: vfs.file.time[{#STATUSFILE}]

Là encore, la fréquence de mesure pourra commencé par être basse, puis augmenté lors de la mise en production.

Pour terminer, on mettra en place les triggers correspondant.

Vérification âge des fichiers - bis

Le principe: un fichier référence tous les fichiers dont on souhaite vérifier la date de modification.

Ce fichier est associé à la machine via la MACRO FILELIST

Il y a également un MACRO maxage correspondant au nb de jours depuis la dernière modif du fichier.

Ce fichier va être parsé par le script suivant, qui doit être installé dans /etc/zabbix/scripts/lld_filelist.py

#!/usr/bin/python
import glob
import json
from sys import argv,stderr
import sys

if __name__ == "__main__":
    data=[]
    try:
        file = open( sys.argv[1] )
    except:
        sys.exit(1)

    data = [{"{#FILE}": line.strip()} for line in file.readlines()]
    print(json.dumps({"data": data}, indent=4))

On va également rajouter le UserParameter suivant:

UserParameter=parsefilelist[*],/etc/zabbix/scripts/lld_filelist.py "$1"

Il suffit ensuite d'associer la machine au template template file age with lld, de mettre en place les 2 MACROS, et voilà !

TODO: rallonger la fréquence de découverte et verif des items. Rajouter des triggers.

Copier le template pour qu'il surveille le contenu des fichiers

# vim: set filetype=dokuwiki:

zabbix.txt · Dernière modification: 2018/06/16 22:37 (modification externe)