Aquest tipus de descoberta de baix nivell es realitza mitjan?ant consultes SQL, els resultats de les quals es transformen autom¨¤ticament en un objecte JSON adequat per a la descoberta de baix nivell.
Les consultes SQL es realitzen mitjan?ant un element de tipus "Monitoratge de bases de dades". Per tant, la majoria de les instruccions de la p¨¤gina monitoratge ODBC s'apliquen per obtindre una regla de descoberta de "monitoratge de bases de dades" que funcioni.
Es poden emprar dues claus d'elements a les regles de descoberta "Monitoratge de bases de dades":
db.odbc.discovery[]
, aquest element no crea macros de descoberta de baix nivell al JSON retornat, de manera que no cal comprovar si els noms de columnes poden ser noms de macro v¨¤lids . Les macros de descoberta de baix nivell es poden definir com una passa addicional si cal, emprant la funci¨® macro LLD personalitzada amb JSONPath apuntant als valors descoberts al JSON retornat. Veieu tamb¨¦: emprant db.odbc.get.Com a exemple pr¨¤ctic per il¡¤lustrar com la consulta SQL es transforma en JSON, considereu la descoberta de baix nivell dels proxys Áú»¢¶Ä²© mitjan?ant la realitzaci¨® d'una consulta ODBC a la base de dades Áú»¢¶Ä²©. Aix¨° ¨¦s ¨²til per a la creaci¨® autom¨¤tica d'elements interns "zabbix[proxy,<nom>,lastaccess]" per monitorar quins proxys s¨®n actius.
Comencem amb la configuraci¨® de la regla de descoberta:
Tots els camps d'entrada obligatoris s¨®n marcats amb un asterisc vermell.
Aqu¨ª, la seg¨¹ent consulta directa a la base de dades Áú»¢¶Ä²© s'empra per triar tots els proxys Áú»¢¶Ä²©, juntament amb el nombre d'equips que monitoren. El nombre d'equips es pot emprar, per exemple, per filtrar els proxys buits:
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;
+---------+-------+
| equip | recompte |
+---------+-------+
| Japon¨¨s 1 | 5 |
| Japon¨¨s 2 | 12 |
| Let¨°nia | 3 |
+---------+-------+
3 files en conjunt (0,01 segons)
Gr¨¤cies al funcionament intern de l'element ¡°db.odbc.discovery[,{$DSN}]¡±, el resultat d'aquesta consulta es transforma autom¨¤ticament en el seg¨¹ent JSON:
[
{
"{#HOST}": &±ç³Ü´Ç³Ù;´³²¹±è¨®1&±ç³Ü´Ç³Ù;,
"{#COUNT}": "5"
},
{
"{#HOST}": "Jap¨® 2",
"{#COUNT}": "12"
},
{
"{#HOST}": &±ç³Ü´Ç³Ù;³¢±ð³Ù¨°²Ô¾±²¹&±ç³Ü´Ç³Ù;,
"{#COUNT}": "3"
}
]
Podem veure que els noms de les columnes es converteixen en noms de macro i les fileres triades es converteixen en els valors d'aquestes macros.
Si no ¨¦s obvi com convertir un nom de columna en un nom de macro, es recomana emprar ¨¤lies de columna com ara "COUNT(h2.host) AS count" a l'exemple anterior. Si un nom de columna no es pot convertir en un nom de macro v¨¤lid, la regla de descoberta no s'admet, amb el missatge d'error que detalla el nombre de columna ofensiu. Si cal m¨¦s ajuda, els noms de columnes obtinguts es proporcionen a DebugLevel=4 al fitxer de registre del servidor Áú»¢¶Ä²©:
$ grep db.odbc.discovery /tmp/zabbix_server.log
...
23876:20150114:153410.856 A la consulta db_odbc_discovery(): 'SELECT h1.host, COUNT(h2.host) FROM hosts h1 LEFT JOIN hosts h2 ON h1.hostid = h2.proxy_hostid WHERE h1.BY6 GROUP IN (GRUP) h1.host;'
23876:20150114:153410.860 db_odbc_discovery() columna[1]:'amfitri¨®'
23876:20150114:153410.860 db_odbc_discovery() column[2]:'COUNT(h2.host)'
23876:20150114:153410.860 Final de db_odbc_discovery():NOTSUPPORTED
23876:20150114:153410.860 Error de l'element [Servidor Áú»¢¶Ä²©:db.odbc.discovery[proxies,{$DSN}]]: no es pot convertir el nom de la columna 2 a macro.
Ara que entenem com es transforma una consulta SQL en un objecte JSON, podem emprar la macro {#HOST} als prototips d'elements:
Un cop descobert, es crear¨¤ un element per a cada proxy:
Emprant db.odbc.get[,{$DSN}]
i el seg¨¹ent exemple:
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;
+---------+-------+
| equip | recompte |
+---------+-------+
| Japan 1 | 5 |
| Japan 2 | 12 |
| Latvia | 3 |
+---------+-------+
3 rows in set (0.01 sec)
el JSON que retornar¨¤:
[
{
"host": "Japan 1",
"count": "5"
},
{
"host": "Japan 2",
"count": "12"
},
{
"host": "Latvia",
"count": "3"
}
]
Com podeu veure, no hi ha macros de descoberta de baix nivell. Tanmateix, es poden crear macros de descoberta personalitzades de baix nivell a la pestanya LLD Macros d'una regla de descoberta mitjan?ant JSONPath, per exemple:
{#HOST} ¡ú $.host
Ara aquesta macro {#HOST} es pot emprar a prototips d'elements: