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.
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¨¦ :
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 :
Une fois la »å¨¦³¦´Ç³Ü±¹±ð°ù³Ù±ð effectu¨¦e, un ¨¦l¨¦ment sera cr¨¦¨¦ pour chaque proxy :