Áú»¢¶Ä²©

This is the documentation page for an unsupported version of Áú»¢¶Ä²©.
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 »å¨¦³¦´Ç³Ü±¹±ð°ù³Ù±ð 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 »å¨¦³¦´Ç³Ü±¹±ð°ù³Ù±ð 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 »å¨¦³¦´Ç³Ü±¹±ð°ù³Ù±ð "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 »å¨¦³¦´Ç³Ü±¹±ð°ù³Ù±ð ¨¤ l'aide de requ¨ºtes SQL est support¨¦e depuis le serveur/proxy Áú»¢¶Ä²© 3.0.

Comme exemple pratique pour illustrer comment la requ¨ºte SQL est transform¨¦e en JSON, consid¨¦rons la »å¨¦³¦´Ç³Ü±¹±ð°ù³Ù±ð de bas niveau des proxys Áú»¢¶Ä²© en effectuant une requ¨ºte ODBC sur une base de donn¨¦es Áú»¢¶Ä²©. 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 »å¨¦³¦´Ç³Ü±¹±ð°ù³Ù±ð :

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 Áú»¢¶Ä²© est utilis¨¦e pour s¨¦lectionner tous les proxys Áú»¢¶Ä²©, 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 »å¨¦³¦´Ç³Ü±¹±ð°ù³Ù±ð 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 Áú»¢¶Ä²© :

$ 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 [Áú»¢¶Ä²© 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 »å¨¦³¦´Ç³Ü±¹±ð°ù³Ù±ð effectu¨¦e, un ¨¦l¨¦ment sera cr¨¦¨¦ pour chaque proxy :

discovered_items_odbc1.png