Pour monitorer les différentes services du serveur Zimbra.
Il y a un script sur github https://github.com/YetOpen/zabbix-scripts/tree/master/zabbix-zimbra
Sur le serveur Zimbra, après avoir installer l’agent Zabbix il faut créer un fichier de conf et y copier le contenu ci-dessous.
1 |
$ sudo vim /etc/zabbix/zabbix_agentd.d/yo-zimbra.conf |
1 2 3 4 5 |
UserParameter=zimbra.status[*],/etc/zabbix/scripts/zbx_zimbra.sh "$1" UserParameter=zimbra.version,/etc/zabbix/scripts/zbx_zimbra.sh version UserParameter=zimbra.discovery,/etc/zabbix/scripts/zbx_zimbra.sh discover # zmcontrol takes some time... Timeout=15 |
Le script requis des privilèges, créer et copier le contenu suivant dans sudoers
1 |
$ sudo vim /etc/sudoers.d/sudo_zbx-zimbra.conf |
1 2 3 4 |
# Don't log every invocation of zmcontrol Cmnd_Alias ZIMBRA_BIN_ZABBIX = /opt/zimbra/bin/zmcontrol Defaults!ZIMBRA_BIN_ZABBIX !syslog zabbix ALL=(zimbra) NOPASSWD: ZIMBRA_BIN_ZABBIX |
Puis ajouter le script dans /etc/zabbix/scripts ou un autre emplacement (défini dans yo_zimbra.conf) et le rendre executable
1 |
$ sudo vim /etc/zabbix/scripts/zbx_zimbra.sh |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
#!/bin/bash # Zabbix script to check Zimbra services and perform service discovery. # Supports Zimbra 8.6 and "two-worded" service names # Author: Lorenzo Milesi <maxxer@yetopen.it> # Copytight: YetOpen S.r.l. 2016 # License: GPLv3 # uncomment for debug #set -x COMMAND="sudo -u zimbra /opt/zimbra/bin/zmcontrol" FILE='/var/run/zabbix/zimbra_status' DISCOVER_FILE='/var/run/zabbix/zimbra_discover' fork_get_status() { maxage=100 # Very basic concurrency check x=0 while [ -f "$FILE.tmp" ]; do sleep 5; x=$((x+1)) # don't wait too long anyway, remove an eventually stale lock. Anyway we have 15s zabbix agent timeout if [ $x -ge 3 ]; then rm "$FILE.tmp"; fi done #check if cached status file size > 0 if [ -s ${FILE} ]; then OLD=`stat -c %Z $FILE` NOW=`date +%s` # if older then maxage, update file if [ `expr $NOW - $OLD` -gt $maxage ]; then $COMMAND status > $FILE.tmp mv $FILE.tmp $FILE fi else rm -f ${FILE} $COMMAND status > $FILE.tmp mv $FILE.tmp $FILE fi } fork_discover() { # Return a list of running services in JSON SRVCS=$($COMMAND status | grep -v ^Host | awk '{$(NF--)=""; print}' | sed 's/^/\t{ \"{#ZIMBRASERVICE}\":\"/' | sed 's/\ $/\" },/') echo "{" echo -e "\t\"data\":[\n" # Remove last comma from the sting, to make a good JSON echo $(echo $SRVCS | sed 's/,\+$//') echo -e "\n\t]\n" echo "}" } case "$1" in version) # Return zimbra version VERS=$($COMMAND -v) if [ $? -eq 0 ] ; then echo $VERS exit 0; fi # error exit 1; ;; discover) [ -f "$DISCOVER_FILE" ] && cat $DISCOVER_FILE fork_discover > $DISCOVER_FILE & exit 0; ;; *) # move on... check=$1 if [ "$check" = "" ]; then echo "No Zimbra service specified..." exit 1 fi fork_get_status & STATUS="$(cat $FILE | grep "$check" | awk '{print $NF}')" if [ "$STATUS" != "Running" ]; then echo 0 else echo 1 fi ;; esac exit 0; |
1 |
$ sudo chmod +x /etc/zabbix/scripts/zbx_zimbra.sh |
Enfin créer le script .xml, il faudra l’importer depuis l’interface de Zabbix, dans les templates.
1 |
$ vim ~/yo_zimbra_template.xml |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
<?xml version="1.0" encoding="UTF-8"?> <zabbix_export> <version>2.0</version> <date>2014-12-29T13:55:05Z</date> <groups> <group> <name>Templates</name> </group> </groups> <templates> <template> <template>Template Zimbra Services</template> <name>Template Zimbra Services</name> <groups> <group> <name>Templates</name> </group> </groups> <applications> <application> <name>Zimbra</name> </application> <application> <name>Zimbra service</name> </application> </applications> <items> <item> <name>Zimbra version</name> <type>0</type> <snmp_community/> <multiplier>0</multiplier> <snmp_oid/> <key>zimbra.version</key> <delay>43200</delay> <history>7</history> <trends>365</trends> <status>0</status> <value_type>1</value_type> <allowed_hosts/> <units/> <delta>0</delta> <snmpv3_contextname/> <snmpv3_securityname/> <snmpv3_securitylevel>0</snmpv3_securitylevel> <snmpv3_authprotocol>0</snmpv3_authprotocol> <snmpv3_authpassphrase/> <snmpv3_privprotocol>0</snmpv3_privprotocol> <snmpv3_privpassphrase/> <formula>1</formula> <delay_flex/> <params/> <ipmi_sensor/> <data_type>0</data_type> <authtype>0</authtype> <username/> <password/> <publickey/> <privatekey/> <port/> <description/> <inventory_link>0</inventory_link> <applications> <application> <name>Zimbra</name> </application> </applications> <valuemap/> <logtimefmt/> </item> </items> <discovery_rules> <discovery_rule> <name>Zimbra services discovery</name> <type>0</type> <snmp_community/> <snmp_oid/> <key>zimbra.discovery</key> <delay>86400</delay> <status>0</status> <allowed_hosts/> <snmpv3_contextname/> <snmpv3_securityname/> <snmpv3_securitylevel>0</snmpv3_securitylevel> <snmpv3_authprotocol>0</snmpv3_authprotocol> <snmpv3_authpassphrase/> <snmpv3_privprotocol>0</snmpv3_privprotocol> <snmpv3_privpassphrase/> <delay_flex/> <params/> <ipmi_sensor/> <authtype>0</authtype> <username/> <password/> <publickey/> <privatekey/> <port/> <filter>:</filter> <lifetime>30</lifetime> <description/> <item_prototypes> <item_prototype> <name>Zimbra service "$1"</name> <type>0</type> <snmp_community/> <multiplier>0</multiplier> <snmp_oid/> <key>zimbra.status[{#ZIMBRASERVICE}]</key> <delay>120</delay> <history>7</history> <trends>365</trends> <status>0</status> <value_type>3</value_type> <allowed_hosts/> <units/> <delta>0</delta> <snmpv3_contextname/> <snmpv3_securityname/> <snmpv3_securitylevel>0</snmpv3_securitylevel> <snmpv3_authprotocol>0</snmpv3_authprotocol> <snmpv3_authpassphrase/> <snmpv3_privprotocol>0</snmpv3_privprotocol> <snmpv3_privpassphrase/> <formula>1</formula> <delay_flex/> <params/> <ipmi_sensor/> <data_type>0</data_type> <authtype>0</authtype> <username/> <password/> <publickey/> <privatekey/> <port/> <description/> <inventory_link>0</inventory_link> <applications> <application> <name>Zimbra service</name> </application> </applications> <valuemap> <name>Service state</name> </valuemap> <logtimefmt/> </item_prototype> </item_prototypes> <trigger_prototypes> <trigger_prototype> <expression>{Template Zimbra Services:zimbra.status[{#ZIMBRASERVICE}].last()}#1</expression> <name>Zimbra service "{#ZIMBRASERVICE}" not running on {HOST.NAME}</name> <url/> <status>0</status> <priority>2</priority> <description/> <type>0</type> </trigger_prototype> </trigger_prototypes> <graph_prototypes/> <host_prototypes/> </discovery_rule> </discovery_rules> <macros/> <templates/> <screens/> </template> </templates> </zabbix_export> |
Redémarrer l’agent Zabbix
1 |
$ sudo systemctl restart zabbix-agent |
Importer le fichier yo_zimbra_template.xml comme ci dessous
Puis associer le template a l’host
Screenshot des items rajoutés
Test d’arrêt du service anti-virus sur Zimbra, il notifie bien une alerte.
Il faut patienter jusqu’à 1 journée pour la découverte de tous les services.
/!\ Note de l’auteur
Please note the external script requires sudo privileges to run, so either copy the content of the sudo_zbx-zimbra.conf file to your sudoers or link it to /etc/sudoers.d/. Also copy yo-zimbra.conf to /etc/zabbix/zabbix_agentd.d/ and the script file to your zabbix agent’s script directory (usually /etc/zabbix/scripts, if differeny adjust yo-zimbra.conf accordingly).
Restart zabbix-agent and import the template to your server. The service discovery is set very long (1 day), so it may take that long for services to show up in Zabbix. The discovery command can take more than the 3s of the default command timeout, used by both agent and server/proxy. In case you see something like
Bonjour,
J’ai respecter exactement votre procédure, et pour autant, en “Triggers”, je n’ai que le contrôle du mailq de Zimbra de disponible ? Avez-vous une idée ?
Merci
Cordialement
EDIT :
Pour plus d’informations, je n’ai pas du tout toutes ces informations présentes dans le screenshot “Screenshot des items rajoutés”
Bonjour Sébastien,
J’ai répété ce tuto sur 2 serveurs, je n’ai rencontré aucun problème.
avez vous bien importer le fichier yo_zimbra_template.xml sur le serveur Zabbix depuis son interface ?
Bonjour,
Oui, j’ai tout respecter à la lettre.
En faite, j’ai bien 2 Item (Zimbra Queue & Zimbra Version), mais j’ai que 2 triggers pour zimbra.queue.
Dois-je créer manuellement les triggers pour le status ?
Est-il possible de contrôler la taille d’un répertoire zimbra ?
Je suis novice dans zabbix mais souhaite absolument maîtrisé cet outil
Merci beaucoup
hello
Je n’ai pas eu a créer les tiggers,je ne vois donc aps pourquoi cela bloque.
Je ne maitrise pas Zabbix, je travaille plus avec Nagios pour la remonté des espaces disques, les queues anormalement élevés et autres problèmes.
Pour Zabbix, peux être trouveras tu plus d’infos sur le lien original https://github.com/YetOpen/zabbix-scripts/tree/master/zabbix-zimbra
Bonjour,
J’ai principalement suivi ce lien avec les explications, ainsi que les tiennes. Etrangement, je n’ai que 2 item, et 2 trigger au total. C’est bien pour ça que je ne comprends pas.
Je suis sur Zabbix 3.4
Cordialement
Bonjour,
J’ai tout refait, exactement comme est écrit mot pour mot dans votre tutoriel… j’ai que 2 items :
– Zimbra Queue
– Zimbra Version
2 trigger :
– Zimbra queue greater than 500 messages
– Zimbra queue greater than 200 messages
Si vous n’avez pas idée, merci quand même, sinon, votre aide me serait très bénéfique
Cordialement
Bizarre.
je viens de réinstaller un zabbix a l’arrache et juste importer le script yo_zimbra_template.xml et j’ai bien le Template Zimbra Services qui apparait dans les templates.
L’as tu associer a ta machine ?
Configuration -> Hosts -> cliquer sur la machine Zimbra serveur -> templates -> select -> sélectionner Template Zimbra Services -> Add -> et Update
Bonjour,
J’ai tout fait, “Template Zimbra Services” a 2 items : “Zimbra Queue” et “Zimbra Services” qui dispose que de 2 triggers :
{Template Zimbra Services:zimbra.queue.last()}>200 and {Template Zimbra Services:zimbra.queue.last()}500
C’est tout…
Tu utilises quel version de Zimbra ?
Bonjour,
Tout d’abord, désolé du retard, j’étais en déplacement.
Je suis sur une zimbra 8.7.11 et un zabbix 3.4
J’ai un ansible qui pousse toute la conf
J’ai un collègue qui a trouver une erreur dans le script apparemment. Mais ca m’étonne car tu m’as dit que tu as tout télécharger, déployer, et rien toucher et ça fonctionne correctement…
Je te tiens au courant de toute façon, j’ai réinstaller le serveur proprement et je refais la configuration sur une nouvelle infrastructure.
Hello
j’ai testé a l’époque sur une 8.6 et un Zabbix en 3.4.2.
Toutefois si l’erreur corrige ton problème, repasse me faire un p’tit update. merci