This is the documentation page for an unsupported version of Zabbix.
Is this not what you were looking for? Switch to the current version or choose one from the drop-down menu.

5 Découverte à l'aide de requêtes SQL ODBC

Aperçu

Ce type de découverte de bas niveau est effectué à l'aide de requêtes SQL, dont les résultats sont automatiquement transformés en un objet JSON adapté à la découverte de bas niveau.

Clé d'élément

Les requêtes SQL sont effectuées à l'aide d'un type d'élément "Surveillance de base de données". Par conséquent, la plupart des instructions de la page de supervision ODBC s’appliquent afin d’obtenir une règle de découverte "Surveillance de base de données" opérationnelle, la seule différence étant que la clé :

db.odbc.discovery[<description>,dsn]

doit être utilisée à la place de "db.odbc.select[<description>,dsn]".

La découverte à l'aide de requêtes SQL est supportée depuis le serveur/proxy Zabbix 3.0.

Comme exemple pratique pour illustrer comment la requête SQL est transformée en JSON, considérons la découverte de bas niveau des proxys Zabbix en effectuant une requête ODBC sur une base de données Zabbix. Ceci est utile pour la création automatique d'éléments internes "zabbix[proxy,<name>,lastaccess]" afin de surveiller quels proxys sont fonctionnels.

Commençons par la configuration de la règle de découverte :

Tous les champs de saisie obligatoires sont marqués d'un astérisque rouge.

Ici, la requête directe suivante sur la base de données Zabbix est utilisée pour sélectionner tous les proxys Zabbix, ainsi que le nombre d’hôtes qu’ils surveillent. Le nombre d'hôtes peut être utilisé, par exemple, pour filtrer les proxys vides :

mysql> SELECT h1.host, COUNT(h2.host) AS count FROM hosts h1 LEFT JOIN hosts h2 ON h1.hostid = h2.proxy_hostid WHERE h1.status IN (5, 6) GROUP BY h1.host;
       +---------+-------+
       | host    | count |
       +---------+-------+
       | Japan 1 |     5 |
       | Japan 2 |    12 |
       | Latvia  |     3 |
       +---------+-------+
       3 rows in set (0.01 sec)

Grâce au fonctionnement interne de l'élément “db.odbc.discovery[,{$DSN}]”, le résultat de cette requête est automatiquement transformé en JSON suivant :

{
           "data": [
               {
                   "{#HOST}": "Japan 1",
                   "{#COUNT}": "5"
               },
               {
                   "{#HOST}": "Japan 2",
                   "{#COUNT}": "12"
               },
               {
                   "{#HOST}": "Latvia",
                   "{#COUNT}": "3"
               }
           ]
       }

On peut voir que les noms de colonne deviennent des noms de macro et que les lignes sélectionnées deviennent les valeurs de ces macros.

S'il n'est pas évident de transformer un nom de colonne en nom de macro, il est suggéré d'utiliser des alias de colonne tels que "COUNT(h2.host) AS count" dans l'exemple ci-dessus.

Si un nom de colonne ne peut pas être converti en un nom de macro valide, la règle de découverte devient non supportée, le message d'erreur détaillant le numéro de colonne incriminé. Si une aide supplémentaire est nécessaire, les noms de colonne obtenus sont fournis sous DebugLevel=4 dans le fichier journal du serveur Zabbix :

$ grep db.odbc.discovery /tmp/zabbix_server.log
        ...
        23876:20150114:153410.856 In db_odbc_discovery() query:'SELECT h1.host, COUNT(h2.host) FROM hosts h1 LEFT JOIN hosts h2 ON h1.hostid = h2.proxy_hostid WHERE h1.status IN (5, 6) GROUP BY h1.host;'
        23876:20150114:153410.860 db_odbc_discovery() column[1]:'host'
        23876:20150114:153410.860 db_odbc_discovery() column[2]:'COUNT(h2.host)'
        23876:20150114:153410.860 End of db_odbc_discovery():NOTSUPPORTED
        23876:20150114:153410.860 Item [Zabbix server:db.odbc.discovery[proxies,{$DSN}]] error: Cannot convert column #2 name to macro.

Maintenant que nous comprenons comment une requête SQL est transformée en objet JSON, nous pouvons utiliser la macro {#HOST} dans des prototypes d’élément :

item_prototype_odbc.png

Une fois la découverte effectuée, un élément sera créé pour chaque proxy :

discovered_items_odbc1.png