Archives par mot-clé : Zabbix

Utiliser Zabbix pour surveiller le service d’un SQL Server Express

Pour monitorer un service SQL Serveur Express, il existe une petite subtilité par-apport à un service SQL Serveur standard.

En effet, avec la version Express, le nom du service intègre le nom de l’instance de base de donnée. Exemple : MSSQL$SQLEXPRESS si vous utilisez le nom d’instance par défaut.

Le problème, si on veut surveiller le service avec Zabbix, c’est que l’on est obligé d’utiliser le LLD (Low Level Discovery) car le nom du service est potentiellement toujours différent selon le serveur.

Voici la méthode que j’ai mise en œuvre pour une surveillance de base du statut du service, sans avoir à utiliser des scripts Powershell ou d’autres fichiers annexes.

Configuration de l’expression régulière

Dans Administration -> Général -> Regular Expressions, on ajoute une nouvelle expression régulière avec les paramètres suivants :

Name : MSSQL_Express_Service_Name
Expressions :
Expression type : Character string included
Expression : MSSQL$

Configuration de la Discovery rule

Ouvrez un template existant ou créez en nouveau et allez dans Discovery rules -> Create discovery rule :

Name : SQL Server Express Service
Type : Zabbix agent
Key : service.discovery
Update interval : 120

Onglet Filters :
Macro : {#SERVICE.NAME}
Regular expression : @MSSQL_Express_Service_Name

Configuration de l’Item prototype

Dans Discovery rules -> Item prototypes -> Create Item prototype :

Name : SQL: Service State – {#SERVICE.DISPLAYNAME}
Type : Zabbix agent
Key : service.info[{#SERVICE.NAME}]

Configuration du Trigger prototype

Dans Discovery rules -> Trigger prototypes -> Create Trigger prototype :

Name : Service not running : {#SERVICE.DISPLAYNAME}
Expression : {TemplateName:service.info[{#SERVICE.NAME}].last()}<>0
Severity : High

Et voilà !

Suite à une mise à jour, Zabbix ne se lance plus au démarrage.

Voici un petit problème qui m’est arrivé recemment.

Après une mise a jour sur un serveur sous Ubuntu 14.04 hébergeant Zabbix server 3.0.3, celui-ci semblait ne plus se lancer automatiquement après un reboot.

En regardant les logs de Zabbix server, on voit que le processus se lance mais s’arrête car il ne semble pas pouvoir se connecter à la base de données :

1651:20160524:111608.583 End of zbx_mem_create()
1651:20160524:111608.583 End of zbx_vc_init()
1651:20160524:111608.583 In zbx_db_get_database_type()
1651:20160524:111608.583 In DBconnect() flag:0
1651:20160524:111608.587 [Z3001] connection to database 'zabbix' failed: [2002] Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
1651:20160524:111608.588 Cannot connect to the database. Exiting...

Zabbix semble être trop rapide pour Mysql qui ne s’est pas encore lancé … Je ne sais pas pourquoi ce problème est apparu avec cette récente mise à jour.

Mais il est possible de s’en accommoder : en modifiant le fichier de configuration du service zabbix-server.

Celui-ci se trouve ici : /etc/init/zabbix-server.conf

Il faut l’éditer et lui dire d’attendre quelques secondes avant de se lancer, avec la commande <code>sleep</code>, voici mon fichier de configuration avec mes modifications en gras :

# Upstart job to start the zabbix server

description "Zabbix server"
author "Christian Kampka <chris@emerge-life.de>"

start on (filesystem and net-device-up IFACE=lo)
stop on runlevel [!2345]

expect daemon

respawn

# wait for server to properly disconnect from connected nodes
kill timeout 30

console log

env DIR="/var/run/zabbix"

pre-start script
# add a little time to make sure that Mysql has started
 sleep 15

# stop job from continuing if no config file found for daemon
[ ! -f /etc/default/zabbix-server ] && { stop; exit 0; }

# source the config file
. /etc/default/zabbix-server

# stop job from continuing if admin has not enabled service in
# config file.
[ "x$START" = "xyes" ] || { stop; exit 0; }

[ -d "$DIR" ] || mkdir "$DIR"
chown -R zabbix:zabbix "$DIR"

end script

script
. /etc/default/zabbix-server

exec /usr/sbin/zabbix_server -c $CONFIG_FILE
end script

Surveiller le contenu d’un dossier Windows avec Zabbix

Le cas est le suivant : j’ai un dossier dans un serveur Windows qui est partagé sous forme d’un lecteur réseau auprès des salariés de mon entreprise.

Dans une invite de commande, afficher les répertoires contenus dans un dossier se fait avec la commande suivante :

dir "Chemin_du_dossier" /A:D /B

Le paramètre /B permet de ne ressortir que les noms de dossier, pas leur date de modification. Ainsi, le texte retourné est toujours le même tant que un dossier n’a pas été supprimé, ajouté ou renommé.

Mise en oeuvre

Client zabbix

Au niveau du serveur Windows, on ajoute un paramètre utilisateur dans le fichier de configuration zabbix_agentd.win.conf :

UserParameter=QFolderList[*], dir "c:\Services" /A:D /B

(où c:\Services est le chemin local du dossier à surveiller). On redémarre ensuite le service Zabbix sur le serveur windows.

Item

Voici les principaux points à configurer :

  • Type : Zabbix agent
  • Key : Le nom spécifié dans le fichier de configuration, dans mon cas QFolderList
  • Type of Information : Text
  • Update Interval : Attention ! Le volume peut être important ! (dans mon cas j’ai mis 2h (7200s)

zabbix_win_folder_list-1

Trigger

Je choisis ici de recevoir une alerte par email quand la valeur change, j’utilise donc la fonction .diff(0)

zabbix_win_folder_list-2Action

Rien de spécial, un simple envoi par mail quand le trigger passe en « PROBLEM » :

zabbix_win_folder_list-3

Avec Zabbix, détecter si un reboot est necessaire suite à des mises à jour sous Debian / Ubuntu

Pour savoir si un serveur Linux attend un redémarrage, il suffit de vérifier si le fichier /var/run/reboot-required existe. S’il est présent, un redémarrage est à faire.

Pour la mise en place du monitoring de cet élément avec Zabbix, il suffit de créer un item de ce genre :

  • ITEM :
    • Type : Zabbix agent
      • Key : vfs.file.exists[/var/run/reboot-required]
      • Type of information : Numeric (unsigned)
      • Data type : Boolean

Votre item devait alors ressembler à ceci :

linux reboot required item

On peut ensuite y associer un trigger pour avoir une alerte si un redémarrage est à faire :

  • TRIGGER :
    • Expression : {<Template utilisé>:vfs.file.exists[/var/run/reboot-required],last()}=1

Votre trigger devait alors ressembler à ceci :

linux reboot required trigger

 

 

Et enfin voilà le genre d’alerte qui peut être générée :

linux reboot required alerts