[Zabbix] Ajout d’un template pour Zimbra

 

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.

$ sudo vim /etc/zabbix/zabbix_agentd.d/yo-zimbra.conf
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

$ sudo vim /etc/sudoers.d/sudo_zbx-zimbra.conf
# 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

$ sudo vim /etc/zabbix/scripts/zbx_zimbra.sh
#!/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;
$ 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.

$ vim ~/yo_zimbra_template.xml
<?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 &quot;$1&quot;</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 &quot;{#ZIMBRASERVICE}&quot; 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

$ 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

 

 

 

Rating: 5.0/5. From 1 vote.
Please wait...

12 thoughts to “[Zabbix] Ajout d’un template pour Zimbra”

  1. 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

    No votes yet.
    Please wait...
    1. EDIT :

      Pour plus d’informations, je n’ai pas du tout toutes ces informations présentes dans le screenshot “Screenshot des items rajoutés”

      No votes yet.
      Please wait...
      1. 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 ?

        No votes yet.
        Please wait...
        1. 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

          No votes yet.
          Please wait...
          1. 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

            No votes yet.
            Please wait...
  2. 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

    No votes yet.
    Please wait...
  3. 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

    No votes yet.
    Please wait...
    1. 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

      No votes yet.
      Please wait...
      1. 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…

        No votes yet.
        Please wait...
        1. Tu utilises quel version de Zimbra ?

          No votes yet.
          Please wait...
          1. 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.

            No votes yet.
            Please wait...
          2. 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

            No votes yet.
            Please wait...

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.